Отчет по лабораторной работе № 4 по дисциплине: «Администрирование информационных систем» на тему: «IP фильтры: архитектура и синтаксис» Выполнил: Батищев Д.С. Проверил: Дунаев Р.А. Лихошерстный А.Ю. Белгород 2012 Данная лабораторная работа посвящена теме ip фильтров в операционных системах семейства GNU/Linux. Прежде всего, надо обусловить, что должен выполнять ip фильтр. Так как в названии есть слово фильтр, то следует думать, что данных комплекс программного обеспечения призван различными способами фильтровать весь траффик, проходящий через подконтрольную систему. В операционных системах GNU/Linux основой фильтрации траффика служит набор правил утилиты iptables. Примечательно, что данная утилита работает на ядерном уровне, т.е. практически отсутствуют прослойки между интерфейсом сетевой карты и iptables, что эффективно сказывается на производительности. В качестве задания для лабораторной работы выступали 4 темы в каждой из которых рассматривается базовый функционал различных модулей iptables. Задание 1. Языки описания фильтров iptables. В данном задании рассматриваются основы создания и описания правил iptables. IPTABLES='/sbin/iptables' $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP $IPTABLES -F $IPTABLES -X $IPTABLES -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES $IPTABLES $IPTABLES $IPTABLES -A -A -A -A INPUT INPUT INPUT INPUT -p -p -p -p ICMP --icmp-type 8 -j ACCEPT TCP --dport 22 -j ACCEPT TCP --dport 80 -j ACCEPT TCP --dport 5432 -j ACCEPT В данном скрипте описывается сначала удаление всех правил и очистка таблиц iptables, затем разрешается прохождение только icmp-пакетов с типом 8 и tcp-пакетов на 22,80,5432 портах. Рис. 1. Результат применения правил из задания 1. В качестве результата выступает отчет сканера портов. На рис. 1. видно, что открыты только те порты, что описаны в правилах iptables. Задание 2. Преобразование сетевых адресов и статистика в фильтрах iptables. Нередко бывают случаи, когда траффик надо направить на другой компьютер или с целью маскировки, либо для балансировки нагрузки, либо по любой другой причине. В таком случае надо использовать правила для таблиц DNAT или SNAT. Отличаются таблицы только направлением трансляции. #!/bin/bash IPTABLES='/sbin/iptables' $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -F $IPTABLES -X $IPTABLES -A INPUT -p ICMP --icmp-type 8 -j ACCEPT $IPTABLES -A INPUT -p TCP --dport 22 -j ACCEPT ifconfig eth0:0 192.168.10.4 netmask 255.255.255.0 broadcast 192.168.10.255 $IPTABLES -A INPUT -p TCP --dport 80 -j ACCEPT $IPTABLES -t nat -A PREROUTING -p TCP -d 192.168.10.3 --dport 80 -j DNAT --to-destination 192.168.10.4:80 $IPTABLES -A FORWARD -i eth0 -d 192.168.10.3 -j ACCEPT $IPTABLES -N incount $IPTABLES -N outcount $IPTABLES -I INPUT 1 -i eth0 -j incount $IPTABLES -I OUTPUT 1 -o eth0 -j outcount $IPTABLES -A incount -i eth0 -s 0/0 -d 0/0 $IPTABLES -A outcount -o eth0 -s 0/0 -d 0/0 Листинг 2. Конфигурация iptables для 2 задания. Видно, что на данном листинге представлены правила для редиректа пакетов с адреса 192.168.10.3 на адрес 192.168.10.4 средствами таблицы nat и цепочки DNAT. Так же созданы правила для подсчета общего количества траффика проходящего через интерфейс eth0. Рис. 2. Пример ответа утилиты wget до и после трансляции адресов. На рис. 1 видно, что утилита wget смогла загрузить страницу с вебсервера и после трансляции адресов. При этом изменились и счетчики цепочки POSTROUTING. Рис. 3. Изменение счетчиков цепочки POSTROUTING Так же работают и правила подсчета общего количества пакетов, прошедших через интерфейс eth0. Рис. 4. Счетчики цепочек подсчёта общего количества пакетов. Задание 3. Типовые решения защиты сетей. При наличии на вашем сервера работающего ssh-демона или webсервера есть немалая вероятность попытки компрометации информационной системы. Для уменьшения этих рисков применяют различные правила для iptables, отбрасывающие плохие пакеты и ограничивающие количество попыток подключения. #!/bin/bash # ******************************* # # CONSTANTS INET_IFACE="ppp0" IPTABLES="/sbin/iptables" # ******************************* # # ******************************* # # default firewall policy rules $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT # ******************************* # # ******************************* # # clear iptables rules $IPTABLES -F $IPTABLES -X $IPTABLES -A POSTROUTING -o $INET_IFACE -j MASQUERADE; # ******************************* # # ******************************* # # create new chains $IPTABLES -N TCP_P $IPTABLES -N UDP_P $IPTABLES -N ICMP_P $IPTABLES -N BAD_P $IPTABLES -N ALLOWED_P $IPTABLES -N _SSH $IPTABLES -N FWD_C # ******************************* # # ******************************* # # default rules for correct work $IPTABLES -A INPUT -i lo -j ACCEPT $IPTABLES -A OUTPUT -o lo -j ACCEPT $IPTABLES -A INPUT -i eth1 -j ACCEPT $IPTABLES -A OUTPUT -o eth1 -j ACCEPT $IPTABLES -A OUTPUT -o $INET_IFACE -j ACCEPT # ******************************* # # ******************************* # # filling BAD_P chain $IPTABLES -A BAD_P -m conntrack --ctstate NEW,INVALID -p TCP --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset $IPTABLES -A BAD_P -m conntrack --ctstate NEW -p TCP ! --syn -j REJECT -reject-with tcp-reset $IPTABLES -A BAD_P -p TCP ! --syn -m state --state NEW -j REJECT --rejectwith tcp-reset $IPTABLES -A BAD_P -f -j DROP # ******************************* # # ******************************* # # filterring good packets $IPTABLES -A ALLOWED_P -p TCP -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit -limit 1/s -j ACCEPT $IPTABLES -A ALLOWED_P -p TCP --syn -j ACCEPT $IPTABLES -A ALLOWED_P -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A ALLOWED_P -j DROP # ******************************* # # ******************************* # # _SSH chain ruleset $IPTABLES -A _SSH -p TCP -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1/hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimitname SSH --hashlimit-htable-expire 60000 -j ACCEPT $IPTABLES -A _SSH -p TCP -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j REJECT --reject-with tcp-reset $IPTABLES -A _SSH -p TCP -m state --state NEW -m tcp --dport 22 -j ACCEPT # ******************************* # # ******************************* # # filling TCP_P chain $IPTABLES -A TCP_P -p TCP --dport 22 -j _SSH $IPTABLES -A TCP_P -p TCP --dport 50001 -j ALLOWED_P $IPTABLES -A TCP_P -p TCP --dport 56565 -j ALLOWED_P # ******************************* # # ******************************* # # filling UDP_P chain #$IPTABLES -A UDP_P -p UDP -m udp -s 233.3.2.0/24 -j ALLOWED_P $IPTABLES -A UDP_P -p UDP -m udp --dport 50001 -j ALLOWED_P # ******************************* # # ******************************* # # filling ICMP_P chain $IPTABLES -A ICMP_P -p ICMP --icmp-type 3 -j ACCEPT $IPTABLES -A ICMP_P -p ICMP --icmp-type 11 -j ACCEPT $IPTABLES -A ICMP_P -p ICMP --icmp-type 12 -j ACCEPT $IPTABLES -A ICMP_P -p ICMP -s 66.220.2.74 -j ACCEPT # HE.net ipv6 $IPTABLES -A ICMP_P -p ICMP --icmp-type 8 -j REJECT --reject-with icmp-hostunreachable $IPTABLES -A ICMP_P -p ICMP -f -j DROP # ******************************* # # ******************************* # # sorting input packets $IPTABLES -A INPUT -p ALL -i $INET_IFACE -j BAD_P $IPTABLES -j ACCEPT $IPTABLES $IPTABLES $IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -A INPUT -p TCP -i $INET_IFACE -j TCP_P -A INPUT -p UDP -i $INET_IFACE -j UDP_P -A INPUT -p ICMP -i $INET_IFACE -j ICMP_P # iptv $IPTABLES -t filter -A INPUT -d 224.0.0.0/4 -p igmp -j ACCEPT $IPTABLES -t filter -A INPUT -d 224.0.0.0/4 -i eth0 -j ACCEPT $IPTABLES -t filter -A INPUT -s 224.0.0.0/4 -i eth0 -j ACCEPT $IPTABLES -t filter -A FORWARD -d 224.0.0.0/4 -j ACCEPT $IPTABLES -t filter -A FORWARD -s 224.0.0.0/4 -j ACCEPT $IPTABLES -t mangle -A PREROUTING -d 224.0.0.0/4 -p UDP -j TTL --ttl-inc 1 # ******************************* # # EOF Листинг 3. Пример правил для защиты сети. На данном листинге представлена простая конфигурация iptables, которая может отбрасывать фрагментированные пакеты и пакеты с флагом SYN на этапе инициализации сессии, что позволяет защититься от флуда и возможной атаки DoS. Так же существуют правила для ssh. Они позволяют провести только 2 попытки авторизации за 1 минуту, что автоматически защищает от попытки подбора пароля администратора. Рис. 5. Пример счетчиков для цепочки _SSH. На данном скриншоте представлены счетчики цепочки _SSH. Видно, что плохих пакетов за сутки работы правил набралось 7090. Отсюда можно судить об эффективности правила. Вывод: В ходе выполнения данной лабораторной работы были получены навыки и сведения по конфигурированию ip-фильтра iptables. Были изучены основные механизмы его применения, такие как фильтрация открытых портов, трансляция адресов и базовая защита сети.