У меня есть VM с пользовательским сценарием брандмауэра и 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 работает как очарование, но я удивлен, что он все еще обнаруживает попытки от запрещенного дюйм/с такой как 122.225.109.107
так как они должны быть запрещены с моим сценарием брандмауэра. Как это возможно?
Пакеты проходят через правила iptables в том порядке, в котором они появляются.
Вы запрещаете упомянутые IP-адреса в конце набора правил, и перед этим вы принимаете весь трафик на порт 80 и ssh 22. Таким образом, ваши правила запрета не срабатывают.
Вы должны позволить fail2ban управлять запретом, поскольку он помещает правила запрета в начало набора правил iptables, или помещает правила запрета в начало вашего скрипта с помощью таких команд, как iptables -I INPUT 1 rule
, чтобы поместить правило перед первым правилом в наборе.
И поскольку у вас есть политика по умолчанию DROP, нет смысла помещать правила с целью DROP в конце набора правил.