J'essaie de transférer un serveur FTP avec IPTables. Le serveur FTP fonctionne sur une boîte Windows 2008 (Cerberus).
Détails Win Box:
- IP: 192.168.220.51
- Port FTP: 21
- Ports PASV: 11000-13000
Le serveur FTP fonctionne très bien en LAN.
Le routeur fonctionne bien pour les autres clients (Servant NAT, DHCP, Pare-feu, ...). J'ai besoin de transmettre le service FTP au monde extérieur, mais je ne peux pas utiliser les ports 20-21 (déjà pris).
J'ai essayé, mais cela n'a pas fonctionné:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21
Configuration actuelle d'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
Toute aide est la bienvenue :-).
Bounty-Edit : Je n'ai pas pu comprendre cela, toute aide serait grandement appréciée.
EDIT2
Je peux maintenant telnet sur mon serveur FTP, après y avoir exécuté les commandes:
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
Je commence à y arriver ... Je pense que j'ai juste besoin de faire fonctionner mes ports PASV maintenant ...
EDIT3: Informations supplémentaires
[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
Solution
C'est comme ça que je l'ai fait, peut-être pas très joli, mais ça marche.
[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
Quelques notes supplémentaires: le serveur FTP écoute sur les bots 21 et 2121 et la plage PASV est réglée de 11000 à 13000
la source
lsmod | grep -i ftp
?ip_conntrack_ftp
et lesip_nat_ftp
modules du noyau chargé. FTP est un protocole intéressant à gérer derrière un pare-feu / passerelle NAT. Vous pouvez trouver plus facile d'utiliser simplement sftp (SSH FTP) qui n'utilise que le port 22 et est crypté (beaucoup plus sécurisé). FileZilla est un excellent client FTP gratuit qui prend en charge SFTP.Réponses:
Pour que la prise en charge passive fonctionne, vous devrez transférer les ports passifs au serveur ftp interne avec les mêmes numéros de port .
Solution simple: transférez-les tous à tout moment
InternetIP: 11000-13000 -> 192.168.220.51:11000-13000
Solution plus difficile:
Vous aurez besoin d'un agent de suivi de connexion à usage spécial qui lit le protocole FTP et fait les bons mappages NAT juste à temps. Il semble que ip_conntrack_ftp pourrait faire cela.
la source
Je crois que vous avez besoin d'un module de suivi de connexion FTP chargé.
http://www.sns.ias.edu/~jns/wp/2006/01/12/iptables-connection-tracking-ftp/
la source
devrait suffire
la source
2121
être remplacé par21
? Comment les modules ftp reconnaissent-ils une connexion comme contrôle ftp? Sera-t-il appliqué à chaque connexion utilisant le port 21 avant ou après NAT?