Пренасочване на портове и пренасочване на портове в iptables - Бележки за маниаци - Роман Богачев
Пренасочване на трафик зад NAT или пренасочване на трафик към друг сървър
Най-често пренасочването на трафик се използва, ако сме в локална мрежа и сме отделени от външния свят с шлюз. За да отворим достъп за локални услуги (ssh, web, ftp), трябва да препратим портове. Тъй като ще използваме сървър на Linux като шлюз, ще извършим тези действия с помощта на iptables.
Нека дефинираме променливите, които ще се използват в статията:
Пренасочване на портове
На шлюза пристига пакет, който трябва да пренасочим към желания сървър в локалната мрежа, преди да вземем решение за маршрутизиране, тоест във веригата PREROUTING на таблицата nat.
Помислете за пример
Следващата стъпка е да вземете решение за маршрутизиране. В резултат на това пакетът ще премине по веригатаНАПРЕД на таблицатаfilter, така че трябва да добавите разрешително правило към него. Може да изглежда така например:
Помислете за пример
Прекарайте пакета, който е дошъл до външния интерфейс, напуска вътрешния интерфейс и е предназначен за уеб сървъра (192.168.1.50:80) на локалната мрежа.
От една страна, тези две правила са достатъчни за всички клиенти извън локалната мрежа да се свържат успешно с вътрешния сървър. От друга страна, какво ще се случи, ако клиент се опита да се свърже от локалната мрежа? Връзката просто няма да се осъществи: страните няма да се разберат.
Има два начина да избегнете тази ситуация.
Първият е да разграничите обажданията към сървъра отвътре и отвън, за да направите това, създайте A-запис на локалния DNS сървър, например example.com, сочещ към 192.168.1.50
Помислете за пример
Трябва допълнително да се отбележи, че това правило е важно само за вътрешни клиенти. Отговорвъншните клиенти ще преминат през шлюза във всеки случай.
Но засега това не е достатъчно за нормална работа. Да приемем, че самият шлюз действа като клиент. В съответствие с предишните ни правила, той ще управлява трафик от себе си към себе си и ще представя изходящите пакети като транзитни.
Помислете за пример
Сега, за удобство, ще запишем скрипта, за да не предписваме правилата ръчно всеки път.
rules.sh
Пренасочване на портове
Пренасочването на портове е необходимо, ако искаме да "маскираме" вътрешната услуга, осигурявайки достъп до нея отвън не на стандартния, а на съвсем различен порт.
Наборът от правила заiptables ще се различава незначително, така че веднага ще дам пример за крайния скрипт за мързеливите.