Изменить порядок чтения IPTABLE CHAIN ​​(используя Fail2Ban)

У меня есть некоторый опыт использования iptables и fail2ban. Оба работают так, как должны, но я хотел бы оптимизировать способ "отбрасывания" пакетов, когда происходит проверка IP и порта.

Fail2Ban хорошо блокирует IP-адреса, которые пытаются получить доступ к различным портам (например, SSH, MySQL и т. Д.).

Однако после блокировки IP-адреса на определенном порту (т. Е. На порту 22 для SSH) HOST по-прежнему доступен через ICMP, даже несмотря на то, что Fail2Ban добавил условие "DROP - all" в iptables.

Я могу ошибаться, но я думаю, что это связано с порядком, в котором iptables читает цепочку Fail2Ban.

Это то, что iptables -L раскрыть (IP и DNS были заменены):

user@ SERVER > iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-SSH  tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     all  --  10.10.10.1/25  anywhere
fail2ban-SSH  all  --  anywhere             anywhere
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
fail2ban-SSH  all  --  anywhere             anywhere
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain fail2ban-SSH (3 references)
target     prot opt source               destination
DROP       all  --  badip.baddomain.org  anywhere
DROP       all  --  299.299.299.11         anywhere
DROP       all  --  prober.hackers.com  anywhere
RETURN     all  --  anywhere             anywhere

Как хорошо, вот мой iptables файл в качестве ориентира:

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:fail2ban-SSH - [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
#
#
#
-A INPUT -j fail2ban-SSH
-A FORWARD -j fail2ban-SSH
-A INPUT -j RH-Firewall-1-INPUT 
-A FORWARD -j RH-Firewall-1-INPUT 
-A RH-Firewall-1-INPUT -i lo -j ACCEPT 
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT 
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT 
-A RH-Firewall-1-INPUT -p esp -j ACCEPT 
-A RH-Firewall-1-INPUT -p ah -j ACCEPT 
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT 
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
COMMIT

Как вы можете видеть, есть строка, которая позволяет ICMP:

ACCEPT     icmp --  anywhere             anywhere            icmp any

Это сделано специально, поскольку мне нужно, чтобы законные пользователи могли пинговать определенные серверы.

Вы можете видеть в моем файле iptables, что я добавил цепочку "fail2ban-SSH" впереди других в надежде, что она будет прочитана раньше всех других правил, но это не сработало.

Моей целью было бы сбросить ЛЮБОЙ запрос с IP-адреса, который Fail2Ban заблокировал по любой причине, включая запросы ICMP.

Есть ли способ настроить iptables для чтения правил Fail2Ban, перед всеми другими ЦЕПЯМИ и правилами, чтобы я мог действительно блокировать и IP на всех портах и ​​протоколах?

1 ответ

Если я правильно понимаю ваш вопрос, IP-адреса в вашей SSH-тюрьме должны быть заблокированы для всех портов в системе и не должны быть в состоянии пропинговать вас. Все остальные IP-адреса должны иметь возможность пинговать.

Чтобы заблокировать IP-адрес для всех портов, вам необходимо настроить вашу SSH-тюрьму для использования конфигурации действий iptables-allports. Вы можете настроить, использовать ли DROP, REJECT и т. Д. В /etc/fail2ban/action.d/iptables-blocktype.conf

[sshd]
enabled  = true
action   = iptables-allports[name=sshd]
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5
findtime = 300
bantime  = 7200

Если вы также хотите, чтобы этот конкретный IP-адрес не пинговал вас, а другим, кто не находится в тюрьме SSH, можно пропинговать, вам нужно добавить еще одно действие в вашу SSH-тюрьму.

  • Сделайте копии как iptables-allports.conf, так и iptables-blocktype.conf.
  • Дайте файлам новые имена, такие как: iptables-blockping.conf и iptables-blocktype-ping.conf.
  • Откройте iptables-blockping.conf и обновите раздел [INCLUDES], указав на iptables-blocktype-ping.conf.
  • Откройте iptables-blocktype-ping.conf и измените тип блока на REJECT --reject-with icmp-host-prohibited,

В тюрьмах может быть несколько действий, поэтому прямо под iptables-allports [name = sshd] укажите имя вашего нового файла конфигурации действий, iptables-blockping.conf.

Это должно работать для ваших целей - IP-адреса в вашей SSH-тюрьме будут содержать определенные записи в iptables для отклонения запросов на пинг. Эти правила будут прочитаны после вашего правила, чтобы разрешить эхо-запросы.

Другие вопросы по тегам