[решено] Проброс портов на iptables

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

[решено] Проброс портов на iptables

Сообщение technotrance »

Здравствуйте!
Вроде проблема то банальная... Но что-то я не доделал. Прочитал несколько статей, в которых всё весьма понятно написано, и у людей всё работает. А у меня не хочет.
Имеем локалку 192.168.199.0/24
Имеем фтп-сервер proftpd с адресом 192.168.199.101
Имеем наипростейший интернет-шлюз с внутренним адресом 192.168.199.150 (он является шлюзом для фтп-сервера) и внешним белым адресом ххх.ххх.ххх.ххх
Хочу сделать банальную вещь -- доступ к фтп-серверу извне. Т.е. хочу пробросить 21-ый порт со шлюза на фтп-сервер.
Сделал следующее:
в файл sysctl.conf прописал

Код:

net.ipv4.ip_forward = 1

в файл /etc/sysconfig/network прописал

Код:

FORWARD_IPV4=yes

Дал команду

Код:

echo "1" > /proc/sys/net/ipv4/ip_forward

в файл /etc/sysconfig/iptables-config прописал

Код:

IPTABLES_MODULES="nf_conntrack_ftp ip_nat_ftp"

А вот сам iptables:

Код: Выделить всё

nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# это чтоб сам фтп-сервер имел выход наружу к репозиториям
-A POSTROUTING -p tcp -m tcp -m multiport -s 192.168.199.101 -o eth0 -j SNAT --to-source ххх.ххх.ххх.ххх --dports 80,8080,21

# А вот этими правилами я пытаюсь сделать проброс портов извне к фтп-серверу.
-A PREROUTING -p tcp -m tcp -d ххх.ххх.ххх.ххх --dport 21 -j DNAT --to-destination 192.168.199.101:21
-A PREROUTING -p tcp -m tcp -d ххх.ххх.ххх.ххх --dport 49152:65534 -j DNAT --to-destination 192.168.199.101:49152-65534
COMMIT
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT

# Eth1 -- это сетевуха, смотрящая в локалку.
-A INPUT -i eth1 -j ACCEPT

# форвардинг пока специально открыл для всех
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -o eth0 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -m state -s 127.0.0.1 --state RELATED -j ACCEPT

-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -m state -s 127.0.0.1 --state RELATED -j ACCEPT
-A FORWARD -j DROP
-A INPUT -j DROP
COMMIT
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]

Но проброс портов всё равно не работает. Что я не доделал?
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora
Контактная информация:

Re: [решено] Проброс портов на iptables

Сообщение arkhnchul »

убираем вот это
-A POSTROUTING -p tcp -m tcp -m multiport -s 192.168.199.101 -o eth0 -j SNAT --to-source ххх.ххх.ххх.ххх --dports 80,8080,21

-A PREROUTING -p tcp -m tcp -d ххх.ххх.ххх.ххх --dport 49152:65534 -j DNAT --to-destination 192.168.199.101:49152-65534
меняем на

Код: Выделить всё

-A POSTROUTING -p tcp -m multiport --dports 80,8080,21 -s 192.168.199.101 -o eth0 -j MASQUERADE
Losing is fun!
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Re: [решено] Проброс портов на iptables

Сообщение technotrance »

А обязательно маскарад? Ведь у меня статический адрес.
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora
Контактная информация:

Re: [решено] Проброс портов на iptables

Сообщение arkhnchul »

так гораздо проще с тем же результатом, если надо просто пустить машинку в сеть. SNAT имхо стоит применять только при каких-нибудь нестандартных извращениях, или если ресурсов совсем куку.
Losing is fun!
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Re: [решено] Проброс портов на iptables

Сообщение technotrance »

Не помогло с маскарадом. Я думаю, тут дело вовсе не в SNAT и не в MASQUERADE.
Да и сами правила с DNAT правильные. Может какой модуль ещё надо включить?
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Re: [решено] Проброс портов на iptables

Сообщение technotrance »

разобрался.
Ему не хватало правила, пропускающего пакеты с состоянием NEW. Добавил правила:

Код: Выделить всё

-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 21 --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state NEW,ESTABLISHED,RELATED -j ACCEPT

И всё заработало.
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: [решено] Проброс портов на iptables

Сообщение bormant »

... до тех пор, пока не потребуется пассивный режим для доступа к этому ftp.
Если потребуется, нужно будет разрешить вход с порта 20 (ftp-data) по образу и подобию 21 (ftp).
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [решено] Проброс портов на iptables

Сообщение Bizdelnick »

bormant писал(а):
14.11.2011 09:44
... до тех пор, пока не потребуется пассивный режим для доступа к этому ftp.
Если потребуется, нужно будет разрешить вход с порта 20 (ftp-data) по образу и подобию 21 (ftp).

Это ещё зачем?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
flank'er
Сообщения: 496
Статус: слаковщик
ОС: Slackware64

Re: [решено] Проброс портов на iptables

Сообщение flank'er »

http://tudimon.com/2009/04/16/razreshenie-...i-iptables.html
Пассивный FTP действует противоположным образом. Клиент посылает запрос серверу на получение данных, а сервер возвращает клиенту IP адрес и номер порта для подключения. Клиент подключает свой 20-й порт (FTP-data) к указанному порту сервера и получает запрошенные данные.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [решено] Проброс портов на iptables

Сообщение Bizdelnick »

Код: Выделить всё

-A PREROUTING -p tcp -m tcp -d ххх.ххх.ххх.ххх --dport 49152:65534 -j DNAT --to-destination 192.168.199.101:49152-65534
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state NEW,ESTABLISHED,RELATED -j ACCEPT
Этого более чем достаточно для пассивного режима.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: [решено] Проброс портов на iptables

Сообщение bormant »

1)
IPTABLES_MODULES="nf_conntrack_ftp ip_nat_ftp"
Если правильно путаю, то по 2.6.19 модули звались ip_*, далее nf_*. Поэтому либо так, либо иначе, проверить несложно:
/sbin/modprobe -l | grep _ftp$

2)
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state NEW,ESTABLISHED,RELATED -j ACCEPT
Более чем достаточно. Более -- потому как не только запрошенные ftp сервером соединения пропускает (для чего и были пляски с модулями), но и незапрошенные тоже. Если не пользоваться nf_conntrack_ftp, то другого выхода не будет. Но была попытка пользоваться, тогда можно быть чуть безопаснее, убрав NEW.
От --sport 20 толку немного, согласен, от целенаправленной атаки это не сильно поможет, ибо атакующий волен задать исходящий порт любым, в т.ч. и 20.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [решено] Проброс портов на iptables

Сообщение Bizdelnick »

bormant писал(а):
14.11.2011 16:58
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state NEW,ESTABLISHED,RELATED -j ACCEPT
Более чем достаточно. Более -- потому как не только запрошенные ftp сервером соединения пропускает

Согласен.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Re: [решено] Проброс портов на iptables

Сообщение technotrance »

bormant писал(а):
14.11.2011 16:58
2)
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state NEW,ESTABLISHED,RELATED -j ACCEPT
Более чем достаточно. Более -- потому как не только запрошенные ftp сервером соединения пропускает (для чего и были пляски с модулями), но и незапрошенные тоже. Если не пользоваться nf_conntrack_ftp, то другого выхода не будет. Но была попытка пользоваться, тогда можно быть чуть безопаснее, убрав NEW.

Это, кстати да! Спасибо, что подсказали. Сам не подумал об этом. Щас поправлю.
Спасибо сказали:
Аватара пользователя
demsl
Сообщения: 207
Статус: sl

Re: [решено] Проброс портов на iptables

Сообщение demsl »

делал проброс порта так:

# iptables -t nat -A PREROUTING -p tcp -d IP.OUT.IP.OUT --dport 4444 -j DNAT --to-destination 192.168.0.55:80
# iptables -A FORWARD -i eth0 -d 192.168.0.55 -p tcp --dport 80 -j ACCEPT

в итоге в сохранённых правилах iptables получилось 4 строчки:

-A PREROUTING -i eth0 -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.0.55:80
-A PREROUTING -d IP.OUT.IP.OUT/32 -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.0.55:80

-A FORWARD -d 192.168.0.55/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -d 192.168.0.55/32 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT


всё работает, только вопрос: это так и должно быть 4 строчки в результате?
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [решено] Проброс портов на iptables

Сообщение DaemonTux »

demsl писал(а):
15.05.2013 14:32
делал проброс порта так:

# iptables -t nat -A PREROUTING -p tcp -d IP.OUT.IP.OUT --dport 4444 -j DNAT --to-destination 192.168.0.55:80
# iptables -A FORWARD -i eth0 -d 192.168.0.55 -p tcp --dport 80 -j ACCEPT

в итоге в сохранённых правилах iptables получилось 4 строчки:

-A PREROUTING -i eth0 -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.0.55:80
-A PREROUTING -d IP.OUT.IP.OUT/32 -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.0.55:80

-A FORWARD -d 192.168.0.55/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -d 192.168.0.55/32 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT


всё работает, только вопрос: это так и должно быть 4 строчки в результате?

Весь вывод iptables-save покажите. У вас до этого там правил не каких небыло?
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
demsl
Сообщения: 207
Статус: sl

Re: [решено] Проброс портов на iptables

Сообщение demsl »

Код:

*nat :PREROUTING ACCEPT [111:10242] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [30:1818] -A PREROUTING -i eth0 -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.0.55:80 -A PREROUTING -d IP.OUT.IP.OUT/32 -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.0.55:80 -A POSTROUTING -j MASQUERADE COMMIT *filter :INPUT ACCEPT [47:4786] :FORWARD ACCEPT [129:8736] :OUTPUT ACCEPT [248:29207] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo0 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP -A INPUT -i eth0 -p tcp -m tcp -j DROP -A FORWARD -s 192.168.0.0/24 -i eth0 -o eth1 -m conntrack --ctstate NEW -j ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 192.168.0.55/32 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -d 192.168.0.55/32 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT *mangle :PREROUTING ACCEPT [3862:2076016] :INPUT ACCEPT [334:28739] :FORWARD ACCEPT [3498:2040674] :OUTPUT ACCEPT [297:32179] :POSTROUTING ACCEPT [3795:2072853] -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-t o-pmtu -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-t o-pmtu -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-t o-pmtu -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-t o-pmtu -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-t o-pmtu -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-t o-pmtu COMMIT
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [решено] Проброс портов на iptables

Сообщение DaemonTux »

Да у вас батенька бардак ipables.
1. зачем у вас в мангл куча однотипных правил?
2. в filter политика forward и output стоит и так accept
3. если вы хотели ограничить OUTPUT то почему у вас там только правило для lo.

Перечитайтайте iptables tutorial и снесите все правила и настройте наконец iptables нормально.
Советую избрать вкачестве политик в fillter DROP. Первыми пунктами разрешить уже установленные соединения. А потом разрешить конкретные порты и интерфейсы.
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
demsl
Сообщения: 207
Статус: sl

Re: [решено] Проброс портов на iptables

Сообщение demsl »

DaemonTux писал(а):
17.05.2013 03:04
зачем у вас в мангл куча однотипных правил?

я их не прописывал, это pppoe видимо создаёт. советуете удалить дубли?

настройка правил меня пока устраивает, мне просто было интересно, почему 2 введённых правила отображаются 4мя строчками в сэйве)


upd
кстати, обманул. не всё гладко работает: соединение проходит на 80й порт машины в локалке, а авторизация на странице не срабатывает. при этом, если заходить из локалки - проблем с авторизацией нет
я так понимаю, нужны ещё правила POSTROUTING и OUTPUT для нормальной работы? подскажите плз, кто разбирается
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [решено] Проброс портов на iptables

Сообщение DaemonTux »

demsl писал(а):
17.05.2013 09:43
я их не прописывал, это pppoe видимо создаёт. советуете удалить дубли?

настройка правил меня пока устраивает

А вы однако оригинал. Зачем держать дверь закрытой если стен все равно нет?

Ксати что за дистр используете?

demsl писал(а):
17.05.2013 09:43
кстати, обманул. не всё гладко работает: соединение проходит на 80й порт машины в локалке, а авторизация на странице не срабатывает. при этом, если заходить из локалки - проблем с авторизацией нет
я так понимаю, нужны ещё правила POSTROUTING и OUTPUT для нормальной работы? подскажите плз, кто разбирается


Попробуйте осилить документацию чтобы разбираться для чего нужны различные цыпочки. У мну есть подозрение что вы используете не для того.
У вас машина для чего используется шлюз, сервер или десктоп? И разберитесь в том кто или что добавляет правила. Для начала просто удалите все правила и запустите pppoe, добавилось ли что нибудь.

Если хотите советов в настройке схему сети в студию. И кстати через что вы поднимете pppoe?


Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
demsl
Сообщения: 207
Статус: sl

Re: [решено] Проброс портов на iptables

Сообщение demsl »

DaemonTux писал(а):
17.05.2013 16:23
Ксати что за дистр используете?

убунту сервер

DaemonTux писал(а):
17.05.2013 16:23
для чего нужны различные цыпочки

какие цыпочки, я женатый человек!)))))

DaemonTux писал(а):
17.05.2013 16:23
Если хотите советов в настройке схему сети в студию. И кстати через что вы поднимете pppoe?

витуха провайдера -- шлюз -- локалка
pppoeconf

и всё-таки, для меня пока важнее нормальная связь с этой машиной в локалке, видимо, её ответные пакеты как-то криво ходят.
если кто разбирается - подскажите плиз, "двери и стены" - потом)
Спасибо сказали:
Ответить