netstat
工具来检测SYN
攻击
# netstat -n -p -t
tcp
0
0 10.11.11 .11:23
124.173.152.8:25882
SYN_RECV
-
tcp
0
0 10.11.11 .11:23
236.15.133.204:2577
SYN_RECV
-
tcp
0
0 10.11.11 .11:23
127.160.6.129:51748
SYN_RECV
-
...
LINUX
系统中看到的,很多连接处于
SYN_RECV
状态(在
WINDOWS
系统中是
SYN_RECEIVED
状态),
源
IP
地址都是随机的,表明这是一种带有
IP
欺骗的
SYN
攻击。
# netstat -n -p -t | grep SYN_RECV | grep :80 | wc -l
324
查看在
LINUX
环境下某个端囗的未连接队列的条目数,显示
TCP
端囗
22
的未连接数有
324
个,
虽然还远达不到系统极限,但应该引起管理员的注意。
[root@pub wxjsr]# netstat -na | grep SYN_RECV
tcp 0 0 58.193.192.20:80 221.0.108.162:32383 SYN_RECV
tcp 0 0 58.193.192.20:80 125.85.118.231:2601 SYN_RECV
tcp 0 0 58.193.192.20:80 222.242.171.215:2696 SYN_RECV
tcp 0 0 58.193.192.20:80 116.52.10.51:2629 SYN_RECV
tcp 0 0 58.193.192.20:80 218.171.175.157:1117
[root@pub wxjsr]# netstat -na | grep SYN_RECV |wc
11 66 979
查看系统SYN
相关的配置
Linux
内核提供了若干
SYN
相关的配置,用命令:
sysctl -a | grep syn
[root@metc apache2]# /sbin/sysctl -a | grep syn
net.ipv6.conf.default.max_desync_factor = 600
net.ipv6.conf.all.max_desync_factor = 600
net.ipv6.conf.eth0.max_desync_factor = 600
net.ipv6.conf.lo.max_desync_factor = 600
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
fs.quota.syncs = 18
防范SYN
攻击设置
#
缩短
SYN- Timeout
时间:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i eth0 -m limit --limit 1/sec --limit-burst 5 -j ACCEPT
#
每秒
最多
3
个
syn
封包
进入
表达为
:
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn-flood -j REJECT
#
设置
syncookies
:
sysctl -w net.ipv4.tcp_syncookies=1
/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=3000
/sbin/sysctl -w net.ipv4.tcp_synack_retries=1
/sbin/sysctl -w net.ipv4.tcp_syn_retries=1
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.forwarding=0
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
/sbin/sysctl -w net.ipv4.conf.default.accept_source_route=0 #
禁用
icmp
源路由选项
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 #
忽略
icmp ping
广播包,应开启
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=1 #
忽略所有
icmp ping
数据,覆盖上一项