У меня есть виртуальная машина с настраиваемым скриптом межсетевого экрана и Fail2ban.
Я определил несколько диапазонов IP-адресов, которые делают постоянные попытки вторжения, поэтому я заблокировал их прямо в скрипте брандмауэра. Вот упрощенный обзор:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Custom firewall
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short Description: Firewall init script
# Description: Custom firewall
### END INIT INFO
## Lock everything
# Clear current tables
iptables -t filter -F
iptables -t filter -X
# Deny all connexions (input and output)
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
## Common configurations
# Preserve established connexions
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
# Allow ICMP (ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
## Custom rules
# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
# HTTP
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
## JAIL
iptables -A INPUT -s 61.147.80.0/24 -j DROP
iptables -A INPUT -s 61.167.49.0/24 -j DROP
iptables -A INPUT -s 61.174.50.0/24 -j DROP
iptables -A INPUT -s 61.174.51.0/24 -j DROP
iptables -A INPUT -s 103.41.124.0/24 -j DROP
iptables -A INPUT -s 122.225.97.0/24 -j DROP
iptables -A INPUT -s 122.225.103.0/24 -j DROP
iptables -A INPUT -s 122.225.109.0/24 -j DROP
Fail2ban работает как шарм, но я удивлен, что он все еще обнаруживает попытки с заблокированных IP-адресов, таких как 122.225.109.107
так как они должны быть заблокированы моим скриптом межсетевого экрана. Как это возможно ?
Пакеты проходят через правила iptables в том порядке, в котором они появляются.
Вы запрещаете упомянутые IP-адреса в конце набора правил, а до этого запрета вы принимаете весь трафик на порт 80 и ssh 22. Таким образом, ваши правила запрета не действуют.
Вы должны позволить fail2ban управлять запретом, поскольку он помещает правила запрета в начало набора правил iptables, или помещает ваши правила запрета в начало вашего скрипта с такими командами, как iptables -I INPUT 1 rule
разместить правило перед первым правилом в наборе.
А поскольку у вас есть политика по умолчанию DROP, нет смысла помещать правила с целью DROP в конце набора правил.