iptablesでFTPのパッシブモード通信許可
こんにちは。
iptablesの学習でテスト用のFWサーバーと2台のWebサーバーをつくりました。
いまはForwardでアクセスごとに転送先を振り分ける実験をしています。
FTPのForward設定でわからないことがあるので質問させてください。
やりたいこと:
ip_conntrack_ftpを組み込めばiptablesにいちいちパッシブ通信の使用ポートすべてを指定しなくても、モジュールが自動で制御してくれるという情報をネットで見かけ、それをやってみようと考えています。ところがどうがんばってもFTPのパッシブモードがつながりません。FTP以外のサービス、たとえばDNS, NTP, HTTP等のForwardは問題なく行えています。
環境:
FWサーバー → CentOS6 iptablesで外部からのアクセスをブロックしたり、振り分けたり。
WEBサーバー → CentOS6 apacheとvsftpdでWebサーバーを構成。iptables無効です。
ルーター → 業務用ですがファイアウォール等はすべて無効になっています。
111.222.333.0はグローバルIPアドレスです。
192.168.1.0はローカルIPアドレスです。
-eth0(WEB_SERVER1)
| 192.168.1.2(→111.222.333.2)
(ONU)-(ROUTER)-eth0(FW_SERVER)eth1----|
111.222.333.1(eth0) |
111.222.333.2(eth0:1) -eth0(WEB_SERVER2)
111.222.333.3(eth0:2) 192.168.1.3(→111.222.333.3)
192.168.1.1(eth1)
FWサーバーのiptable設定:
net.ipv4.ip_forward = 1
ip_conntrack_ftpモジュール有効
ip_nat_ftpモジュール有効
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
.
.(一部省略)
.
# HTTP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -m multiport --dport 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 -o eth0 -m multiport --sport 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
# FTP(ここをどうしたらいいのかわからない)
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp --sport 21 -j ACCEPT
# Webserver1
iptables -t nat -A PREROUTING -i eth0 -d 111.222.333.2 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.2 -j SNAT --to-source 111.222.333.2
# Webserver2
iptables -t nat -A PREROUTING -i eth0 -d 111.222.333.3 -j DNAT --to-destination 192.168.1.3
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.3 -j SNAT --to-source 111.222.333.3
上記設定でFTPのForward部分をmultiportにしてポート20を入れたり除いたり、NEWやESTABLISHEDやRELATEDを入れたり消したり、いろいろ試行錯誤していますがFilezillaで下のようなエラーがでます。
PASV
レスポンス: 227 Entering Passive Mode (111,222,333,2,92,226).
コマンド: LIST
エラー: 接続タイムアウト
エラー: ディレクトリ一覧表示の取り出しに失敗しました
説明が長くて恐縮ですがよろしくお願いします。
<(_ _)>
お礼
情報ありがとうございます。 >LOGの設定をしても、得られる情報は、IPアドレス、ポート番号、長さ、パケットの種類くらいですが、それで十分ですか? あれから調べてみたのですが、長さとは、IPヘッダの長さでしょうか? データ全体の長さを取得できればいいな と思っているのです。