Посмотрим, как работает на практике система 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-цепочки, мы еще не видели стратегий для брандмауэра, которые реально работают. Теперь поговорим о них.
Существуют два основных типа сценариев для брандмауэров: один для защиты отдельных компьютеров (здесь можно указывать правила в цепочке INPUT каждого компьютера), а второй — для защиты компьютеров в составе сети (здесь правила указываются в цепочке FORWARD маршрутизатора). В обоих случаях вы не можете достичь серьезной защиты, если вы применяете по умолчанию политику ACCEPT, а затем постоянно добавляете правила, которые отбрасывают пакеты от источников, начинающих рассылать нежелательный контент. Вы должны разрешать только те пакеты, которым доверяете, и отвергать все остальные.