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.