鬼生田です。 # passive modeに対応しないftpサーバが増えましたね。
ぼくはpfではなくipfで似たようなことをしていますが サーバがFTP passive modeに対応していないと、FTPのデ ータコネクションがサーバ->クライアントに向かう以上 ipf(pf)で固めてしまうのは無理があると考え、特定のポ ート(ex:ssh,postgresql)だけを、閉じるようにしていま す。 それと並行して、TCP_WRAPPERと組み合わせ、拒否 したものを、ipfでまるごとブロックするようにしま した。 /etc/hosts.deny ALL: ALL:spawn\ (echo "block in log quick from %a to any"| /sbin/ipf -f -)& : deny 一つの回避策として、ご参考までに... In <86r5zwvu4e.wl%...@iic.hokudai.ac.jp> at Tue, 14 Apr 2009 11:36:49 +0900 Re:[ [FreeBSD-users-jp 92235] pf with ftp-proxy ] Hiroki Kashiwazaki <r...@iic.hokudai.ac.jp> wrotes: reo> 柏崎@北海道です. reo> reo> pf を使ったパケットフィルタリングをしていて,外部の ftp サイトへと reo> ftp コマンドで接続すると,プロンプトまではでるのですが ls コマンド reo> を発行すると 229 Entering Extended Passive Mode と表示されたまま, reo> 最終的に 421 Service not available, remote server has closed reo> connection. で終わります. reo> reo> この ftp 問題に対処するべく ftp-proxy を inetd 経由で呼び出し,pf reo> からはリダイレクトするようにしたのですが,どうにもうまく接続できま reo> せん.というところで皆様のお知恵を拝借したく.環境は FreeBSD 7.1 reo> です. reo> reo> まずは pf.conf から. reo> reo> % cat pf_ftp-proxy_test.conf reo> ext_if = "em0" reo> reo> ext_addr = "192.168.121.128" reo> reo> tcp_services = "{ domain, ftp, auth, 8021 }" reo> udp_services = "{ domain, ntp }" reo> reo> rdr on $ext_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021 reo> reo> block in log all reo> block out log all reo> reo> pass out proto tcp to any port $tcp_services keep state reo> pass proto udp to any port $udp_services keep state reo> pass in inet proto tcp from any to $ext_addr port { ssh } keep state reo> pass in inet proto tcp from any to 127.0.0.1 port { 8021 } keep state reo> reo> inetd.conf では reo> reo> % grep ftp-proxy inetd.conf reo> 127.0.0.1:8021 stream tcp nowait root /usr/sbin/ftp-proxy ftp-proxy reo> reo> としておりまして,とある ftp サーバに接続しますと reo> reo> % ftp 133.87.4.40 reo> Connected to 133.87.4.40. reo> 220 ProFTPD 1.3.0 Server (Debian) [133.87.4.40] reo> Name (133.87.4.40:reo): reo reo> 331 Password required for reo. reo> Password: reo> 230 User reo logged in. reo> Remote system type is UNIX. reo> Using binary mode to transfer files. reo> ftp> ls reo> 229 Entering Extended Passive Mode (|||35483|) reo> 421 Service not available, remote server has closed connection. reo> ftp> reo> reo> と,229 Entering Extended Passive Mode (|||35483|) で1分ほど沈黙した後 reo> 421 となります.この時,pflog には reo> reo> 17. 315549 rule 1/0(match): block out on em0: 192.168.121.128.61324 > 133.87.4.40.35483: [|tcp] reo> reo> が出力されます.pfctl -d で pf を無効化した後は問題なく接続できます. reo> reo> % sudo pfctl -d reo> pf disabled reo> % ftp 133.87.4.40 reo> Connected to 133.87.4.40. reo> 220 ProFTPD 1.3.0 Server (Debian) [133.87.4.40] reo> Name (133.87.4.40:reo): reo reo> 331 Password required for reo. reo> Password: reo> 230 User reo logged in. reo> Remote system type is UNIX. reo> Using binary mode to transfer files. reo> ftp> ls hoge reo> 229 Entering Extended Passive Mode (|||54282|) reo> 150 Opening ASCII mode data connection for file list reo> drwxr-xr-x 2 reo reo 4096 Apr 14 11:28 . reo> drwxr-xr-x 15 reo reo 4096 Apr 14 11:28 .. reo> 226 Transfer complete. reo> ftp> reo> reo> また,例えば ftp4.jp.freebsd.org に接続した時などは pf が有効であって reo> も問題なく接続できることから,そもそも着眼点が違う ? という気がしない reo> でもありません.ftp サーバ側の問題なのか…… ? reo> reo> % sudo pfctl -e reo> pf enabled reo> % ftp ftp4.jp.freebsd.org reo> Connected to ftp.sakura.ad.jp. reo> 220 FTP Server ready. reo> Name (ftp4.jp.freebsd.org:reo): anonymous reo> 331 Anonymous login ok, send your complete email address as your password reo> Password: reo> 230 Anonymous login ok, restrictions apply. reo> Remote system type is UNIX. reo> Using binary mode to transfer files. reo> ftp> ls reo> 229 Entering Extended Passive Mode (|||38612|) reo> 500 Illegal EPRT command reo> 200 PORT command successful reo> 150 Opening ASCII mode data connection for file list reo> drwxr-xr-x 3 ftp ftp 4096 Oct 14 2008 . reo> drwxr-xr-x 3 ftp ftp 4096 Oct 14 2008 .. reo> drwxr-xr-x 11 ftp ftp 4096 Dec 22 03:11 pub reo> 226 Transfer complete reo> ftp> reo> reo> ということで,混乱しきっている私の脳みそに手を差し伸べていただければ reo> 幸いです. --- Oniuda