Протоколирование хода обработки пакетов
Команды и опции iptables
, рассмотренные в данной главе, не предполагали протоколирование действий по преобразованию пакетов. Однако в некоторых случаях необходимо иметь информацию о блокированных попытках доступа к важным портам или о пакетах, отвергнутых в результате проверки с учетом состояния. Такая информация поможет выявить попытки взлома системы, предпринимаемые извне.
Несмотря на то что файлы протоколов представляют собой важный источник информации, протоколирование существенно снижает производительность маршрутизатора и делает систему более уязвимой для атак, предпринимаемых с целью вывода служб из строя. Если злоумышленник знает, что результаты выполнения некоторых операций записываются в файл протокола, он будет передавать большое количество пакетов, получая которые система станет интенсивно выполнять протоколирование своей работы. В результате размеры файлов протоколов будут неограниченно расти, что может привести к переполнению диска. Поэтому при протоколировании надо соблюдать осторожность. Желательно разместить файлы протоколов в отдельном разделе, чтобы остальные программы не пострадали, если процесс протоколирования выйдет из под контроля.
В программе iptables
предусмотрено специальное действие LOG
, управляющее протоколированием. В отличие от других действий, действие LOG
не приводит к прекращению дальнейшей проверки; если пакет соответствует правилу, в котором указано данное действие, ядро продолжает поверку, используя остальные правила текущей цепочки. Действие LOG
позволяет решить следующие задачи.
• С помощью действия LOG
можно протоколировать события, состоящие в появлении пакетов, которые не удовлетворяют другим правилам. Например, вы можете включить правило для записи информации о тех пакетах, которые не прошли проверку с учетом состояния.
Протоколирование фактов появления пакетов, которые вы не собираетесь отвергать, может быть удобным средством отладки, так как файл протокола позволяет убедиться, что эти пакеты поступают на ваш компьютер. Тот же результат можно получить с помощью других инструментов, например, программы сбора пакетов, но в некоторых случаях файлы протоколов удобнее использовать.
• Если вы установили политику по умолчанию DENY
или REJECT
, вы можете включить правило протоколирования в конце цепочки и получать таким образом информацию о пакетах, по умолчанию отвергаемых системой.
• Если в вашей системе установлена политика по умолчанию ACCEPT
, вы можете получать информацию об отвергнутых пакетах, продублировав каждое запрещающее правило аналогичным правилом, в котором действие DENY
или REJECT
заменено на LOG
.
В качестве примера рассмотрим следующие правила брандмауэра, для которого установлена политика по умолчанию ACCEPT
. Эти правила предназначены для блокирования попыток обмена с сетью 172.24.0.0/16; информация об отвергнутых пакетах записывается в файл протокола.
# iptables -A INPUT -s 172.24.0.0/16 -j LOG
# iptables -A OUTPUT -d 172.24.0.0/16 -j LOG
# iptables -A INPUT -s 172.24.0.0/16 -j DROP
# iptables -A OUTPUT -d 172.24.0.0/16 -j DROP
Первые две команды совпадают с двумя последними, за исключением того, что вместо действия DROP
в них указано действие LOG
. Второе и третье правила можно поменять местами, при этом результаты не изменятся. Между правилами, предусматривающими действия LOG
и DROP
, можно включить дополнительные правила, но при этом становится менее очевидно, что данные правила связаны между собой.
В результате протоколирования в файл /var/log/messages
записываются сведения, подобные приведенным ниже.
Nov 18 22:13:21 teela kernel: IN=eth0 OUT=
MAC=00:05:02:a7:76:da:00:50:bf:19:7e:99:08:00 SRC=192.168.1.3
DST=192.168.1.2 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=16023 DF
PROTO=TCP SPT=4780 DPT=22 WINDOW=32120 RES=0x00 ACK URGP=0
В состав записи входят следующие данные.
• Дата и время. Первый компонент записи сообщает время получения пакета.
• Имя системы. В данном примере компьютер имеет имя teela
.
• Входной интерфейс. Поле IN=eth0
указывает на то, что пакет был получен через интерфейс eth0
.
• Выходной интерфейс. Данный пакет является входным, поэтому поле OUT=
отсутствует в составе записи.
• MAC-адрес. В поле MAC=
указываются два MAC-адреса: локальной и удаленной систем.
• IP-адреса источника и назначения. Поля SRC=
и DST=
содержат соответственно IP-адреса источника и назначения.
• Порты источника и назначения. Поля SPT=
и DPT=
содержат соответственно порты источника и назначения.
• Информация о пакете. Остальные поля предоставляют дополнительные сведения о пакете, в частности, его длину (LEN=
), время жизни (TTL=
) и другие данные.
При определении правила LOG
могут быть заданы дополнительные опции, которые позволяют указать, какие сведения должны быть записаны в файл протокола. Наиболее часто применяется опция --log-prefix
. Она позволяет задать строку длиной до 29 символов, которая дает возможность идентифицировать правило, вызвавшее появление этой записи.
Резюме
Программа iptables
часто применяется для создания брандмауэров, настройки средств NAT, организации перенаправления портов и протоколирования хода обработки пакетов. Часто различные способы обработки пакетов используются совместно. Так, например, на одном компьютере могут быть реализованы брандмауэр, NAT-маршрутизатор и протоколирование хода обработки. Каждый вызов iptables
задает отдельное правило, но для решения большинства задач необходимо определить несколько правил. Поэтому последовательность вызовов iptables
организуется в виде сценария.
Глава 26