1.はじめに。
Firewall用のアプリとしてFWTK(Firewall Tool Kit)という便利な物があります。proxyツール集です。
こちらですが、FreeBSDの portsに入っていましたが、長らくメンテナンスが行なわれず廃止されてしまいました。
しばらくはメンテ廃止前のファイルを保存して自前でMakeしてたのですが、FreeBSDのパッケージ管理がpkg_add から pkgに更新されてしまって、コンパイルもファイルをたくさん修正する必要があり、簡単に出来なくなったので代わりのものを探してみました。
2.FWTKのどんな機能を使ってたのか?
FWTKのほとんどのproxy機能はDeleGateで代用できます。
一つだけ実現できなくて困ってた機能がありました。
FWTKは送信元アドレスによってproxyの挙動を変更できました。
たとえば許可の与えたIPではセキュリティがゆるいモードで動作する内部サーバに転送、それ以外のIPでは厳しいモードで動作する内部サーバに転送。
本作業は、外向けのサーバを二つ準備するのがもっとも簡単なのですが、面倒なので外向けは一つでしたい。
今回DeleGateのマニュアルをよくよんだら、DYCONFで送信元IPで挙動を切り替えることができることがわかりました。
こんな感じで記述する事になると思います。XXはゆるい動作モードのサーバ、YYは厳しい動作モードのサーバという形になるかと思います。
/usr/local/sbin/delegated -P NUM \
DYCONF="{from/192.0.2.0/24},arg:{SERVER=XX}" \
DYCONF="{from/*},arg:{SERVER=YY}" ADMIN=あなたのメール
やった。FWTKを廃止できた!
3.蛇足(IPアクセス制限)
DeleGateのIPアクセス制限はRELIABLEで行ないます。
しかしDeleGateは引数が長くなり、可読性が悪いので、inetd起動の設定を行ないました。
inetd起動にする事により/etc/hosts.allowによる接続制御が可能になります。アクセス管理ファイルが一つに集約できるという利点があります。
inetd起動の場合は-Pオプションが不要です。またDeleGate固有の点として動作ユーザがnobodyになるので実行ユーザをrootと記載しない事に注意して下さい。
サービスEXAMPLEを起動するときの例を記載しておきます。
/etc/inetd.conf
---
example stream tcp nowait nobody /usr/local/libexec/delegate/example.sh example.sh
---
/etc/hosts.allow
---
example.sh: 許可IPその1: allow
example.sh: 許可IPその2: allow
example.sh: ALL: deny
---
なお導入後は必ずアクセス拒否などが出来ている事を確認してください。