Отчет по лабораторной работе № 4 «Администрирование информационных систем»

advertisement
Отчет по лабораторной работе № 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.
Были изучены основные механизмы его применения, такие как фильтрация
открытых портов, трансляция адресов и базовая защита сети.
Download