Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #47, ОКТЯБРЬ 2004 г.

Выжми все из фаервола!

Докучаев Дмитрий aka Forb

Спецвыпуск: Хакер, номер #047, стр. 047-074-3


iptables –A OUTPUT –p tcp –m state –-state ! RELATED,ESTABLISHED –m owner –-uid-owner 31337 –j DROP.

Этот рулес позволит фильтровать все пакеты, посланные юзером 31337. Помимо uid ты можешь ограничивать и gid, а также мутить доступ к произвольной сетевой команде. Если ты заинтересовался этим модулем, можешь ознакомиться со всеми его параметрами, набрав команду iptables -–help –m owner.

Модификация пакетов

Настало время поговорить о второй таблице iptables, которая называется nat. Эта чудесная таблица содержит три цепочки: PREROUTING, OUTPUT и POSTROUTING. Правила, расположенные в этих цепях, нужны для корректировки пакета. Например, ты хочешь, чтобы машина с IP-адресом 192.168.0.2 выходила в интернет напрямую. Для этого достаточно воспользоваться маскарадингом, добавив всего одно правило в таблицу POSTROUTING.

iptables –t nat –A POSTROUTING –s 192.68.0.2 –j MASQUERADE

Суть маскарадинга заключается в замене локального IP на адрес шлюза. Получается, что конечный узел фактически соединится не с локальной машиной, а с маршрутизатором. Последний будет форвардить все пришедшие пакеты узлу с адресом 192.168.0.2.

Вообще, использовать NAT в крупной сети не рекомендуется. Если какой-нибудь юзер стянет пару гигов с порносайта, администратор не определит виновника. Поэтому вместо NAT используется прокси-сервер. При переходе на прокси возникает одна проблема: админа ломает бегать по всем машинам и прописывать адрес проксика в настройки браузера. К счастью, не все так плохо: можно просто оформить редирект портов, а затем немного настроить конфиг squid. В этом случае клиент соединится с прокси-сервером, сам того не желая :). Для выполнения редиректа вписывай легкое правило в цепь PREROUTING.

iptables –t nat –A PREROUTING –s 192.168.0.0/24 –p tcp –-dport 80 –j REDIRECT –to-port 3138

Рассмотрим ситуацию сложнее. В твоей локалке есть сервер, не имеющий внешнего адреса. А управлять им хочется из дома. С помощью iptables ты легко можешь намутить модификацию не только портов, но и IP-адресов. В результате небольшой подмены шлюз соединит твой домашний комп с локальным сервером. Вот правило, которое прописано на моем фаерволе. Оно связывает мой компьютер и терминальный сервер в локальной сети.

iptables –t nat –A PREROUTING –s 194.225.226.3 –p tcp –-dport 3389 –j DNAT –-to-destination 10.50.40.255:3389

Таким образом, если пакет направлен на порт 3389, шлюз заменит в нем адрес назначения на 10.50.40.225 и перенаправит данные на локальный сервер. С помощью этого механизма я без проблем могу рулить терминалкой из дома. Чего и тебе желаю :).

Хочешь большего? Ставь патчи!

Несмотря на столь широкие возможности iptables не превосходит OpenBSD’шный pf по функциональности. Его конкурент умеет различать операционные системы по хитрому fingerprinting’у, защищать сервер от скана портов и т.д. Пришло время нанести ответный удар. Итак, встречаем новый патч для iptables под названием Patch-o-Matic. Набор POM создан для админов, которым мало стандартных возможностей фаервола. Он включает в себя набор модулей, позволяющих творить невероятные вещи. Правда, чтобы пропатчить брандмауэр, придется пройти через семь кругов ада. Сперва убедись, что твое ядро собрано из исходников. Сорцы ядра понадобятся инсталлятору POM, ведь все таблицы и цепочки создаются именно в кернеле. Если твоя система построена на RPM-пакетах, тебе придется перекомпилить ядрышко, предварительно стянув его с ftp.kernel.com (либо с диска). Не забудь включить в ядро поддержку ipfiltering и прочих сетевых вещей. После того как отмучаешься с кернелом, скачивай свежий iptables (http://netfilter.org/files/iptables-1.2.11.tar.bz2), а также прилагающийся к нему патч (http://netfilter.org/files/patch-o-matic-ng-20040621.tar.bz2). Теперь распаковывай фаервол и компилируй его. Когда ты сделаешь все эти шаги, наступит время для установки патча.

Назад на стр. 047-074-2  Содержание  Вперед на стр. 047-074-4