Безопасность · 9 min read · Dec 02, 2025

Расширение Perfect Server - Debian Squeeze [ISPConfig 3] - Страница 5

11. Укрепление вашей системы

Прежде всего, убедитесь, что вы установили уровень безопасности на Высокий в конфигурации сервера - Веб (вкладка) панели ISPConfig3.

Следующие инструкции являются лишь демонстрацией. Пожалуйста, полностью поймите их (прочитав документацию в Интернете), прежде чем применять и использовать их.

В общем, если вы будете следовать им, вы сможете ограничить трафик на определенных портах, уменьшить количество SYN-соединений и предотвратить вторжения, использующие известные вредоносные пакеты. Чтобы применить их, создайте папку /root/scripts (если она не существует) и следующие 5 файлов. (loadfw, unloadfw, IPs, fwrules и reloadfail2ban). Первый будет содержать скрипт для загрузки правил, второй - скрипт для выгрузки правил, третий будет содержать “ПЛОХИЕ” IP-адреса и “ПЛОХИЕ” сети, четвертый - пользовательские правила, а пятый - некоторые команды для перезагрузки всего (включая fail2ban).

mkdir /root/scripts
touch /root/scripts/loadfw
touch /root/scripts/unloadfw
touch /root/scripts/IPs
touch /root/scripts/fwrules
touch /root/scripts/reloadfail2ban
cd /root/scripts
nano loadfw

Вставьте следующее:

#!/bin/bash  
# Простой скрипт загрузки IP/subnet iptables  
# ----------------------------------------------------------  
  
cd /root/scripts/  
  
IPT=/sbin/iptables  
DROPMSG="fwBLOCKED "  
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)  
  
while read fwrule  
do  
  $IPT -I INPUT $fwrule  
  
done < /root/scripts/fwrules  
  
for ipblock in $BADIPS  
do  
   $IPT -I INPUT -s $ipblock -j DROP  
   $IPT -I INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"  
done  

Отредактируйте unloadfw:

nano unloadfw

Вставьте следующее:

#!/bin/bash  
# Простой скрипт выгрузки IP/subnet iptables  
# ---------------------------------------------------------  
  
  
cd /root/scripts/  
  
IPT=/sbin/iptables  
DROPMSG="fwBLOCKED "  
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)  
  
while read fwrule  
do  
  $IPT -D INPUT $fwrule  
  
done < /root/scripts/fwrules  
for ipblock in $BADIPS  
do  
   $IPT -D INPUT -s $ipblock -j DROP  
   $IPT -D INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"done

Отредактируйте IPs:

nano IPs

Вставьте надоедливые IP-адреса (например, IP-адреса, заблокированные несколько раз fail2ban) или целые сети. Вы можете добавлять здесь IP-адреса или сети в любое время, но прежде чем вносить какие-либо изменения (особенно если вы что-то удаляете), вы должны выполнить “/root/scripts/unloadfw”. После этого вы можете редактировать файл, вставляя IP-адреса или сети, и в конечном итоге вам нужно выполнить “/root/scripts/loadfw” (см. ниже)

#IP  
x.y.z.w  
x.q.a.r  
  
#сети  
d.r.t.h/24  
  
#почтовые серверы  
a.g.h.j

(Вы можете использовать http://www.countryipblocks.net, чтобы увидеть сети, связанные с каждой страной). Отредактируйте fwrules:

nano fwrules

Вставьте следующее (и все, что может быть вставлено (-I) или удалено (-D) в/из цепочки INPUT. Правила предназначены для серверов с одним сетевым интерфейсом (eth0). Пожалуйста, измените их в соответствии с вашими потребностями (например, измените eth0, если ваш сетевой интерфейс другой).

-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50022 -j DROP  
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50022 -j LOG --log-prefix "LMfwport50022"  
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --set --name fw50022  
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50000 -j DROP  
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50000 -j LOG --log-prefix "LMfwport50000"  
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --set --name fw50000  
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw10000 -j DROP  
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw10000 -j LOG --log-prefix "LMfwport10000"  
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --set --name fw10000  
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw25 -j DROP  
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw25 -j LOG --log-prefix "LMfwport25"  
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --set --name fw25  
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw110 -j DROP  
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw110 -j LOG --log-prefix "LMfwport110"  
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --set --name fw110  
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50443 -j DROP  
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50443 -j LOG --log-prefix "LMfwport50443"  
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --set --name fw7443  
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw22 -j DROP  
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw22 -j LOG --log-prefix "LMfwport22"  
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name fw22  
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw20 -j DROP  
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw20 -j LOG --log-prefix "LMfwport20"  
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --set --name fw20  
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw21 -j DROP  
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw21 -j LOG --log-prefix "LMfwport21"  
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --set --name fw21  
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw143 -j DROP  
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw143 -j LOG --log-prefix "LMfwport143"  
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --set --name fw143  
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw53 -j DROP  
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw53 -j LOG --log-prefix "LMfwport53"  
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --set --name fw53  
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw443 -j DROP  
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw443 -j LOG --log-prefix "LMfwport443"  
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --set --name fw443  
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw8081 -j DROP  
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw8081 -j LOG --log-prefix "LMfwport8081"  
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --set --name fw8081  
-p icmp -j DROP  
-p icmp -m limit --limit 2/s -j ACCEPT  
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j DROP  
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn80"  
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j DROP  
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn443"  
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j DROP  
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j  LOG --log-prefix "BLfwsyn50443"  
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn50022"  
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn22"  
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j DROP  
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn50000"  
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j DROP  
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn10000"  
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn25"  
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn20"  
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn21"  
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn110"  
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn143"  
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn53"  
-i eth0 -p tcp --tcp-flags ALL ALL -j DROP  
-i eth0 -p tcp --tcp-flags ALL ALL -j LOG --log-level 4 --log-prefix "FLAAfw"  
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP  
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level 4 --log-prefix "FINGfw"  
-i eth0 -f -j DROP  
-i eth0 -f  -m limit --limit 6/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "FRAGfw"  
-i eth0 -p tcp --tcp-flags ALL NONE -j DROP  
-i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULLfw"  
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP  
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMASfw"  
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP  
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-level 4 --log-prefix "SYNRTSfw"  
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP  
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-level 4 --log-prefix "SYNRTSACKfw"  
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP  
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-level 4 --log-prefix "SYNRTSYNSfw"  
-i eth0 -p tcp ! --syn -m state --state NEW -j DROP  
-i eth0 -p tcp ! --syn -m state --state NEW  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "DROSYNCfw"

Отредактируйте reloadfail2ban:

nano reloadfail2ban

Вставьте следующее:

#!/bin/bash  
  
/etc/init.d/fail2ban restart  
sleep 2  
/root/scripts/unloadfw  
sleep 2  
/root/scripts/loadfw

Имейте в виду, что скрипт reloadfail2ban просто выгружает пользовательские правила из fwrules, перезапускает fail2ban и снова загружает правила из fwrules. Он не выполняет полную перезагрузку брандмауэра. Поэтому перед тем, как редактировать правила в этом файле (или файле IPs), выгрузите их с помощью unloadfw. Роль reloadfail2ban заключается в тестировании функциональности fail2ban.

Наконец, выполните:

chmod 700 reloadfail2ban
chmod 700 unloadfw
chmod 700 loadfw
/root/scripts/reloadfail2ban

Если вы хотите, чтобы пользовательские правила загружались после каждой перезагрузки, вставьте строку: /root/scripts/loadfw в конец /etc/init.d/rc.local:

nano /etc/init.d/rc.local

и добавьте:

[...]  
/root/scripts/loadfw

(D)DoS Deflate - это легкий скрипт оболочки bash, предназначенный для помощи в процессе блокировки атаки отказа в обслуживании. Он создает список IP-адресов, подключенных к серверу, вместе с общим количеством их соединений. Это одно из самых простых и легких в установке решений на программном уровне.

IP-адреса с количеством соединений, превышающим заранее настроенное значение, автоматически блокируются в брандмауэре сервера, который может быть прямым iptables или Advanced Policy Firewall (APF). Чтобы установить (D)DoS Deflate:

cd /tmp
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh

Отредактируйте /usr/local/ddos/ddos.conf и примените следующие изменения, которые отключат брандмауэр APF и будут использовать обычные iptables, отправлять события на root и блокировать IP с более чем 100 соединениями в минуту.

[...]  
APF_BAN=0  
EMAIL_TO="root"  
NO_OF_CONNECTIONS=100  
[...]  

Выше приведены лишь несколько предложений. Вы можете расширить их по своему усмотрению.

Реализация - это всего лишь один из подходов из многих. Вы можете использовать решение брандмауэра, такое как APF, Shorewall и т.д. Я был бы рад включить больше различных подходов в дополнение к этому.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.