1. 程式人生 > >通過iptables限制併發連線數20130515

通過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