У меня есть инфраструктура с балансировкой нагрузки, в которой есть пограничный сервер в качестве балансировщика нагрузки и некоторые веб-серверы в качестве внутренних серверов и сервер cpanel, который является моим ftp-сервером. Я хочу перенаправить ftp-трафик через iptables на ftp-сервер, который находится за моим сервером балансировки нагрузки. Сценарий такой:
ФУНТ:
Ens19: public_ip
Ens18: 192.168.1.105
ftpserver:
eth0: 192.168.1.110
ОС LB - CentOS 7, а ОС ftpserver - CentOS 6. Я отключил firewalld и установил iptables. Правила для nat ftp трафика следующие:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j LOG
-A FORWARD -i ens19 -o ens18 -p tcp --syn --dport 21 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i ens19 -o ens18 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i ens18 -o ens19 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i ens19 -p tcp --dport 21 -j DNAT --to-destination 192.168.1.110:21
-A POSTROUTING -o ens18 -p tcp --dport 21 -d 192.168.1.110 -j SNAT --to-source 192.168.1.105
-A POSTROUTING -s 192.168.1.0/24 -o ens19 -j MASQUERADE
COMMIT
Я также добавил следующую строку в файл iptables-config:
IPTABLES_MODULES = "ip_nat_ftp ip_conntrack_ftp"
и net.ipv4.ip_forward = 1.
после того, как я хочу подключиться к ftp, я получаю следующую ошибку:
$> ftp public_ip
Connected to public_ip.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 11:19. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (public_ip:sinai): ftp_user_name
331 User ss@mihankhabar.net OK. Password required
Password:
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
425 Could not open data connection to port 29806: Connection timed out
ftp>
Я думаю, что процесс входа в систему полностью завершен, и проблема заключается в передаче данных. Не могли бы вы помочь мне решить эту проблему?
Заранее спасибо.
Итак, его подключение в порядке, но не передача данных. FTP использует 21TCP для установления соединения, но 20TCP для отправки / получения данных. Попробуйте продублировать свои правила пересылки / SNAT / DNAT и для 20TCP:
-A ВПЕРЕД -i ens19 -o ens18 -p tcp --syn --dport 20 -m conntrack --ctstate НОВОЕ -j ПРИНЯТЬ
-A PREROUTING -i ens19 -p tcp --dport 20 -j DNAT - к месту назначения 192.168.1.110:21
-A ПОСТРОУТИРОВАНИЕ -o ens18 -p tcp --dport 20 -d 192.168.1.110 -j SNAT --to-source 192.168.1.105
Или вы можете попробовать пассивный режим FTP. В этом сценарии сервер снова подключается к клиенту (снова порт 20) для передачи данных, так что исходящее соединение должно проходить через маршрутизатор NAT.