7.4. Политика FORWARD и правила NAT

Многие организации получают у своего провайдера всего несколько маршрутизируемых в Интернете IP-адресов. По причине этой ограниченности администраторам требуются средства разделения доступа к Интернет-службам при нехватке IP-адресов всем узлам локальной сети. Обычно, чтобы все узлы локальной сети обращались к внутренним и внешним сетевым службам, используются частные IP-адреса. Пограничные маршрутизаторы (в частности, брандмауэры) могут принимать данные, приходящие из Интернета и отправлять пакеты нужному локальному узлу; и в то же время они также могут маршрутизировать запросы узлов локальной сети к удалённой Интернет-службе. Такое перенаправление сетевого трафика иногда может быть опасным, особенно, учитывая возможности современных средств взлома, способных подменять внутренние IP-адреса и представлять компьютер злоумышленника узлом вашей сети. Чтобы предотвратить незаконное использование сетевых ресурсов таким образом, iptables предоставляет политики маршрутизации и пересылки пакетов.

Политика FORWARD позволяет администратору управлять тем, как пакеты маршрутизируются в локальной сети. Например, чтобы разрешить маршрутизацию для всей локальной сети (предположим, что внутренний интерфейс брандмауэра/шлюза — eth1), можно задать такие правила:

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

ЗамечаниеЗамечание
 

По умолчанию, политика IPv4 в ядре Red Hat Enterprise Linux отключает пересылку IP, что не даёт компьютерам с Red Hat Enterprise Linux выполнять функции маршрутизаторов. Чтобы включить пересылку IP, запустите следующую команду:

sysctl -w net.ipv4.ip_forward=1

Если эта команда запускается в командной строке, она не будет действовать после перезагрузки. Чтобы пересылка работала постоянно, отредактируйте файл /etc/sysctl.conf. Найдите и отредактируйте следующую строку, заменив 0 на 1:

net.ipv4.ip_forward = 0

Чтобы изменения в файле sysctl.conf вступили в силу, выполните следующую команду:

sysctl -p /etc/sysctl.conf

Это позволит узлам локальной сети связываться друг с другом, однако они не смогут обращаться к внешним сетям (например, к Интернету). Чтобы узлы локальной сети с частными IP-адресами могли связываться с внешними сетями, настройте на брандмауэре подмену IP, которая замаскирует узлы локальной сети под IP-адресом внешнего интерфейса брандмауэра (в данном случае, eth0):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE