PFはFreeBSDでもデフォルトになったんだよね。それって結構前か?いつの話だ
うちの会社はルータ/FWをOpenBSD+PFつかってる。SunのNetraっていう1Uのちょっと前の
SPARCマシンにぶち込んで結構な量のトラフィック裁いてるけどじぇんじぇんいけてます。
結構前だけどちょっとルール見直したときに修正かけて、ちょいはまりしたので
日本語ドキュメントちょっとふるいんだよね。OpenBSD...
なので、それの健忘録として
外にftp接続して必要なパッケージを取りに行かなきゃならなく
なったのだが、ftpでつながらない。
ルータ/fwとしてOpenBSD+PFが動いている
ftpは仕様が古いのでfw越えは設定が少々厄介なのだが、
PFではそこをftp-proxyがやってくれてる。
まず、 tcpdumpしてインターフェイスのパケット見てみたが
出てはいってるのだが、dataコネクションをはれてない模様
次に
pfctl -s してみると
FIN_WAIT_2でとまってる
以前、前のバージョンから3.9にあげたときにルールは
そのままで動いたのでというか
pfctl -n -f /etc/pf.conf
してsyntaxエラーでなかったんでそのまま使っていたのだが
いろいろ調べた結果3.9からPFのftp-proxyの設定方法が
変わってた。
参考にしたのはこのサイト
http://home.nuug.no/~peter/pf/en/long-firewall.html
以前は、/etc/inetd.conf に
127.0.0.1:8021 stream tcp nowait root
/usr/libexec/ftp-proxy ftp-proxy
と追加してRDRセクションで
rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021
としてfilterセクションでpassルール書いていたのだが3.9からは
inetd.confに書いていたftp-proxyのラインはもう必要ないらしので
ftp-proxyを消して、inetdを再起動
sudo kill -HUP `cat /var/run/inetd.pid`
もし、ftp-proxyのためだけにinetdを起動していたなら
もういらなくなる。
ちなみに、/usr/libexec/ftp-proxyはもうなく
/usr/sbinにあるマニュアル起動するときはこちらから
/etc/rc.conf.local or /etc/rc.confに以下を
ftpproxy_flags=""
とのことだったので自分はrc.confではなく変更設定は
rc.conf.localに書いているので
grep "ftpproxy_flags" rc.conf >> rc.conf.local
rc.confは起動時の読み込みなので
手動で/usr/sbin/ftp-proxy
で起動
pf.confでの設定にうつる
NAT sectionに以下のanchorを設定
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
これは、NATをつかってなくても書かなきゃいけない
みたい
以前からpf使っていたらたぶんこんなルールが
NAT/RDRのセクションには書いてあるとおもうので
書いてなければ書いて
rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 \
port 8021
filter_ruleセクションにて
anchor "ftp-proxy/*"
ルールは、以前のものをそのまま使用してめでたくftpで外につなげにいけるようになった。
うちの会社はルータ/FWをOpenBSD+PFつかってる。SunのNetraっていう1Uのちょっと前の
SPARCマシンにぶち込んで結構な量のトラフィック裁いてるけどじぇんじぇんいけてます。
結構前だけどちょっとルール見直したときに修正かけて、ちょいはまりしたので
日本語ドキュメントちょっとふるいんだよね。OpenBSD...
なので、それの健忘録として
外にftp接続して必要なパッケージを取りに行かなきゃならなく
なったのだが、ftpでつながらない。
ルータ/fwとしてOpenBSD+PFが動いている
ftpは仕様が古いのでfw越えは設定が少々厄介なのだが、
PFではそこをftp-proxyがやってくれてる。
まず、 tcpdumpしてインターフェイスのパケット見てみたが
出てはいってるのだが、dataコネクションをはれてない模様
次に
pfctl -s してみると
FIN_WAIT_2でとまってる
以前、前のバージョンから3.9にあげたときにルールは
そのままで動いたのでというか
pfctl -n -f /etc/pf.conf
してsyntaxエラーでなかったんでそのまま使っていたのだが
いろいろ調べた結果3.9からPFのftp-proxyの設定方法が
変わってた。
参考にしたのはこのサイト
http://home.nuug.no/~peter/pf/en/long-firewall.html
以前は、/etc/inetd.conf に
127.0.0.1:8021 stream tcp nowait root
/usr/libexec/ftp-proxy ftp-proxy
と追加してRDRセクションで
rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021
としてfilterセクションでpassルール書いていたのだが3.9からは
inetd.confに書いていたftp-proxyのラインはもう必要ないらしので
ftp-proxyを消して、inetdを再起動
sudo kill -HUP `cat /var/run/inetd.pid`
もし、ftp-proxyのためだけにinetdを起動していたなら
もういらなくなる。
ちなみに、/usr/libexec/ftp-proxyはもうなく
/usr/sbinにあるマニュアル起動するときはこちらから
/etc/rc.conf.local or /etc/rc.confに以下を
ftpproxy_flags=""
とのことだったので自分はrc.confではなく変更設定は
rc.conf.localに書いているので
grep "ftpproxy_flags" rc.conf >> rc.conf.local
rc.confは起動時の読み込みなので
手動で/usr/sbin/ftp-proxy
で起動
pf.confでの設定にうつる
NAT sectionに以下のanchorを設定
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
これは、NATをつかってなくても書かなきゃいけない
みたい
以前からpf使っていたらたぶんこんなルールが
NAT/RDRのセクションには書いてあるとおもうので
書いてなければ書いて
rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 \
port 8021
filter_ruleセクションにて
anchor "ftp-proxy/*"
ルールは、以前のものをそのまま使用してめでたくftpで外につなげにいけるようになった。