————————————–
# удаляем все настроенные правила. Действия по-умолчанию остаются!
sudo iptables -F
# создаём дополнительные цепочки для фильтрации ssh.
sudo iptables -N BADGUY
sudo iptables -N HOMEADDRESSES
# for access to Loopback interface
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# for srv-do-01 and OPENVPN AS. To deny access to Client Access and obtaining certificates:
sudo iptables -A INPUT -p tcp --dport 943 -j DROP
# for HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# for snmp
sudo iptables -A INPUT -s 5.101.102.99/32 -p udp --dport 161 -j ACCEPT
sudo iptables -A INPUT -s 88.198.74.221/32 -p udp --dport 161 -j ACCEPT
sudo iptables -A INPUT -s 212.20.150.0/24 -p udp --dport 161 -j ACCEPT
# for ssh protection
sudo iptables -A INPUT -s 88.198.74.221/32 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 5.101.102.99/32 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m recent --update --seconds 3600 --name badguys --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A INPUT -s 37.201.0.0/16 -p tcp -m tcp --dport 22 -j HOMEADDRESSES
sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP
# for vsFTPd
#sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 21 -j ACCEPT
#sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 20 -j ACCEPT
#sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 1030:1040 -j ACCEPT
#sudo iptables -A INPUT -p tcp -m tcp --dport 21 -j DROP
# for time, NTP
#sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
# for ssh protection, addition
sudo iptables -A BADGUY -m recent --set --name badguys --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A HOMEADDRESSES -m recent --set --name sshcheck --mask 255.255.255.255 --rsource
sudo iptables -A HOMEADDRESSES -m recent --rcheck --seconds 300 --hitcount 4 --name sshcheck --mask 255.255.255.255 --rsource -j BADGUY
sudo iptables -A HOMEADDRESSES -m recent --rcheck --seconds 30 --hitcount 2 --name sshcheck --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A HOMEADDRESSES -p tcp -m tcp --dport 22 -j ACCEPT
# accept icmp from all
sudo iptables -A INPUT -p icmp -j ACCEPT
# drop all other traffic
sudo iptables -A INPUT -j DROP
————————————–
sudo iptables -F
sudo iptables -N BADGUY
sudo iptables -N HOMEADDRESSES
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -s 5.101.102.99/32 -p udp --dport 161 -j ACCEPT
sudo iptables -A INPUT -s 88.198.74.221/32 -p udp --dport 161 -j ACCEPT
sudo iptables -A INPUT -s 212.20.150.0/24 -p udp --dport 161 -j ACCEPT
sudo iptables -A INPUT -s 88.198.74.221/32 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 5.101.102.99/32 -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m recent --update --seconds 3600 --name badguys --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A INPUT -s 37.201.0.0/16 -p tcp -m tcp --dport 22 -j HOMEADDRESSES
sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP
#sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 21 -j ACCEPT
#sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 20 -j ACCEPT
#sudo iptables -A INPUT -s 212.20.150.0/24 -p tcp -m tcp --dport 1030:1040 -j ACCEPT
#sudo iptables -A INPUT -p tcp -m tcp --dport 21 -j DROP
#sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
sudo iptables -A BADGUY -m recent --set --name badguys --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A HOMEADDRESSES -m recent --set --name sshcheck --mask 255.255.255.255 --rsource
sudo iptables -A HOMEADDRESSES -m recent --rcheck --seconds 300 --hitcount 4 --name sshcheck --mask 255.255.255.255 --rsource -j BADGUY
sudo iptables -A HOMEADDRESSES -m recent --rcheck --seconds 30 --hitcount 2 --name sshcheck --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A HOMEADDRESSES -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p icmp -j ACCEPT
sudo iptables -A INPUT -j DROP
————————————–
Проверка:
sudo iptables -L -v -n --line-numbers
sudo iptables -S
# файлы с адресами попашими под наблюдение:
ll /proc/net/xt_recent/
————————————–
Когда всё работает так как нужно и вы разобрались в iptables, то можно сделать следующее для сохранения настроек и работы iptables после перезапуска сервера:
# создаём файл в которвый будем сохранять настройки iptables и экспортируем текущие настройки туда:
sudo sh -c "iptables-save > /etc/iptables.rules"
# переходим в сетевые настройки и добаляем к настройкам нужного интерфейса комманду “pre-up iptables-restore < /etc/iptables.rules”. При старте интерфейса она подтянет настройки из файла в iptables. Так же можно добавить “post-down iptables-save > /etc/iptables.rules” для того чтобы сетевая служба сохраняла настройки iptables в случае отключения интерфейса.
sudo vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
# enable iptables rules at interface UP
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
————————————–
Не забываем про IPV6
——————————
sudo ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 22 -j DROP
sudo ip6tables -P INPUT DROP
sudo sh -c "ip6tables-save > /etc/ip6tables.rules"
sudo cat /etc/network/interfaces
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
pre-up ip6tables-restore < /etc/ip6tables.rules
post-down ip6tables-save > /etc/ip6tables.rules
——————————