Как за каменной стеной! Докучаев Дмитрий aka Forb Xakep, номер #058, стр. 058-066-2 Для начала создадим собственную цепь. Назовем ее, например, ports. Туда мы будем записывать правила, разрешающие соединения на определенные порты твоей машины. # /sbin/iptables -N ports После этой команды появится пользовательская цепь ports. Ее можно просмотреть с помощью уже известного нам параметра -L. Теперь добавим первое правило в нашу новую цепь. Оно будет давать разрешение на соединение с 22 портом с доверенного адреса 192.168.0.1. # /sbin/iptables -A ports -s 192.168.0.1 -p tcp --destination-port 22 -j ACCEPT Коротко о параметрах и их аргументах: -A (append). Добавляет правило в конец заданной цепи (в нашем случае в ports). -s (source_addr) - адрес, с которого пришел пакет. В нашем случае это доверенный 192.168.0.1. -p (protocol) - явное указание протокола для текущего правила. Может быть tcp, udp и icmp и all. --destination-port - актуален только для протокола tcp, поэтому пишется всегда после него. Хранит в себе порт назначения. -j - политика правила. Как я уже говорил, может быть ACCEPT, DROP, REJECT, а также линком на другие цепи. Дальше попробуй самостоятельно заполнить цепь ports. Если не сможешь вспомнить про все порты, соединения по которым необходимо разрешить, то не волнуйся, это можно сделать потом. Теперь займемся главной цепочкой INPUT. Первым делом разрешим принимать пакеты по локальному петлевому интерфейсу. Интерфейс можно задать параметром -i (входящий) и -o (исходящий). Наше правило будет выглядеть следующим образом: # /sbin/iptables -A INPUT -i lo -j ACCEPT Ужесточим политику А теперь следует сделать то, к чему мы так стремились. Нам необходимо запретить все соединения кроме тех, которые были указаны в цепочке ports. Но перед этим следует выполнить, по крайней мере, две команды. Во-первых, надо соединить две цепочки: пользовательскую ports и главную INPUT. Делается это следующим образом: # /sbin/iptables -A INPUT -j ports Как видишь, аргумент -j является именем пользовательской цепи (линковать базовые цепочки лучше не надо). Теперь, казалось бы, все должно работать и подчиняться правилам. Но стоит тебе поменять политику, как твоя аська уйдет в офлайн, а любимый konqueror не сможет зайти ни на один сайт. Все потому, что мы забыли оговорить состояния пакетов. Каждый пакет может иметь несколько состояний. Вот основные виды: NEW - данные, начинающие новое соединение. ESTABLISHED - пакет, приходящий от уже установленного соединения. RELATED - новый пакет данных, но порожденный старым установленным соединением (например, FTP-передача данных, icmp-ответ и т.д.). INVALID - состояние, которое не попадает ни под один из вышеперечисленных видов. Чтобы пакеты корректно пропускались ядром, необходимо разрешить состояния RELATED и ESTABLISHED. Это выполняется командой: # /sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT Значение параметра -m указывает на внешний модуль, который будет использоваться фаерволом. В нашем случае это iptables_state.so. После того, как модуль активизируется, мы указываем его опцию -state со значением состояний пакетов. |