Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战
inux iptables防火墙详解 + 配置抗DDOS攻击策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能。在2.0内核中,防火墙操作工具叫:ipfwadm在2.2内核中,防火墙操作工具叫:ipchains在2.4以后的内核,防火墙操作工具叫:iptablesipfwadm 和 ipchains 比较老,已成历史版本,本章主要介绍Iptables一、iptable 操作命令参数详解-A APPEND,追加一条规则(放到最后)例如: iptables -A INPUT -j ACCEPT 允许所有访问本机 IP 的数据包通过-I INSERT,插入一条规则 例如: iptables -I INPUT -j DROP 在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条)-D DELETE,删除一条规则 iptables -D INPUT 3(按号码匹配) 删除 filter 表 INPUT 链中的第三条规则(不管它的内容是什么)-R REPLACE,替换一条规则例如: iptables -R INPUT 9 -j ACCEPT 将原来编号为 9 的规则内容替换为“-j ACCEPT”-P POLICY,设置某个链的默认规则例如: iptables -P INPUT DROP 设置 filter 表 INPUT 链的默认规则是 DROP-F FLUSH,清空规则例如iptables -F清空 filter 表中的所有规则-pprotocol 比对通讯协议例如iptables -A INPUT -p tcp比对通讯协议类型是否相符-s src, source例如iptables -I INPUT -s 172.16.0.201 -j DROP用来比对封包的来源 IP,可以比对单机或网络,比对网络时请用数字来表示屏蔽,例屏蔽:172.16.0.201 IP访问,所有数据都将丢弃--tcp-flags 比对 TCP例如iptables -p tcp --tcp-flags SYN,FIN,ACK SYNTCP状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对--icmp-type例如:iptables -A INPUT -p icmp --icmp-type 8用来比对 ICMP 的类型编号,可以使用代码或数字编号来进行比对。 案例ICMP类型是:8-m limit --limit例如iptables -A INPUT -m limit --limit 3/sec用来比对某段时间内封包的平均流量,上面的例子是用来比对每秒平均流量是否超过一次 3 个封包。配置文件位置:/etc/sysconfig/iptablesiptables 管理服务命令开启 service iptables start关闭 service iptables stop重起 service iptables restart 二、案例讲解本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动如何判断服务是否受攻击?1.ping测试服务是否丢掉? 掉包几钟可能原因: 你服务受攻击、机房上层线路受攻击、互联网上某个路由不稳定、机器服务/硬件问题(较少)2.可以搭建流量检查服务来监控服务网络流量 如:Cacti 、MRTG 2种较出名的流量监控 ,但都不是实时的!一般5分钟探测一次3.在linux上可以用一些脚本代码来监控网卡的实时流量、查看实时流量脚本 用vi创建个脚本文件,将以下代码复制进去.赋予权限,运行脚本监测#!/bin/bashwhile [ "1" ]doeth=$1RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')TXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')sleep 1RXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')TXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')clearecho -e "\t RX `date +%k:%M:%S` TX"RX=$((${RXnext}-${RXpre}))TX=$((${TXnext}-${TXpre}))if [[ $RX -lt 1024 ]];thenRX="${RX}B/s"elif [[ $RX -gt 1048576 ]];thenRX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')elseRX=$(echo $RX | awk '{print $1/1024 "KB/s"}')fiif [[ $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 查看网卡的流量时 rx是接收(receive) tx是发送(transport)目前流量正常 测试在另外台虚机上尝试用软件不停的访问本机站点,流量提升 假如你认为这流量已是不正常流量,可以用以下命令查看有哪些IP在连接本机80端口,然后进行屏蔽!netstat -ant | grep ":80" | awk '{printf "%s %s\n",$5,$6}' | sort 假如你认为0.201IP有可疑,想进行屏蔽,用以下命令屏蔽流进ipiptables -I INPUT -s 172.16.0.201 -j DROP解封屏蔽iptables -D INPUT -s 172.16.0.201 -j DROP 只屏蔽172.16.0 IP段访问本机80端口,其他端口可以正常,命令如下:iptables -I INPUT -p tcp --dport 80 -s 172.16.0.201/24 -j DROP 解封屏蔽iptables -D INPUT -p tcp --dport 80 -s 172.16.0.201/24 -j DROP 测试:用172.16.0.2尝试访问服务80端口 在添加的规则时,REJECT(拒绝)目标和 DROP(放弃)目标这两种行动有所不同。REJECT 会拒绝目标分组的进入,并给企图连接服务的用户返回一个 connection refused 的错误消息。DROP 会放弃分组,而对 telnet 用户不发出任何警告.命令添加的规则只是临时生效,重起iptables服务后将会恢复,永久进行保存命令service iptables save或者直接修改配置文件修改完/etc/sysconfig/iptables 防火墙配置文件,需要重起iptables服务才会生效 三、抗DDOS攻击完整策略与讲解默认的iptables规则是无法过滤DDOS攻击数据的,我们需要添加过滤规则实现iptables拥有抗DDOS的能力以下防火墙规则是本人真实linux 邮局服务器上的防火墙规则,曾受过100M的SYN DDOS流量攻击,本人服务器国际带宽只有20M,几乎使整个服务陷于瘫痪状态,后在iptables上增加了SYN过滤规则后,网络基本恢复正常,不掉包延时在100左右,正常情况延时45,但服务邮局服务收发没有任何问题!系统:Centos 5.5以上iptable 配置规则讲解:屏蔽 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远程登录,从其它计算机上禁止使用sshiptables -A INPUT -s 172.16.0.2 -p tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j DROP Iptables 防火墙是一种很强悍的防火墙,只要规则配置好,能大量提高系统安全性,要比windows下的很多防火墙都好,有兴趣可以试下!