Второе рождение iptables Докучаев Дмитрий aka Forb Xakep, номер #069, стр. 069-072-3 Задача с web-сервером довольно проста. Но модуль time может пригодиться тебе и при решении более сложных проблем. Например, для организации льготных расценок для диалапщиков, временного ограничения к своему FTP-серверу и т.п. 2. libipt_random.so Представь, что ты работаешь каким-нибудь сисадмином. Начальство, как обычно, жмется на апгрейд серверов, а мозгов в твой сервант хотелось бы добавить. Парадоксально, но модуль random поможет тебе вытрясти бабла с начальника. Только подумай: приходишь ты к шефу и просишь денег на оперативку. Естественно, что жмот-начальник посылает тебя куда подальше, мотивируя тем, что сервер пока справляется с нагрузкой. Вот тут-то ты его и поправишь :). Говори: «Да я даже локально не могу до httpd достучаться!» - и на его глазах соединяйся с сервером, который будет изрядно притормаживать при каждом третьем подключении. Это дело заставит начальника задуматься и выделить пару сотен зеленых президентов для покупки кучи оперативной памяти. На самом деле сервер ничем не нагружен. Просто в силу вступает правило с определенной вероятностью (в нашем случае 33%). То есть модуль random позволяет активировать событие случайным образом. На мой взгляд, это очень полезная фича, которую можно заюзать при самых разных обстоятельствах. Кстати, перед тем, как идти к шефу на ковер, не забудь выполнить следующую команду: # iptables -A INPUT -p tcp --dport 80 -m random --average 33 -j REJECT 3. libipt_mport.so и libipt_iprange.so Обычно файрвол настраивается по довольно примитивной схеме. Оговаривается список портов, с которыми разрешено соединение, а затем меняется политика брандмауэра. Из-за того, что iptables не умеет обрабатывать все порты в одном правиле, лист рулесов был очень большим. Теперь, при наличии модуля mport, все становится проще. Можно с помощью всего одной команды указать все необходимые порты: # iptables -A INPUT -p tcp -m mport --dports 21,22,25,110,4000:5000 -j ACCEPT Удобно? Несомненно! Бьюсь об заклад, что многие админы порадуются этому прекрасному модулю. Аналогично действует патч iprange, который позволяет указывать диапазон ip-адресов для разрешения/запрета подключений: # iptables –A INPUT –p tcp –m iprange -–src-range 192.168.0.1-192.168.0.254 –j ACCEPT. 4. libipt_TARPIT.so Иногда приходится создавать пустые сокеты. Это так называемое соединение в пустоту. К примеру, на твой сервер постоянно цепляется какой-нибудь хакер из забугорья либо постороннее приложение. Всего одним правилом, без помощи посторонних программ ты можешь создать блокирующий пустой сокет. Фича и удобство метода заключается в том, что порт будет светиться в момент коннекта на него. Все это работает благодаря модулю TARPIT и контейнеру в iptables. # iptables –A INPUT –p tcp –-dport 31337 –j TARPIT 5. libipt_connlimit.so Случается, что любимый софт не умеет поддерживать какую-либо возможность, без которой приходится выбирать другую программу. Например, твой любимый демон не умеет ограничивать максимальное число подключений. С помощью модуля connlimit можно запросто оговорить максимальное число запросов к какому-либо порту. Меня как админа это безумно порадовало, можно сказать, я ставил POM только ради этого модуля. Допустим, ты хочешь разрешить только три подключения к 53 порту. Вот как выглядит рулес для файрвола: |