How to forward ports through a Linux gateway with iptables.
English version of this page under construction. You can read automatic translation.
Часто в системном администрировании может потребоваться осуществление переадресации портов (port forwarding) через linux-шлюз. Прежде всего, такая необходимость появляется, когда вы хотите сделать доступными ресурсы локальной сети в сеть внешнюю. В этой статье будет дан пример на базе ОС Ubuntu, хотя аналогичным образом перенаправление можно будет осуществить в любой другой linux-системе, с помощью функционала iptables.
Для начала стоит ввести команду
ifconfig
и определить для себя две вещи: интерфейс связывающий шлюз со внешней сетью (допустим eth0) и внешний ip-адрес шлюза на этом интерфейсе (допустим 123.123.123.123).
Далее, предположим, вам надо пробросить ssh-порт одной из машин локальной сети.
Для этого под root-пользователем введите следующие команды:
iptables -t nat -A POSTROUTING -s 192.168.0.100 -o eth0 -j MASQUERADE
(где 192.168.0.100 – ip-адрес локальной машины, эта команда делает доступной этот хост для построутинга)
iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 20022 -j DNAT --to-destination 192.168.0.100:22
iptables -t filter -A FORWARD -i eth0 -d 192.168.0.100 -p tcp --dport 20022 -j ACCEPT
(где 20022 – порт, на который будет переадресация с 192.168.0.100:22)
Вам, соответственно, надо будет поменять адреса, порты и имя интерфейса в этих двух командах.
Аналогичным образом можно настроить любое количество перенаправляемых портов, в случае, если вы сделали все верно, то можно внести эти настройки в автозагрузку в системе Ubuntu двумя способами:
– как описано в конце этой статьи, сохранив всю нынешнюю конфигурацию iptables и добавив ее в поднятие сетевого интерфейса;
– или как описано в этой статье, написав отдельный скрипт с этими командами и добавив его в init.d.
Нифига не работает !!!
Допишите пожалуйста,
– как отредактировать правило? Например была допущена ошибка при вводе. И что бы не размножать правила, нужно найти нужное, отредактировать.
– как Сохранить?
– как удалить правило?
– как временно отключить или заблокировать, если это возможно?
– как экспортировать все правила в файл, для последующего переноса на новый шлюз с последующим импортированием?
– в каком файле хранятся, созданные, правила?
Спасибо.
Вот для этих пунктов подойдёт:
iptables-save > /etc/iptables.up.rules
отредактировать файл
/etc/iptables.up.rules
iptables-restore < /etc/iptables.up.rules
iptables -L -n --line-numbers
iptables -D INPUT num
илиiptables -D FORWARD num
илиiptables -D OUTPUT num
(где num - порядковый номер правила, отображаемый первой командой)
Такого отдельного файла в Ubuntu нет, правила хранятся в таблицах ядра. Посмотреть можно здесь:
/proc/net/ip_tables*