В один прекрасный момент наблюдаю большую, ничем не обоснованную загрузку http сервера. В логах наблюдаем большое количество запросов стартовой страницы.
Защитимся динамическим правилом в фаерволе, создаем файл /etc/iptables.rules:
# Generated by iptables-save v1.3.5 on Tue Nov 23 09:47:33 2010
*filter
:INPUT ACCEPT [751509:115729779]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [867438:174074250]
:syn_flood - [0:0]
-A INPUT -m recent --update --seconds 60 --name bad_hosts --rsource -j DROP
-A INPUT -i ppp0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn_flood
#Ветка контроля syn flood
-A syn_flood -m limit --limit 6/sec --limit-burst 150 -j RETURN
-A syn_flood -j LOG --log-prefix "SYN flood: "
-A syn_flood -m recent --set --name bad_hosts --rsource -j DROP
COMMIT
# Completed on Tue Nov 23 09:47:33 2010
где:
- -limit 6/sec --limit-burst 150 - шесть соединений в секунду не больше 150 раз подряд
- -seconds 60 - блокируем на 60 секунд
Добавляем в /etc/rc.local:
/sbin/iptables-restore < /etc/iptables.rules
Список попавших в бан:
cat /proc/net/ipt_recent(xt_recent)/bad_hosts
src=133.133.133.134 ttl: 50 last_seen: 1074288758 oldest_pkt: 0 1074288730, 1074288733, 1074288735, 1074288738, 1074288738, 1074288740, 1074288743, 1074288745, 1074288745, 1074288748, 1074288750, 1074288750, 1074288753, 1074288753, 1074288755, 1074288758, 1074288760, 1074288760, 1074288763, 1074288765
Очистка списка:
echo / > /proc/net/ipt_recent/bad_hosts
Если не очищается сбрасываем правила очищаем и опять запускаем:
iptables -F
echo / > /proc/net/ipt_recent/bad_hosts
iptables-restore < iptables.rules
Схожий функционал также присутствует в PF:
table <bad_hosts> persist
block quick from <bad_hosts> to any
pass in on $int_ip to any flags S/SA keep state (max-src-conn 100, max-src-conn-rate 30/10, overload <bad_hosts> flush global)
Где:
max-src-conn-rate 30/10 30 - коннекты, 10 - секунды
Список заблокированных:
pfctl -t bad_hosts -T show
Коннекты:
pfctl -s Sources
Также для высоко нагруженных серверов помогут параметры:
/etc/sysctl.conf
# Custom/etc/security/limits.conf
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.tcp_max_orphans=65536
net.ipv4.tcp_fin_timeout=1
net.ipv4.tcp_keepalive_time=30
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_max_syn_backlog=262144
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_mem=50576 64768 98152
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_orphan_retries=0
net.ipv4.tcp_syncookies=1
net.ipv4.netfilter.ip_conntrack_max=1048576
net.netfilter.nf_conntrack_max=1048576
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_congestion_control=htcp
net.ipv4.tcp_no_metrics_save=1
net.ipv4.route.flush=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.eth0.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_rfc1337=1
net.ipv4.ip_forward=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_echo_ignore_all=0
net.ipv4.icmp_ignore_bogus_error_responses=1
net.core.somaxconn=262144
net.core.netdev_max_backlog=100000
net.core.rmem_default=8388608
net.core.wmem_default=4194394
net.core.rmem_max=33554432
net.core.wmem_max=33554432
net.ipv4.tcp_max_tw_buckets = 720000
net.ipv4.tcp_tw_recycle = 1
fs.file-max=200000
* soft nofile 200000
* hard nofile 200000
Комментариев нет :
Отправить комментарий