Iptables: Сканирование портовПодписка на Комментарии к "Iptables: Сканирование портов"

Аватар zenon

Чтобы выявить наличие уязвимых сервисов на машине, атакующий производит разведку с помощью сканера портов и различных систем обнаружения уязвимостей. Обычно в качестве сканера портов используется nmap, который способен осуществлять сканирование десятком различных способов и в некоторых случаях умеет выявлять версии ОС и сервисов. Вот список особенно популярных флагов nmap, которые обычно используют взломщики:

Флаги nmap, используемые при сканировании.

-sT — обычное TCP-сканирование с помощью открытия соединения на указанный порт и его завершения;
-sS — SYN/ACK-сканирование, связь разрывается сразу после ответа на запрос открытия соединения;
-sU — UDP-сканирование;
-sF — сканирование пакетами с установленным флагом FIN;
-sX — сканирование пакетами с установленными флагами FIN, PSH и URG;
-sN — сканирование пакетами без установленных флагов.

Метод защиты от сканирования прост и известен любому системному администратору. Заключается он в простом закрытии всех сервисов, которые не должны быть видны из внешней сети. Например, если на машине работают сервисы ssh, samba и apache, а из внешнего мира должен быть виден только веб-сервер с корпоративной веб-страницей, то межсетевой экран может быть настроен так:

Начальная настройка iptables

outif="eth1"
iptables -F
iptables -i $outif -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -i $outif -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -i $outif -P INPUT DROP
iptables -i $outif -P OUTPUT ACCEPT

Правила разрешают принимать пакеты уже установленных соединений (чтобы, например, браузер мог получить ответ на запрос к удаленному серверу), разрешают обращения на 80-й порт, блокируя все остальные, и разрешают любые коннекты наружу.

В общем-то, такая схема защиты сетевых сервисов от сканирования и проникновения отлично работает, но мы можем пойти дальше и настроить файер так, чтобы некоторые виды сканирования вообще не могли бы быть выполнены. Технически мы не можем сделать это в отношении обычного сканирования (флаги nmap '-sT', '-sS' и '-sU') просто потому, что в нем нет ничего криминального, однако нестандартные типы сканирования, такие как '-sN', '-sF' и '-sX', порождают пакеты, которые никак не могли быть созданы легальными приложениями.

Поэтому без тени сомнения отбрасываем подобные соединения.

Методы борьбы с экзотическими видами сканирования

# Запрет FIN-сканирования
iptables -A INPUT –p tcp –m tcp –-tcp-flags FIN,ACK FIN -j DROP
# Запрет X-сканирования
iptables -A INPUT –p tcp –m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG –j DROP
# Запрет N-сканирования
iptables -A INPUT –p tcp –m tcp –-tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP

Для защиты от SYN/ACK-сканирования, инициируемого с помощью nmap-флага '-sS', мы можем использовать метод пассивного определения ОС (OS Fingerprint), доступный в iptables/netfilter (начиная с версии 1.4.6). Во время проведения обычного сканирования (флаг '-sT') nmap использует стандартный интерфейс сокетов операционной системы, поэтому такой скан почти ничем не отличается от потока обычных пакетов (ниже мы рассмотрим некоторые его отличия), однако при SYN/ACK-сканировании nmap формирует пакеты самостоятельно, поэтому они имеют некоторые черты, которые выдают их источник. Метод пассивного определения ОС позволяет идентифицировать эти пакеты и отбросить их с помощью стандартных правил файервола:

iptables -I INPUT -p tcp -m osf --genre NMAP -j DROP

Модуль osf брандмауэра iptables/netfilter использует базу «отпечатков», собранную и обновляемую разработчиками OpenBSD (/etc/pf.os) Интересно так же и то, что они позволяют эффективно противодействовать функции определения ОС утилиты nmap (флаг '-O').

Теперь мы защищены почти от всех видов сканирования, кроме стандартного и тупого '-sT'. Как быть с ним? На самом деле все просто. Факт сканирования портов легко заметить, просто проанализировав логи файервола. Если за короткий промежуток времени происходило множество коннектов на различные порты — значит, нас сканировали. Осталось только переложить эту идею на правила брандмауэра. Для iptables есть отличный рецепт, который блокирует всех, кто слишком настойчиво стучится в нерабочие порты:

Борьба со сканированием с помощью iptables

# Проверка на стук в нерабочие порты (10 в час)
iptables -A INPUT -m recent --rcheck --seconds 3600 --hitcount 10 --rttl -j RETURN
# Вторая проверка на стук в нерабочие порты (2 в минуту)
iptables -A INPUT -m recent --rcheck --seconds 60 --hitcount 2 --rttl -j RETURN
# Заносим адреса стучащихся в список
iptables -A INPUT -m recent --set
# Отбрасываем пакеты всех, кто превысил лимит на количество подключений
iptables -P INPUT -j DROP

Установив пакет xtables-addons, содержащий наработки проекта patch-omatic, мы получим доступ к модулю PSD (Port Scan Detect), реализованному по образу и подобию демона scanlogd. Все предыдущие строки могут быть легко заменены простым правилом:

iptables -A INPUT -m psd -j DROP
Похожие материалы:

Добавить комментарий