iptables пренасочване на портове

Помислете за пренасочване (напред) на два примера:
Нещо повече, ние сме хитри и искаме уеб сървърът ни от Интернет да не се вижда на порт 443, а да е достъпен, да речем, на порт 1293 (така: https://1.2.3.4:1293).
Така че искаме да пренасочим входящия интернет на порт 1293 към порт 443 на сървър в локалната мрежа.
IF_EXT="eth0" # Външен мрежов адаптер IF_INT="eth1" # Вътрешен мрежов адаптер
IP_EXT="1.2.3.4" # Външен IP IP_INT="192.168.1.1" # Вътрешен IP
FAKE_PORT="1293" # Фалшив порт, достъпен от интернет
LOCAL_SRV="192.168.1.28" # Уеб сървър в LAN SRV_PORT="443" # Реален порт
# NAT $IPT -t nat -A PREROUTING -i $IF_EXT -p tcp -d $IP_EXT --dport $FAKE_PORT -j DNAT --към $LOCAL_SRV:$SRV_PORT
# НАПРЕД $IPT -A НАПРЕД -i $IF_EXT -o $IF_INT -d $LOCAL_SRV -p tcp --dport $SRV_PORT -j ПРИЕМАНЕ
ПРЕДВАРИТЕЛНО МАРШРУТИРАНЕ
Всеки пакет, който попада в интерфейса, първо се обработва предварително (предварително маршрутизиране). Нуждаем се от това, преди шлюзът да вземе решение за маршрутизиране (например какво да правим с него?), всички пакети, които идват към външния ($IF_EXT) интерфейс на порт 1293 (например така: https://1.2.3.4:1293) да бъдат променени на целевия IP и порт на сървъра във вътрешната мрежа. Тези. шлюзът ще "коригира" дестинацията на входящия пакет, така че да може да се вземе правилното решение за маршрутизиране.
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 1.2.3.4 --dport 1293 -j DNAT --до 192.168.1.28:443
След това пакетът ще влезе във веригата FORWARD.
/sbin/iptables -A НАПРЕД -i eth0 -o eth1 -d 192.168.1.28 -p tcp --dport 443 -j ПРИЕМАНЕ
Пренасочването не винаги се извършва от / към локалната мрежа. Случва се да е необходимо да се направи препращаневръзки към някакъв сървър, използвайки междинен такъв. Това може да е необходимо за допълнително филтриране на свързани клиенти, за споделяне на натоварването и други задачи.
Необходимо е клиентите, които имат достъп до 1.1.1.1:25 да отиват към 2.2.2.2:25, от 1.1.1.1:443 - към 3.3.3.3:443, а от ip 4.4.4.4 заявките към порт 3535 да отиват към 3.3.3.3:22.
(!) Естествено, хостове 2.2.2.2 и 3.3.3.3 трябва да позволяват трафик към съответните портове!
Ето идеята за правилата на iptables на сървър 1.1.1.1:
Коментари на сценария:
1) INPUT е разрешен само за 22/tcp, за ssh.
3) Не се бъркайте от факта, че OUTPUT е DROP по подразбиране, а по-долу - всички ACCEPT. Свикнал съм винаги първо да слагам DROP на всичко, а след това, ако се наложи, го разрешавам. В този случай няма нужда да филтрирате изходящите пакети от шлюза.
На отдалечения клиентски компютър стартирайте нещо като "telnet 1.1.1.1 25". Пакетът трябва да пристигне в 1.1.1.1:25. Това може да се контролира чрез изпълнение на следната команда в конзолата на сървър 1.1.1.1:
tcpdump -n порт 25
Ако всичко е правилно, тогава отдалеченият клиент ще има комуникационна сесия със SMTP сървъра 2.2.2.2.