鬼生田です。
# 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%[email protected]>
at Tue, 14 Apr 2009 11:36:49 +0900
Re:[ [FreeBSD-users-jp 92235] pf with ftp-proxy ]
Hiroki Kashiwazaki <[email protected]> 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