鬼生田です。

# 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

メールによる返信