通過iptables限制併發連線數20130515
通過iptables對使用者ip的連線數量和發包速率記錄log進行統計,後期對使用者IP的連線數量和發包速率進行限制,以減輕惡意使用者或者CC攻擊對伺服器資源的過大消耗,保證
源站安全;修改系統核心引數增加同時開啟SYN半連線的數量,縮短SYN半連線timeout值,已減輕SYN flood對前置機的影響
###for security log only
##log tcp connection limit
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 150 -j LOG --log-level 4 --log-prefix "iptables limit connection:"
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 150 -j DROP
##log pkgs exceed a limit rate(測試後意義不大)
#/sbin/iptables -A INPUT -p tcp --dport 80 -m limit --limit 10000/s --limit-burst 3000 -j LOG --log-level 4 --log-prefix "iptables limit rate:"
系統默認同時開啟SYN半連線的數量為1024,需要調大
# more /proc/sys/net/ipv4/tcp_max_syn_backlog
1024
$ more /proc/sys/net/ipv4/tcp_syn_retries
5
將drop的資料包記錄到log
# vim /etc/rsyslog.conf
# for log iptables rules
:msg, contains, "iptables limit connection" -/var/log/iptables_conn.log
:msg, contains, "iptables limit rate" -/var/log/iptables_rate.log
# /etc/init.d/rsyslog restart
檢視log
# tail -f /var/log/iptables_conn.log
May 15 07:22:00 nginx kernel: iptables limit connection:IN=eth1 OUT= MAC=78:2b:cb:74:86:fc:00:30:a3:4c:b8:0a:08:00 SRC=112.95.241.183 DST=1.79.233.105
LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=34034 DF PROTO=TCP SPT=60936 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
May 15 07:22:00 nginx kernel: iptables limit connection:IN=eth1 OUT= MAC=78:2b:cb:74:86:fc:00:30:a3:4c:b8:0a:08:00 SRC=112.95.241.183 DST=1.79.233.105
LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=50703 DF PROTO=TCP SPT=57970 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
檢視iptable資料包匹配狀態
# iptables -L -vn