Посмотрим, как работает на практике система IP-таблиц. Начнем с просмотра текущей конфигурации, использовав команду:
# iptables -L
Вывод обычно представляет собой пустой набор цепочек:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
У каждой цепочки брандмауэра есть
# iptables -P FORWARD DROP
внимание
Не торопитесь с изменением политик на своем компьютере, пока не дочитаете данный раздел до конца.
Допустим, кто-либо с IP-адресом 192.168.34.63 надоедает вам. Чтобы избавиться от его запросов к вашему компьютеру, запустите следующую команду:
# iptables -A INPUT -s 192.168.34.63 -j DROP
Здесь параметр -A INPUT присоединяет правило к цепочке INPUT. Фрагмент –s 192.168.34.63 указывает IP-адрес источника в этом правиле, а часть -j DROP говорит ядру о том, чтобы оно отбрасывало любые пакеты, удовлетворяющие этому правилу. Следовательно, ваш компьютер будет отвергать любые пакеты, приходящие с адреса 192.168.34.63.
Чтобы увидеть это правило на своем месте, запустите команду iptables -L:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all — 192.168.34.63 anywhere
Но вот беда: ваш приятель с адресом 192.168.34.63 сообщил всем в своей подсети, чтобы к вашему компьютеру подключались через порт SMTP (TCP-порт 25). Чтобы избавиться также и от этого трафика, запустите такую команду:
# iptables -A INPUT -s 192.168.34.0/24 -p tcp —destination-port 25 -j DROP
В этом примере добавлен спецификатор маски сети для адреса источника, а также флаг –p tcp, чтобы учитывать только пакеты TCP. Следующее ограничение, —destination-port 25, говорит о том, что данное правило должно применяться только к трафику порта 25. IP-таблица для цепочки INPUT теперь выглядит так:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all — 192.168.34.63 anywhere
DROP tcp — 192.168.34.0/24 anywhere tcp dpt:smtp
Все идет замечательно, пока кто-то из ваших знакомых с адресом 192.168.34.37 не говорит вам, что он не может отправить вам почту, поскольку вы заблокировали его компьютер. Думая о том, что это легко исправить, вы запускаете следующую команду:
# iptables -A INPUT -s 192.168.34.37 -j ACCEPT
Однако это не срабатывает. Чтобы понять почему, взгляните на новую цепочку:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all — 192.168.34.63 anywhere
DROP tcp — 192.168.34.0/24 anywhere tcp dpt:smtp
ACCEPT all — 192.168.34.37 anywhere
Ядро считывает цепочки сверху вниз, применяя первое правило, которое подходит.
Первое правило не подходит для адреса 192.168.34.37, а второе подходит, так как оно применяется ко всем хостам в диапазоне адресов от 192.168.34.1 до 192.168.34.254 и говорит о том, что пакеты должны отвергаться. Когда правило подходит, ядро приступает к действиям и уже не смотрит остальные цепочки. Вы, наверное, заметили, что с адреса 192.168.34.37 можно отправлять пакеты на любой порт вашего компьютера,
Решение заключается в перемещении третьего правила вверх. Сначала удалите третье правило с помощью такой команды:
# iptables -D INPUT 3
Затем
# iptables -I INPUT -s 192.168.34.37 -j ACCEPT
Чтобы вставить правило где-либо внутри цепочки, укажите номер правила после имени цепочки (например, iptables –I INPUT 4 ...).
9.21.3. Стратегии для брандмауэров
Хотя приведенные выше указания объяснили вам, как вставлять правила и как ядро обрабатывает IP-цепочки, мы еще не видели стратегий для брандмауэра, которые реально работают. Теперь поговорим о них.