Прежде всего, убедитесь, что Вы установили "High" уровень безопасности ISPConfig 3 панели: Система - Конфигурация сервера - Web (вкладка).
{xtypo_warning}Следующие инструкции предназначены только для демонстрации. Полностью разберитесь в них (прочитайте документацию в интернете), прежде чем применять и использовать их.{/xtypo_warning}
В общем, если Вы будете следовать им, Вы сможете ограничивать скорость трафика по определенным портам, снизить sun соединения и предотвратить вторжение, которое используют похожие плохие пакеты. Чтобы применить их создадим папкуr /root/scripts (если она еще не существует), и следующие 5 файлов. (Loadfw, unloadfw, IPS, fwrules и reloadfail2ban). Первый будет содержать скрипт для загрузки правил, второй сценарий для выгрузки правила, третий будет содержать "плохие" IP-адреса и "плохие" хосты, четвертый пользовательские правила и пятый некоторые команды, чтобы перезагрузить eveything (включая fail2ban).
|
Вставим следующие:
#!/bin/bash # Simple iptables IP/subnet load script # ---------------------------------------------------------- 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:
|
Вставим следующие:
#!/bin/bash # Simple iptables IP/subnet unload script # --------------------------------------------------------- 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
Изменим IP адреса:
|
Вставьте раздражающие IP (например, IP, запрещенные многократно fail2ban) или целые сети. Вы можете добавить здесь IP или сеть в любое время, но прежде, чем Вы сделаете любую модификацию (особенно, если Вы удаляете sth), Вы должны выполнить /root/scripts/unloadfw. Позже Вы можете отредактировать файл, вставив IP или сети, и наконец Вы должны выполнить /root/scripts/loadfw (см. ниже),
#IP x.y.z.w x.q.a.r #netwroks d.r.t.h/24 #mailservers a.g.h.j
(Вы можете использовать http://www.countryipblocks.net, чтобы видеть сети, которые ассоциируются с каждой страной).
|
Вставьте следующие (и что-либо еще, что может быть вставлено (-I) или удалено (-D) в/из ВХОДНОЙ цепочки. Правила для серверов с единственным сетевым интерфейсом (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:
|
Вставив следующее:
#!/bin/bash /etc/init.d/fail2ban restart sleep 2 /root/scripts/unloadfw sleep 2 /root/scripts/loadfw
Наконец выполним:
|
Если вы хотите, чтобы начать после каждой перезагрузки пасты линия: /root/scripts/loadfw в конце /etc/init.d/rc.local :
|
и добавьте:
[...] /root/scripts/loadfw
(D) DoS Deflate, легкий Bash сценарий оболочки, разработанный, чтобы помочь в процессе блокирования атаки отказ в обслуживании. Это создает список IP адресов, подключенных с серверу, наряду с их общим количеством соединений. Это - один из самых простых и самых легкий устанавливаемых решений на уровне программного обеспечения.
IP адреса по предварительно сконфигурированному числу соединений автоматически блокируются в брандмауэре сервера, который может быть прямым iptables или Усовершенствованным Брандмауэром Политики (APF). Чтобы установить (D) DoS, выполните:
|
Изменим /usr/local/ddos/ddos.conf и применим последующие изменения, которые будут отключать брандмауэр APF и использовать обычную Iptables, электронную почту событий в root и блокировать IP с более чем 100 соединений в минуту.
[...] APF_BAN=0 EMAIL_TO="root" NO_OF_CONNECTIONS=100 [...]
Вышеупомянутое - только набор предложений. Вы можете расширить их, как Вам нравится.
РЭто только ожин из способов их реализации. Вы можете использовать решение для брандмауэра как APF, Shorewall и т.д.