--destination-port 22 -j ALLOW
# iptables -A FORWARD -d 10.34.176.0/24 -p tcp \
--source-port 22 -j ALLOW
Поскольку в данном примере модифицируется только цепочка FORWARD
, пользователям не предоставляется доступ к серверу SSH компьютера, на котором выполняется брандмауэр (если такой сервер имеется на этой машине). Возможно, вы захотите создать правила, которые разрешали бы обращаться к этому серверу с компьютеров локальной сети. Если адрес вашей локальной сети 192.168.9.0/24, то соответствующие команды будут выглядеть так:
# iptables -A INPUT -s 192.168.9.0/24 -р tcp \
--destination-port 22 -j ALLOW
# iptables -A OUTPUT -d 192.168.9.0/24 -p tcp \
--source-port 22 -j ALLOW
Использование информации об интерфейсах при выполнении фильтрации
При создании правил фильтрации можно указывать сетевой интерфейс, например ppp0
или eth1
. Данный подход в основном используется на компьютерах с несколькими интерфейсами, выполняющих функции маршрутизаторов. Применение в составе правила сведений об интерфейсе позволяет противодействовать фальсификации адресов, в частности, включению в заголовки пакетов, приходящих извне, адресов компьютеров локальной сети. Правила, в которых интерфейс задается с помощью опции --in-interfасе
( -i
), как правило, помещаются в цепочки INPUT
и FORWARD
, а правила, создаваемые с использованием опции --out-interface
( -о
), обычно предназначены для включения в цепочки FORWARD
и OUTPUT
. Предположим, что адрес вашей локальной сети 192.168.9.0/24, маршрутизатор, совмещенный с брандмауэром, подключен к ней с помощью интерфейса eth1
, а соединение маршрутизатора с Internet осуществляется посредством интерфейса eth0
. Правила, препятствующие фальсификации адресов, имеют следующий вид:
# iptables -A INPUT -s 192.168.9.0/24 -i eth0 -j DROP
# iptables -A FORWARD -s 192.168.9.0/24 -i eth0 -j DROP
# iptables -A FORWARD -s !192.168.9.0/24 -i eth1 -j DROP
# iptables -A OUTPUT -s !192.168.9.0/24 -i eth1 -j DROP
Первые две команды отвергают поступающие извне (через интерфейс eth0
) пакеты, адресованные маршрутизатору или компьютерам локальной сети, в которых указано, что они отправлены из локальной сети. Последние две команды блокируют пакеты, направленные в Internet (поступающие через интерфейс eth1
), в которых указан IP-адрес источника, не совпадающий с адресами компьютеров локальной сети.
Проверка пакетов с учетом состояния
Одна из самых новых возможностей фильтрации пакетов, реализованных в системе Linux, позволяет учитывать при проверке пакетов состояние соединения. Средства, рассмотренные ранее в этой главе, позволяли обрабатывать отдельные пакеты, независимо от того, являлись ли они частью соединения или были специально сгенерированы для организации атаки. (Ранее уже встречалась опция --syn
, позволяющая определить пакет, содержащий запрос на установление соединения. Существуют средства, которые предоставляют возможность включить свои пакеты в набор пакетов, передаваемых в рамках действующего соединения. Такое включение пакетов называется перехватом TCP- соединения.) Средства проверки пакетов с учетом состояния определяют принадлежность пакетов к текущему соединению, анализируя последовательные номера, IP-адреса, указанные в заголовках, и другие характеристики пакетов. Правила, реализующие такую проверку, позволяют отвергать посторонние пакеты, включенные в состав данных, которые передаются в рамках существующего соединения.
Для включения средств проверки пакетов с учетом состояния используется опция --state
, предваряемая опцией -m состояние
. Для опции --state
можно задать одно или несколько значений. Если вы указываете несколько значений, они должны разделяться запятыми. Символ !
перед опцией --state
изменяет ее действие на обратное. Ниже перечислены допустимые параметры опции --state
.
• INVALID
. Проверка показала, что пакет не принадлежит известному соединению и может оказаться фальсифицированным.
• NEW
. Пакет пытается установить новое соединение.
• ESTABLISHED
. Пакет соответствует существующему соединению.
• RELATED
. Пакет не является частью существующего соединения, но его присутствие допустимо (например, это может быть ICMP-пакет, сообщающий об ошибке).
На заметку
Опция ! --state INVALID
эквивалентна опции --state NEW, ESTABLISHED, RELATED
.
Рассмотрим пример проверки с учетом состояния. Предположим, что, настраивая брандмауэр на отдельном компьютере, вы задали политику по умолчанию DROP
или REJECT
, но хотите разрешить взаимодействие с сервером HTTP через порт 80. Вы можете задать поверку с учетом состояния, в ходе которой будут отвергаться пакеты, не предназначенные для установления соединений, не принадлежащие к существующим соединениям и не относящиеся к пакетам, присутствие которых допустимо. Команды, предназначенные для создания правил, имеют следующий вид:
Читать дальше