Iptables防火墙(配置防DDOS攻击)



 一、案例讲解

本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动
如何判断服务是否受攻击?
(1)ping测试服务是否丢掉? 丢包的几种可能原因: 你服务受攻击、机房上层线路受攻击、互联网上某个路由不稳定、机器服务/硬件问题(较少)
(2)可以搭建流量检查服务来监控服务网络流量 如:Cacti 、MRTG 2种较出名的流量监控 ,但都不是实时的!一般5分钟探测一次

 二、在linux上可以用一些脚本代码来监控网卡的实时流量

#查看实时流量脚本 
#用vim创建个脚本文件,将以下代码复制进去.赋予权限,运行脚本监测
[root@localhost ~]vim /opt/traffic.sh
#!/bin/bash
while [ "1" ]
do
eth=$1
RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
sleep 1
RXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
clear
echo  -e  "\t RX `date +%k:%M:%S` TX"
RX=$((${RXnext}${RXpre}))
TX=$((${TXnext}${TXpre}))
if [[ $RX -lt 1024 ]];then
RX="${RX}B/s"
elif [[ $RX -gt 1048576 ]];then
RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
else
RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
fi
if [[ $TX -lt 1024 ]];then
 TX="${TX}B/s"
 elif [[ $TX -gt 1048576 ]];then
 TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
 else
 TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
fi
 
echo -e "$eth \t $RX   $TX "
done
[root@localhost ~]chmod +x /opt/traffic.sh

 三、测试验证



  

上图是执行脚本后显示服务器流量的状态
执行命令如下:
[root@loaclhost ~]#/opt/./traffic.sh
查看网卡的流量时   
rx是接收(receive)    tx是发送(transport)
目前流量正常

  我们可以使用软件在另外一台机器上不停的访问本站点我们就可以看到下图流量的变化



 

假如你认为这流量已是不正常流量,可以用以下命令查看有哪些IP在连接本机80端口,然后进行屏蔽!

[root@loaclhost ~]#netstat -ant | grep ":80" | awk '{printf "%s %s\n",$5,$6}' | sort

假如你认为192.168.0.123 IP有可疑,想进行屏蔽,用以下命令

屏蔽流进IP:
[root@loaclhost ~]#iptables -I INPUT -s 192.168.0.123 -j DROP
解封IP:
[root@loaclhost ~]#iptables -D INPUT -s 192.168.0.123 -j DROP
只屏蔽192.168.0 IP段访问本机80端口,其他端口可以正常,命令如下:
iptables -I INPUT -p tcp --dport 80 -s 192.168.0.123/24 -j DROP
解封屏蔽:
iptables -D INPUT -p tcp --dport 80 -s 192.168.0.123/24 -j DROP
命令添加的规则只是临时生效,重起iptables服务后将会恢复,永久进行保存命令service iptables save或者直接修改配置文件
修改完/etc/sysconfig/iptables 防火墙配置文件,需要重启iptables服务才会生效

四、防DDOS攻击完整策略与讲解

默认的iptables规则是无法过滤DDOS攻击数据的,我们需要添加过滤规则实现iptables拥有抗DDOS的能力



 

以下是iptables 配置规则讲解:

屏蔽 SYN_RECV 的连接
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT

限制IP碎片,每秒钟只允许100个碎片,用来防止DoS攻击
-A FORWARD -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT

限制ping包每秒一个,10个后重新开始
-A FORWARD -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
 
限制ICMP包回应请求每秒一个
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT

此处自定义一个表
-A FORWARD -j RH-Firewall-1-INPUT

完全接受 loopback interface 的封包
-A RH-Firewall-1-INPUT -i lo -j ACCEPT

允许主机接受 ping
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

网际网路印表机服务 (可以删除)
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT

允许连线出去后对方主机回应进来的封包
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

允许防火墙开启指定端口 (本服务器规则开了常用端口 22 21 80 25 110 3306等)
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport port -j ACCEPT

 限制SSH登陆
只允许在172.16.0.2上使用ssh远程登录,从其它计算机上禁止使用ssh
iptables -A INPUT -s 172.16.0.2 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP
Iptables 防火墙是一种很强悍的防火墙,只要规则配置好,能大量提高系统安全性,要比windows下的很多防火墙都好,有兴趣可以试下!

  

猜你喜欢

转载自kangh.iteye.com/blog/2298764