柏崎@北海道です.
pf を使ったパケットフィルタリングをしていて,外部の ftp サイトへと
ftp コマンドで接続すると,プロンプトまではでるのですが ls コマンド
を発行すると 229 Entering Extended Passive Mode と表示されたまま,
最終的に 421 Service not available, remote server has closed
connection. で終わります.
この ftp 問題に対処するべく ftp-proxy を inetd 経由で呼び出し,pf
からはリダイレクトするようにしたのですが,どうにもうまく接続できま
せん.というところで皆様のお知恵を拝借したく.環境は FreeBSD 7.1
です.
まずは pf.conf から.
% cat pf_ftp-proxy_test.conf
ext_if = "em0"
ext_addr = "192.168.121.128"
tcp_services = "{ domain, ftp, auth, 8021 }"
udp_services = "{ domain, ntp }"
rdr on $ext_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021
block in log all
block out log all
pass out proto tcp to any port $tcp_services keep state
pass proto udp to any port $udp_services keep state
pass in inet proto tcp from any to $ext_addr port { ssh } keep state
pass in inet proto tcp from any to 127.0.0.1 port { 8021 } keep state
inetd.conf では
% grep ftp-proxy inetd.conf
127.0.0.1:8021 stream tcp nowait root /usr/sbin/ftp-proxy ftp-proxy
としておりまして,とある ftp サーバに接続しますと
% ftp 133.87.4.40
Connected to 133.87.4.40.
220 ProFTPD 1.3.0 Server (Debian) [133.87.4.40]
Name (133.87.4.40:reo): reo
331 Password required for reo.
Password:
230 User reo logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||35483|)
421 Service not available, remote server has closed connection.
ftp>
と,229 Entering Extended Passive Mode (|||35483|) で1分ほど沈黙した後
421 となります.この時,pflog には
17. 315549 rule 1/0(match): block out on em0: 192.168.121.128.61324 >
133.87.4.40.35483: [|tcp]
が出力されます.pfctl -d で pf を無効化した後は問題なく接続できます.
% sudo pfctl -d
pf disabled
% ftp 133.87.4.40
Connected to 133.87.4.40.
220 ProFTPD 1.3.0 Server (Debian) [133.87.4.40]
Name (133.87.4.40:reo): reo
331 Password required for reo.
Password:
230 User reo logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls hoge
229 Entering Extended Passive Mode (|||54282|)
150 Opening ASCII mode data connection for file list
drwxr-xr-x 2 reo reo 4096 Apr 14 11:28 .
drwxr-xr-x 15 reo reo 4096 Apr 14 11:28 ..
226 Transfer complete.
ftp>
また,例えば ftp4.jp.freebsd.org に接続した時などは pf が有効であって
も問題なく接続できることから,そもそも着眼点が違う ? という気がしない
でもありません.ftp サーバ側の問題なのか…… ?
% sudo pfctl -e
pf enabled
% ftp ftp4.jp.freebsd.org
Connected to ftp.sakura.ad.jp.
220 FTP Server ready.
Name (ftp4.jp.freebsd.org:reo): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
230 Anonymous login ok, restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||38612|)
500 Illegal EPRT command
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x 3 ftp ftp 4096 Oct 14 2008 .
drwxr-xr-x 3 ftp ftp 4096 Oct 14 2008 ..
drwxr-xr-x 11 ftp ftp 4096 Dec 22 03:11 pub
226 Transfer complete
ftp>
ということで,混乱しきっている私の脳みそに手を差し伸べていただければ
幸いです.
--
柏崎 礼生 (Hiroki Kashiwazaki)@HUIST
Assistant Professor @ Graduate School of Information Science and
Technology, Hokkaido University
mailto:[email protected]
Tel:+81-11-706-2056 (Office), +81-11-706-2998 (Takai Lab.)