LINUX.ORG.RU
ФорумAdmin

vsftpd + iptables + NAT + Ubuntu 18.04.1 Server

 , , ,


0

2

Поставлена задача настроить FTP Server. Сервер куплен, ось установлена.

Сервер находится в локальной сети за роутером TP-Link, который раздает адреса в сети 16.16.16.х. Все адреса важных ПК и серверов зарезервированы, их IP в локалке не меняются.

Роутер получает внешний белый динамический IP от провайдера (режим получения IP в TP-Link установлен «динамический», статику не дает провайдер). Пусть это будет 100.100.100.100. Есть внешний IP шлюза 100.100.100.200.

Нужно, чтобы извне могли подключаться к этому FTP серверу. Локальные пользователи созданы.

IP FTP сервера 16.16.16.10 Интерфейс enp0s3
Параметры vsftpd.conf

listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=Welcome to BIG FTP Server
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd.chroot_list
hide_ids=YES
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50500
pasv_address=16.16.16.10 

Насчет pasv_address=16.16.16.10 не уверен. Нужен ли этот параметр в конфиге?

Скажу сразу, что в настройках iptables не силен. Перечитал кучу всего, разных примеров настроек, но не работает ничего.

В общем, внес некие изменения (начитался всего):

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
Включил модули:
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
Создал скрипт для сохранеия правил и их запуска: /etc/network/if-up.d/iptables-rules

Вот с самими правилами беда(((:

iptables -A INPUT -p tcp --dport 20 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 50000:50500 -m conntrack --ctstate NEW -j ACCEPT

Нашел в сети еще такие правила:

iptables -t nat -A PREROUTING -i enp0s3 -p tcp -m tcp --dport 2100 -j DNAT --to-destination 16.16.16.10:21
iptables -t nat -A PREROUTING -i enp0s3 -p tcp -m tcp --dport 10000:10100 -j DNAT --to-destination 16.16.16.10
iptables -A INPUT -i enp0s3 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -i enp0s3 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

И еще пара вопросов:

  • Как в Ubuntu 18.04.1 автоматом подключать модули nf_conntrack_ftp и nf_nat_ftp?
  • Нужно ли включать echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper?

Понимаю, что косяков много. Копаю, учусь.


Здравствуйте, я предлагаю Вам структурировать задачу, потому что пока, судя по изложению, в голове у Вас каша.

И так, поскольку сервер не имеет публичного адреса, Вам необходимо организовать на шлюзе проброс 21 порта.

Делается это с помощью одного из приведенных Вами правил:

iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 21 -j DNAT --to 16.16.16.10:21

Здесь enp0s3 - интерфейс с публичным IP-адресом. Обратите внимание, в приведенном Вами правиле почему-то пробрасывался порт 2100 вместо 21, это явная ошибка.

Следующая проблема - динамический IP. Решение - регистрация на каком-либо из сервисов, предоставляющим услугу динамического DNS. Логика такая - Вы регистрируете на таком сервисе домен и каждый раз, когда на роутере происходит смена публичного IP, должен активироваться скрипт, который меняет соответствующую запись в DNS. Пример скрипта вы легко в Сети найдете.

При таком подходе внешние клиенты смогут достучаться до Вашего сервера по доменному имени.

У этого решения есть и минусы - благодаря наличию кеширующих DNS-серверов может быть задержка в обновлении информации, и часть клиентов не смогут соединиться с сервером. Для минимизации подобных случаев внимательно отнеситесь к установке значения TTL в файле доменной зоны - оно должно быть минимальным.

Serge10 ★★★★★
()
Ответ на: комментарий от Ku

Ну судя по вопросу в топике продукцию hp я больше не буду покупать :)

anc ★★★★★
()

Вот еще возникло одно сомнение, вы все что после vsftpd.conf где делаете? Случайно не на том же сервере?

anc ★★★★★
()
Ответ на: комментарий от Ku

Forward портов надо делать на роутере, это у вас tplink. А не сервер. И lan в виде 16.16.16.х вы откуда взяли? В целом мат. часть сначала изучите.

anc ★★★★★
()
Ответ на: комментарий от anc

Перенастроили сеть для локалки 16.16.16.х и работает все отлично. По-умолчанию на роутере домашняя 192.168.0.х. Она не подходит по ряду причин.

Копну про проброс портов на роуетере TP-Linк.

Ku
() автор топика
Ответ на: комментарий от Ku

Перенастроили сеть для локалки 16.16.16.х и работает все отлично.

Только она принадлежит hp, это вас не смущает ?

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.