linux防御攻击

来源:互联网 发布:为什么学java 编辑:程序博客网 时间:2024/06/06 00:24

一、服务器可能遭受的攻击

1、SYN/ACK Flood攻击(半连接攻击)
主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的未连接队列被长时间占用并且资源耗尽,而正常的SYN请求被丢弃。由于源都是伪造的故追踪起来比较困难。缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。
 
2、tcp全连接攻击
通过许多僵尸主机不断地与受害服务器建立大量TCP连接,客户端仅仅“连接”到服务器,然后再也不发送任何数据,直到服务器超时后处理或者耗尽服务器的处理进程。
缺点是需要很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此此种DDOS攻击方式容易被追踪。
 
3、CC攻击
攻击者控制某些主机不停地发大量正常数据包给对方服务器,造成服务器资源耗尽,一直到宕机崩溃。由于这种攻击方式是正常的请求,暴露了正常的源IP地址,禁止这些ip就可以了。
 
4、慢速攻击
1)http服务器中,攻击者与服务器建立连接,只提交部分数据,导致服务器持续等待,通过控制僵尸主机或通过多线程进程来不断增加这样的连接,就会使服务器的资源被耗尽,导致服务器宕机或不再接受新的请求。
2)tcp服务器中,攻击者与服务器建立连接并请求数据,采用调整tcp协议中的滑动窗口的大小,来对服务器单词发送的数据大小进行控制,当tcp的window size过小或为0时,迫使服务器等待并不断发送报文探测客户端窗口大小,因此,这样的连接不断增加会使服务器无法访问。



二、防御方法

1、设置内核联网功能
net.ipv4.tcp_max_syn_backlog=102400 //设置监听队列
net.ipv4.tcp_syncookies=1 //设置syn cookies
net.ipv4.tcp_synack_retries=3 //设置syn ack重传次数
net.ipv4.tcp_syn_retries=3 //设置syn 重传次数
net.ipv4.tcp_keepalive_time=1800 //设置无数据发送的存活时间
net.ipv4.tcp_keepalive_probes=5 //tcp发送keepalive探测该链接已经断开的次数
net.ipv4.tcp_keepalive_intvl=15 //设置探测消息发送的频率(秒为单位)
net.ipv4.tcp_retries1=3 //设置tcp连接请求放弃前重传次数
net.ipv4.tcp_retries2=5 //设置tcp连接丢弃前重传次数
net.ipv4.tcp_abort_on_overflow=1 //设置进程溢出时,中断连接

设置方法如:sysctl -w net.ipv4.tcp_syncookies=1

查看方法:sysctl -a | grep tcp


2、设置iptables初始防御功能
//允许外网每个IP最多50个tcp连接,超过的丢弃
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP 
//每个ip每秒只能连接10次,超过的拒接
iptables -A INPUT -p tcp -m state --state NEW -m recent --name SSHPOOL --set
iptables -A INPUT -p tcp -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 1 --hitcount 10 -j DROP
//抵御DDOS ,允许外网最多5000个初始连接,然后服务器每秒新增5000个(根据服务器性能设置,在不影响正常处理的情况下)
iptables -A INPUT -p tcp --syn -m limit --limit 5000/s --limit-burst 5000 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
//限制icmp连接
iptables -A INPUT -p icmp -m limit --limit 100/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

3、主动查看,根据ip限制

1)检查每个ip到服务器的连接数,并排序
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

2)检查每个ip的ESTABLISHED或SYN_RECEIVED的连接数,并排序
netstat -ntu | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n
netstat -ntu | grep SYN_RECEIVED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n

3)检查对口80的每个ip的连接数,并排序
netstat -plan | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n

检查到的所有连接数量异常的ip地址,可以使用一下方式屏蔽
将对方ip加入iptables进行防御($IPADDR填入实际ip)
Iptables –I INPUT –s $IPADDR –j DROP
(删除该条规则可用–D替换-I : Iptables –D INPUT –s $IPADDR –j DROP)


原创粉丝点击