Стандартная задача - пробросить ftp за Nat. Небольшая сложность в том, что нужно кроме 21 порта пробросить диапазон дополнительных портов и настроить сам ftp на указаение данного диапозона и ip внешнего интерфейса.
К примеру, выделим для ftp порт 2100 и 10000-10100
Локальный ftp сервер работает на 192.168.122.100 порт 21.
Тогда настройки iptables для "шлюза":
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 2100 -j DNAT --to-destination 192.168.122.100:21
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 10000:10100 -j DNAT --to-destination 192.168.122.100
И в самом ftp надо указать эти нюансы. В случае vsftpd это делается добавлением строк:
pasv_min_port=10000 ;Указываем используемые сервером порты, первый
pasv_max_port=10100 ;и последний
pasv_address=_внешний_ip_шлюза_
В первом приблежении можно считать настроенным.
Подписаться на:
Комментарии к сообщению (Atom)
Не хочет получать список каталогов:
ОтветитьУдалитьСтатус: Определение IP-адреса для xxx.xxx.xx
Статус: Соединяюсь с xxx.xxx.xxx.xxx:2121...
Статус: Соединение установлено, ожидание приглашения...
Ответ: 220 (vsFTPd 2.3.2)
Команда: USER administrator
Ответ: 331 Please specify the password.
Команда: PASS *
Ответ: 230 Login successful.
Команда: OPTS UTF8 ON
Ответ: 200 Always in UTF8 mode.
Статус: Соединение установлено
Статус: Получение списка каталогов...
Команда: PWD
Ответ: 257 "/home/administrator"
Команда: TYPE I
Ответ: 200 Switching to Binary mode.
Команда: PORT 192,168,77,101,200,166
Ответ: 500 Illegal PORT command.
Команда: PASV
Ответ: 227 Entering Passive Mode (192,168,77,253,156,219).
Статус: Сервер отправил пассивный ответ с неопределяемым адресом. Использую существующий адрес сервера.
Команда: LIST
Ошибка: The data connection could not be established: ECONNREFUSED - Connection refused by server
Ошибка: Превышено время ожидания соединения
Ошибка: Не удалось получить список каталогов
Проброс портов такой:
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 40000:40500 -j DNAT --to-destination 192.168.77.253
#1. Это правило подменяет IP приемника на внутренний IP:
iptables -t nat -D PREROUTING -p tcp -d xxx.xxx.xxx.xxx --dport 2121 -j DNAT --to-destination 192.168.77.253:21
iptables -t nat -D PREROUTING -p udp -d xxx.xxx.xxx.xxx --dport 2121 -j DNAT --to-destination 192.168.77.253:21
#2. Это правило обратно подменяет IP отправителя на внешний:
iptables -t nat -D POSTROUTING -p tcp --dst 192.168.77.253 --dport 21 -j SNAT --to-source xxx.xxx.xxx.xxx
iptables -t nat -D POSTROUTING -p udp --dst 192.168.77.253 --dport 21 -j SNAT --to-source xxx.xxx.xxx.xxx
#
iptables -D FORWARD -i eth1 -p udp --dport 2121 -j ACCEPT
iptables -D FORWARD -i eth1 -p tcp --dport 2121 -j ACCEPT
По правилам для iptables не совсем понятно.
ОтветитьУдалитьiptables -D - это удаление правила из цепочки. -A - добавление.
В ваших приведенных правилах - "-A" только в первом, затем везде идет -D, т.е. по сути удаление данных правил (если они конечно там были установлены раньше)
Да, извиняюсь, за ошибку. Вот сейчас такие правила на сервере:
ОтветитьУдалитьiptables -t nat -A PREROUTING -p tcp -d 46.219.xxx.xxx --dport 1521 -j DNAT --to-destination 192.168.77.253:1520
iptables -t nat -A PREROUTING -p tcp -d 46.219.xxx.xxx --dport 1521 -j DNAT --to-destination 192.168.77.253:1521
iptables -t nat -A PREROUTING -p tcp -d 46.219.xxx.xxx --dport 40000:40500 -j DNAT --to-destination 192.168.77.253
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.77.253 -m tcp --dport 1520 -j SNAT --to-source 46.219.xxx.xxx:1521
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.77.253 -m tcp --dport 1521 -j SNAT --to-source 46.219.xxx.xxx:1521
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.77.253 -m tcp --dport 40000:40500 -j SNAT --to-source 46.219.xxx.xxx
На FTP соответственно порты:
1520, 1521, 40000:40500
Все равно нет доступа.
Этот комментарий был удален автором.
Удалитьесли набирать внешний IP и порт 1521 из локальной сети, то заходит без проблем. То значит перенаправление работает, а если из Интернета заходить, то не хочет. Может быть дело в том, что нужно перезагружать сам сервер/сетевую карту после изменений IP tables?
УдалитьПорядок внесения правил в iptables важен. Перезагружать не надо, просто надо "обнулить" правила и внести по новой в нужном порядке - либо скриптом, либо iptables-restore.
УдалитьПо правилам вроде криминала нет. Вообще полезно послушать пакеты на соответствующих интерфейсах и портах, к примеру
tcpdump -n -i eth0 | grep 1520
и т.п. Для отладки правил и т.п. - полезно. Может логинг ipables тоже использовать.
спасибо большое за статью!!
ОтветитьУдалитьПасиб
ОтветитьУдалитьСпасибо!!! Пол дня потерял на попытки пробросить пока не нашел эту статью, а тут 5 минут и всё запустилось! Ещё раз СПАСИБО!!!
ОтветитьУдалить