Шрифт:
# 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 можно отправлять пакеты на любой порт вашего компьютера, кроме 25, так как второе правило применяется только для него.
Решение заключается в перемещении третьего правила вверх. Сначала удалите третье правило с помощью такой команды:
# iptables -D INPUT 3
Затем вставьте это правило в верхней части цепочки с помощью команды iptables -I:
# iptables -I INPUT -s 192.168.34.37 -j ACCEPT
Чтобы вставить правило где-либо внутри цепочки, укажите номер правила после имени цепочки (например, iptables –I INPUT 4 ...).
9.21.3. Стратегии для брандмауэров
Хотя приведенные выше указания объяснили вам, как вставлять правила и как ядро обрабатывает IP-цепочки, мы еще не видели стратегий для брандмауэра, которые реально работают. Теперь поговорим о них.
Существуют два основных типа сценариев для брандмауэров: один для защиты отдельных компьютеров (здесь можно указывать правила в цепочке INPUT каждого компьютера), а второй — для защиты компьютеров в составе сети (здесь правила указываются в цепочке FORWARD маршрутизатора). В обоих случаях вы не можете достичь серьезной защиты, если вы применяете по умолчанию политику ACCEPT, а затем постоянно добавляете правила, которые отбрасывают пакеты от источников, начинающих рассылать нежелательный контент. Вы должны разрешать только те пакеты, которым доверяете, и отвергать все остальные.
Допустим, что у вашего компьютера имеется SSH-сервер, обслуживающий TCP-порт 22. Нет никаких оснований для того, чтобы какой-либо хост инициировал соединение с другими портами вашего компьютера, и вы не должны давать такой возможности никаким хостам. Чтобы это организовать, сначала установите для цепочки INPUT политику DROP:
# iptables -P INPUT DROP
Чтобы включить ICMP-трафик (для команды ping и других утилит), используйте такую строку:
# iptables -A INPUT -p icmp -j ACCEPT