作者 | 阿文
责编 | 郭芮
什么是DDOS攻击?
攻击方式
DDOS 的防范
$ iptables -I INPUT -s 192.168.0.2 -p tcp -j REJECT
# 限制 syn 并发数为每秒 1 次
$ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 限制单个 IP 在 60 秒新建立的连接数为 10
$ iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT
$ sysctl -w net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_max_syn_backlog = 1024
$ sysctl -w net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_synack_retries = 1
$ sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1
TIME. WAIT
状态的连接。
netstat -nat
查看TCP各个状态的数量;
lsof -i:port
可以检测到打开套接字的状况;
sar -n SOCK
查看tcp创建的连接数;
tcpdump -iany tcp port 6000
对tcp端口为6000的进行抓包。
[root@centos ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 192.168.10.58:22 13.136.182.140:23107 TIME_WAIT
tcp 0 48 192.168.10.58:22 13.136.182.140:61282 TIME_WAIT
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
| 状态 | 描述 |
|---|---|
| LISTEN | 等待来自远程TCP应用程序的请求 |
| SYN_SENT | 发送连接请求后等待来自远程端点的确认。TCP第一次握手后客户端所处的状态 |
| SYN-RECEIVED | 该端点已经接收到连接请求并发送确认。该端点正在等待最终确认。TCP第二次握手后服务端所处的状态 |
| ESTABLISHED | 代表连接已经建立起来了。这是连接数据传输阶段的正常状态 |
| FIN_WAIT_1 | 等待来自远程TCP的终止连接请求或终止请求的确认 |
| FIN_WAIT_2 | 在此端点发送终止连接请求后,等待来自远程TCP的连接终止请求 |
| CLOSE_WAIT | 该端点已经收到来自远程端点的关闭请求,此TCP正在等待本地应用程序的连接终止请求 |
| CLOSING | 等待来自远程TCP的连接终止请求确认 |
| LAST_ACK | 等待先前发送到远程TCP的连接终止请求的确认 |
| TIME_WAIT | 等待足够的时间来确保远程TCP接收到其连接终止请求的确认 |
TIME_ WAIT
状态相关的内核选项,比如采取下面几种措施:
net.ipv4.tcp_max_tw_buckets
,并增大连接跟踪表的大小
net.netfilter.nf_conntrack_max
。
net.ipv4.tcp_fin_timeout
和
net.netfilter.nf_conntrack_tcp_timeout_time_wait
,让系统尽快释放它们所占用的资源。
net.ipv4.tcp_tw_reuse
。这样,被
TIME_WAIT
状态占用的端口,还能用到新建的连接中。
net.ipv4.ip_local_port_range
。这样就可以支持更多连接,提高整体的并发能力。
fs.nr_open
和
fs.file-max
,分别增大进程和系统的最大文件描述符数;或在应用程序的
systemd
配置文件中,配置
LimitNOFILE
,设置应用程序的最大文件描述符数。
热 文 推 荐
☞骗了马云 10 亿被骂 4 年后,院士王坚留下 4 条人生启示