Итак, в первой части я объяснял основополагающие принципы и действия. Во второй части статьи я постараюсь вкратце охватить вопросы работы с цепочками, оставшиеся таблицы и некоторые полезные вариации использования модулей.
Что такое цепочки и зачем они нужны?
Цепочка – это набор правил, который действителен для выбранного по какому-то принципу трафика, и он обрабатывается только этим набором правил для одной таблицы фаервола, и после обработки он не передается в другие правила. Фактически, мы уже работали с цепочками, просто об этом не знали. PREROUTING,INPUT,FORWARD, OUTPUT, POSTROUTING и т.д. – это все цепочки.
Для чего это необходимо? Самое главное – для экономии вычислительных ресурсов, если у вас громадное количество общих правил, вторично – для создания удобочитаемой и интуитивно понятной конфигурации.
Добавляются они с помощью команды iptables -n ИМЯ_ЦЕПОЧКИ, ограничения для имени – никаких специальных символов, и не использовать служебные имена. Для построения в конфиге – в начале нужно таблицы просто вписать:
:ИМЯ_ЦЕПОЧКИ – [0:0]
нули – это счетчики, они могут иметь любое числовое значение.
Дальше мы должны определить по каким параметрам трафик должне попадать в нужную цепочку.
-A тип_действия условия -j ИМЯ_ЦЕПОЧКИ.
далее работа с цепочкой:
-A ИМЯ_ЦЕПОЧКИ -j ДЕЙСТВИЕ
Имя цепочки не обязательно должно быть с заглавными буквами.
Пример цепочки:
:WWW – [0:0]
-A INPUT -p tcp –dport 80 -j WWW
-A WWW -d 10.0.0.1 -j DROP
-A WWW -d 192.168.0.0/24 -j ACCEPT
В такой форме намного удобнее строить и читать правила.
NAT и маскарадинг
Как все-таки сделать шлюз доступа когда на втором интерфейсе сервера другая сетевая адресация, и одна сеть не имеет абсолютно никакого понятия о существовании сети по другую сторону нашего сервера? Для это существует NAT, полный механизм работы я описывать не буду, в этом нет необходимости, в целом же принцип заложен в самом поняти NAT – network address translation – трансляция(преобразование) сетевых адресов.
1 что стоит учесть существует несколько вариантов – NAT и маскарадинг, собственно если не вдаваться в технические дебри – маскарадинг это частный случай НАТа
НАТ позволяет нам оперировать не только с адресом отправителя, но и с адресом получателя, и с соединениями, где нам необходимо изменить порт получателя, также позволяет с одного и того же интерфейса сервера транслировать пакеты в множество разных айпи,т.е. сервер имеет только интерфейс 10.0.5.1, но натить он может в целую подсеть – 10.0.5.1-6 например, точнее каждый диапазон адресов внутренних в свой внешний. Естественно компьютеры внешней сети должны знать, что эти адреса видеть можно через наш компьютер.
Какой же недостаток этого решения? Адреса задаются статически – т.е. мы их должны заранее знать.
Маскарадинг – позволяет все все запросы с одной сети преобразовывать в запросы другой сети и подменять адрес отправителя на адрес интерфейса нашего сервера, причем нам абсолютно нет никакой необходимости знать какой же там адрес мы имеем. Преимущество? Безусловно, но мы можем только подменять адрес отправителя на адрес нашего сервера.
Все эти действия происходят в таблицы *nat.
Итак, собственно пример для SNAT (source NAT).
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT –to-source 10.0.5.1
Вот и все действие, т.е. все что пришло с сети 192.168.0.0.24 и должно уйти через ppp-cоединение дальше мы транслируем в адрес 10.0.5.1. Таким же образом мы можем “натить” и в диапазон адресов
Это хорошо, а если у нас айпи динамический и неизвестен заранее точно? Вот тут нам пригодится маскарадинг.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
или же
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQ
В отличие от действия SNAT нас абсолютно не интересует внешняя адресация.
Но, так мы только отправим все запросы через шлюз, а если нам нужно один запрос по какому-либо критерию отправить на другой айпи? В этих случаях нам на помощь придет dnat (destination NAT).
-A PREROUTING -s 192.168.0.1 -d 10.0.5.15 -p tcp –dport 1143 -j DNAT –to-destination 10.0.5.5
Таким образом мы отправим все запросы по порту 1143 на айпи 10.0.5.15 с адреса 192.168.0.1 на адрес 10.0.5.5. Порт при этом не изменится. Для манипуляции с портами используйте двоеточие:
-A PREROUTING -s 192.168.0.1 -d 10.0.5.15 -p tcp –dport 1143 -j DNAT –to-destination 10.0.5.5:2143
т.е. тоже самое действие, но в конце запрос уйдет на другой порт, если вам не надо менять айпи получателя, а только порт – можно оставить без адреса, т.е. использовать в конце правила конструкцию -j DNAT –to-destination :2143
Обратите внимание SNAT оперирует с адресом отправителя(т.е. то, что “улетает” от нас) и всегда находится в POSTROUTING, DNAT оперирует с адресом получателя(т.е. что должно либо пройти через нас) и всегда находится в PREROUTING. prerouting обрабатывается до всех остальных действий.
Часть 1 данного бреда
Продолжение следует…
Повідомити про помилку
Текст, який буде надіслано нашим редакторам: