и действие хитрого правила сразу вступит в силу. Теперь тебе не надо расписывать два десятка рулесов для каждого сервера. То же самое можно сказать и про IP-адреса. Разрешить соединения целому диапазону айпишников можно также одним правилом:
iptables –A INPUT –p tcp –m iprange –src-range 192.168.0.1-192.168.0.100 –j ACCEPT.
Иногда нужно имитировать соединение. Для этого админом пишется специальная программа, прослушивающая определенный порт. Теперь можно добиться результата с помощью модуля tarpit.so. Он нужен для открытия пустого порта. Причем порт будет светиться в выводе netstat’а после фактического соединения. Эта библиотека может быть полезна, если админ решается написать фаервольную утилиту против скана определенных портов, с последующим занесением в лог всех попыток соединения. Не буду тебя мучить, просто напишу правило.
iptables –A INPUT –p tcp –dport 31337 –j TARPIT
Теперь iptables умеет искать подстроку в пакете. В этом ему помогает модуль string.so. Например, ты захочешь намутить защиту от пересылки shell-кодов на твою машину либо просто не желаешь, чтобы юзер заливал бинарник на сервер. Если раньше приходилось патчить кернел и ставить дополнительный модуль, то сейчас достаточно вбить всего одно правило:
iptables -A INPUT -p tcp -dport 21 -m string -string '|7F|ELF' -j DROP
Раз уж мы заговорили об ограничениях, расскажу, как предостеречь свою машину от DoS-атаки. Нужно воспользоваться модулем limit.so, позволяющим ограничивать пропускную способность. Если ты видишь, что твой FTPD зажирает процессор и захлебывается в данных, сделай ограничение в 5 пакетов за одну секунду.
iptables –A INPUT –p tcp –dport 21 –m limit –limit 5/sec –j REJECT
Вероятно, у тебя уже кружится голова от наворотов POM. Но самое вкусное я оставил напоследок :). Теперь ты способен контролировать одновременное число подключений не только с одного IP-адреса, а даже с целой подсети! Это возможно, даже если сам сервис не поддерживает такую функцию. Модуль connlimit.so создан специально для подобной работы. Библиотека способна ограничить подключения к определенному сервису, например, к демону sshd. Просто добавь рулес в цепь INPUT:
iptables –A INPUT –p tcp -syn -dport 22 -m connlimit -connlimit-above 3 -j REJECT.
Думаю, этого материала тебе хватит не только для освоения азов iptables, но и для грамотной защиты своего сервера. Благо брандмауэр это позволяет :). Синтаксис iptables прост как три копейки, думаю, ты все понял уже после первого правила. Теперь все зависит только от тебя, я же могу пожелать немного терпения и изобретательности. Остальное прибавится после установки Patch-o-Matic :).
Вот несколько команд, которые ты можешь использовать при работе с iptables.
Листинг
iptables –N цепь – создание новой цепочки
iptables –F цепь – очистка произвольной цепи
iptables –X цепь – удаление цепи
iptables –D цепь номер_правила – удалить правило из определенной цепи
iptables –P цепь политика – изменение политики цепи
iptables –line-numbers –nvL цепь – просмотр всех правил в определенной цепи в verbose-режиме, без преобразования адресов с нумерацией каждого правила (быстрый и подробный просмотр)
service iptables save/restore – сохранение (восстановление) всех правил в отдельный конфиг
service iptables start/stop – запуск (останов) фаервола
Андрей «Andrushock» Матвеев, редактор рубрики «UNIXoid» журнала «Хакер»: