IPTablesを使用したFTPの転送


9

IPTablesでFTPサーバーを転送しようとしています。FTPサーバーはWindows 2008ボックス(Cerberus)で実行されています。

画像

詳細勝利ボックス:

  • IP:192.168.220.51
  • FTPポート:21
  • PASVポート:11000-13000

FTPサーバーはLANでうまく機能します。

ルーターは他のクライアント(NAT、DHCP、ファイアウォールなど)で問題なく機能しています。FTPサービスを外部に転送する必要がありますが、ポート20〜21は使用できません(既に使用済み)。

私はこれを試しましたが、うまくいきませんでした:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21

現在のIPTables構成:

[root@router ~]# service iptables status
Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0           
2    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  127.0.0.1            0.0.0.0/0           
2    DROP       all  --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:2222 
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:67 
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:68 
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:1194 
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3128 
10   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53 
11   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53 
12   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:1194 
13   ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
14   DROP       udp  --  0.0.0.0/0            0.0.0.0/0           
15   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

どんな助けも素晴らしいでしょう:-)。

バウンティ編集:これを理解することができませんでした。助けていただければ幸いです。

EDIT2

コマンドを実行した後、FTPサーバーにTelnetで接続できます。

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21

私はそこに着手し始めています...私はPASV-Portsを今すぐ機能させる必要があると思います...

EDIT3:追加情報

[root@router ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 3251 packets, 154K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  540 48534 ACCEPT     all  --  *      *       127.0.0.1            0.0.0.0/0           
4270K 5625M ACCEPT     all  --  *      *       192.168.220.0/24     0.0.0.0/0           
    0     0 DROP       all  --  eth1   *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:2222 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:67 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:68 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1194 
   65  8487 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
    8   404 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3128 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:53 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:53 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:1194 
63870   81M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
  974  224K DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0           
  638 34956 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02 

Chain FORWARD (policy ACCEPT 3578K packets, 3355M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 2275K packets, 703M bytes)
 pkts bytes target     prot opt in     out     source               destination  



[root@router ~]# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 33954 packets, 2595K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:2121 to:192.168.220.51:21 

Chain POSTROUTING (policy ACCEPT 5925 packets, 699K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      eth1    0.0.0.0/0            0.0.0.0/0           
27170 1785K MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 5777 packets, 457K bytes)
 pkts bytes target     prot opt in     out     source               destination  

解決

これは私がやった方法です、あまりきれいではないかもしれませんが、うまくいきます。

[root@router ~]# iptables -t nat -I PREROUTING -p tcp --dport 2121 -j DNAT --to 192.168.220.51:2121
[root@router ~]# iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 2121 -j ACCEPT
[root@router ~]# iptables -t nat -I PREROUTING -p tcp --dport 11000:13000 -j DNAT --to 192.168.220.51:11000-13000
[root@router ~]# iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 11000:13000 -j ACCEPT

追加の注意事項:FTPサーバーはボット21と2121でリッスンしており、PASV範囲は11000から13000に設定されています


ftp conntrack&natカーネルモジュールがロードされていますか?の出力はlsmod | grep -i ftp何ですか?
スティーブン月曜日

空です。追加のカーネルモジュールをロードしませんでした。いくつか必要ですか?
Bart De Vos、2011年

1
@TiZon:はい。Iptablesは、FTPがPASVおよびPORTコマンドで使用するポート番号とアドレスを追跡するためにconntrackモジュールを必要とします。さらに、NATを実行しているときは、FTPプロトコルが正しく機能できるように、ポート番号とアドレスを書き換えるためにNATモジュールが必要です。
スティーブン

2
+1を使用すると、適切で完全な説明が得られます。
Gopoi

3
@TiZon:Steven Monaiがすでに述べたように、NATゲートウェイの背後でFTPが適切に機能するためにはip_conntrack_ftpip_nat_ftpカーネルモジュールがロードされている必要があります。FTPは、ファイアウォール/ NATゲートウェイの背後で処理する必要がある興味深いプロトコルです。ポート22のみを使用し、暗号化されているsftp(SSH FTP)を使用する方が簡単な場合があります(かなり安全です)。FileZillaは、SFTPをサポートする優れた無料のFTPクライアントです。
Sean C.

回答:


7

パッシブサポートを機能させるには、パッシブポートを同じポート番号で内部FTPサーバーに転送する必要があります

簡単な解決策:常にすべてを転送する

InternetIP:11000-13000-> 192.168.220.51:11000-13000

より難しいソリューション:

FTPプロトコルを読み取り、適切なNATマッピングを適切なタイミングで行う特殊な目的の接続追跡エージェントが必要になります。ip_conntrack_ftpがこれを行う可能性があるようです。


こうやってやった。すべてのポートを永続的に転送しました。それは最善の解決策ではないかもしれませんが、うまくいきます。howtoで編集された最初の投稿。
Bart De Vos


0
iptables -t nat -I PREROUTING -p tcp --dport 2121 -j DNAT --to 192.168.220.51:2121
iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 2121 -j ACCEPT
modprobe nf_conntrack_ftp 
modprobe nf_nat_ftp

十分なはずです


ポート番号2121を置き換えるべきではありません21か?FTPモジュールはどのようにして接続をFTPコントロールとして認識しますか?NATの前でも後でも、ポート21を使用するすべての接続に適用されますか?
kasperd 2014年

いくつかの説明がいいと思います。それで、あなたは答えを貨物で栽培しているだけではないことを知っています
Tom O'Connor

転送する送信元ポートと宛先ポートを選択します。それはあなたにとって適切なものかもしれません。これは、nat "PREROUTING"テーブルで指定したポート(この場合は2111)へのすべての接続に適用されます。netfilter ftpモジュールがどのように機能するかについては、こちらのen.wikipedia.org/wiki/Netfilter#Connection_tracking_helpers
Yalok Iy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.