Защита от сканеров портов на Linux

linux iptables port scaner

В этом небольшом обучающем пособии мы рассмотрим, как можно настроить наши Linux-системы, чтобы предотвратить определение сканерами портов типов служб и портов в работающей системе. Через открытые порты злоумышленники смогут подключаться к ним и узнавать, какие именно версии программ и сервисов установлены на вашем сервере или хосте. Пока у ата­кующе­го нет информа­ции об исполь­зуемых сер­висах и про­токо­лах, он не может под­нять­ся выше — на уро­вень при­ложе­ний.

Существуют различные способы защиты наших компьютеров от сканирования портов и обнаружения подозрительного поведения.

Мы рассмотрим iptables и системы обнаружения вторжений (IDS).
Настроим iptables с набором правил, разрешающих только необходимые порты для функционирования сервисов.

Использование iptables

Од­ной из самых прос­тых рекомен­даций по зат­рудне­нию ска­ниро­вания пор­тов может быть зап­рет отправ­ки пакетов TCP-RST. Такую воз­можность мож­но акти­виро­вать бук­валь­но в одну коман­ду:

iptables -A OUTPUT -o eth0 -p tcp —tcp-flags RST RST -j DROP

Давайте создадим правила iptables для контроля трафика.

В основном мы будем фильтровать трафик, поступающий в нашу систему, на основе портов и IP-адресов источников.

Рекомендуется блокировать/закрывать все неиспользуемые порты.

Это убережет нас от возможных атак на эти порты.

Создание правил по умолчанию

Теперь рассмотрим некоторые необходимые правила по умолчанию.

Во-первых, нам нужно разрешить все ESTABLISHED-соединения и текущие сессии через iptables.

Для этого добавим две строки, разрешающие входящий и исходящий трафик на интерфейсе loopback:

 

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

 

Далее предоставим разрешение ESTABLISHED и RELATED на входящий трафик на хосте:

 

sudo iptables -A INPUT -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT

 

Затем разрешим ESTABLISHED исходящим соединениям.

В основном это ответы на уже установленные соединения:

 

  sudo iptables -A OUTPUT -m conntrack —ctstate ESTABLISHED -j ACCEPT

 

Далее разрешим связи между внутренними и внешними соединениями:

 

  sudo iptables -A FORWARD -i enp0s2 -o enp0s3 -j ACCEPT

 

Наконец, дропнем весь остальной недействительный трафик:

 

sudo iptables -A INPUT -m conntrack —ctstate INVALID -j DROP

 

Пример правил для защиты от Nmap-сканирования

В этом разделе мы создадим правила для фильтрации и отсева идентифицированных Nmap-сканов.

Для начала добавим несколько базовых правил:

sudo iptables -A INPUT -p tcp —tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags SYN,FIN SYN,FIN -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags SYN,RST SYN,RST -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags FIN,RST FIN,RST -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags ACK,FIN FIN -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags ACK,PSH PSH -j DROP
sudo iptables -A INPUT -p tcp —tcp-flags ACK,URG URG -j DROP

 

Эти правила, как правило, отбрасывают любой входящий трафик, содержащий любой из указанных флагов.

Мы можем настроить нашу систему на разрешение такого трафика из определенных или доверенных источников.

Кроме того, можно настроить пропуск такого трафика на определенных интерфейсах или портах.

В дальнейшем нам необходимо добавить еще несколько правил для усиления защиты нашей системы.

Добавим эти правила на выход

sudo iptables -A INPUT -p tcp -i enp0s3 -m state —state NEW -m recent —set
sudo iptables -A INPUT -p tcp -i enp0s3 -m state —state NEW -m recent —update —seconds 30 —hitcount 10 -j DROP
sudo iptables -A FORWARD -p tcp -i enp0s3 -m state —state NEW -m recent —set
sudo iptables -A FORWARD -p tcp -i enp0s3 -m state —state NEW -m recent —update —seconds 30 —hitcount 10 -j DROP

 

Теперь мы можем увидеть результаты при выполнении команды nmap:

sudo nmap -Pn 192.168.139.131
Nmap scan report for 192.168.139.131
Not shown: 983 filtered tcp ports (no-response)
PORT STATE SERVICE
23/tcp closed telnet
111/tcp closed rpcbind
139/tcp closed netbios-ssn
993/tcp closed imaps
995/tcp closed pop3s
1434/tcp closed ms-sql-m
3306/tcp closed mysql
5900/tcp closed vnc

 

Еще одно сканирование даст:

  $ sudo nmap -sS 192.168.139.131
Nmap scan report for 192.168.139.131
Not shown: 991 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp open ssh
23/tcp closed telnet
25/tcp closed smtp
53/tcp closed domain
80/tcp closed http

 

Из этого примера видно, что в состоянии фильтрации находится 991 TCP-порт.

Важно отметить, что состояние фильтрации является наиболее безопасным, так как не позволяет злоумышленнику получить информацию о том, какой сервис работает на данном порту.

После выполнения сканирования мы можем добавить специальные правила для портов, которые были определены как открытые:

  $ sudo iptables -A INPUT -p tcp -s 192.168.0.147 —destination-port 22 -i enp0s3 -j ACCEPT

 

Кроме того, мы можем явно блокировать трафик с целевого IP-адреса с помощью правил iptable, например:

  $ sudo iptables -A INPUT -i enp0s3 -s 192.168.0.147 -j DROP

 

Далее сохраним написанные нами правила iptable:

  $ sudo iptables-save > ./ip.rules

 

Наконец, мы можем восстановить эти настройки при загрузке при запуске:

  $ sudo iptables-restore < ./ip.rules

 

Использование системы обнаружения вторжений

В этом разделе мы рассмотрим, как можно использовать IDS для защиты от сканирования Nmap.

Системы обнаружения вторжений – это технология сетевой безопасности, созданная для обнаружения возможных атак на целевое приложение.

IDS отслеживает и регистрирует трафик.

Мы можем настроить ее на выполнение определенных действий при обнаружении определенного трафика.

Некоторые IDS могут также работать как системы предотвращения вторжений (IPS).

Существуют различные сетевые IDS.

Например, наиболее часто используемыми являются Snort и Surricata.

Так же для iptables имеется специальный модуль PSD абревиатура Port Scan Detection — обнаружение и блокировки сканирования портов. Он помогает защитить сервер от разведки (reconnaissance), добавляя IP-адреса сканеров в список блокировки. Например если хост обратился как минимум к 7 привилегированным портам в течение 3 секунд, он считается сканером портов.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *