1.netfilter/iptables介绍数据包经过filter表的过程如图5-46所示。
通过使用iptables命令建立过滤规则,并将这些规则添加到内核空间过滤表内的链中。添加、删除和修改规则的命令语法如下:#iptables [-t table] command [match] [target](1)table[-ttable]有3种可用的表选项:filter、nat和mangle。该选项不是必需的,如未指定,则filter表作为默认表。filter表用于一般的数据包过滤,包含INPUT、OUTPUT和FORWARD链。nat表用于要转发的数据包,包含PREROUTING链、OUTPUT链和POSTROUTING链。mangle表用于数据包及其头部的更改,包含PREROUTING和OUTPUT链。(2)commandcommand是iptables命令中最重要的部分,它告诉iptables命令要进行的操作,如插入规则、删除规则、将规则添加到链尾等。常用的一些命令如表5-15所示。 示例:#iptables -A INPUT -s 192.168.0.10 -j ACCEPT该命令将一条规则附加到INPUT链的末尾,确定来自源地址192.168.0.10的数据包可以ACCEPT。#iptables -D INPUT --dport 80 -j DROP该命令从INPUT链删除规则。#iptables -P INPUT DROP该命令将INPUT链的默认目标指定为DROP。这将丢弃所有与INPUT链中任何规则都不匹配的数据包。3)matchmatch部分指定数据包与规则匹配所应具有的特征,比如源IP地址、目的IP地址、协议等。常用的规则匹配器如表5-16所示。
linxu防火墙文档示例:#iptables -A INPUT -p TCP#iptables -A INPUT -p ! ICMP#iptables -A OUTPUT -s 192.168.0.10#iptables -A OUTPUT -s ! 210.43.1.100#iptables -A INPUT -d 192.168.1.1#iptables -A OUTPUT -d ! 210.43.1.100(4)target目标是由规则指定的操作,常用的一些目标和功能说明如表5-17所示。 (5)保存规则#iptables-save> iptables-script#iptables-restoreiptables-script2.Linux防火墙的配置创建“iptables_example.sh”文件,内容如下所示,执行如下两条命令:#serviceiptables start //启动iptables#shiptables_example.sh //配置防火墙的过滤规则下面是对“iptables_example.sh”文件的说明。第3行:开启内核对数据包的转发功能。第6行:开启内核对DOS(syn-flood)攻击的防范功能。第8、9行:eth0(ppp0)外网接口,如果通过宽带带动局域网上网,则用ppp0。第10行:eth1内网接口。第16~24行:加载模块。第26~30行:清空filter、nat、mangle表中的规则。第32~37行:对filter和nat表设置默认过滤规则。第44~47行:允许dns连接。第57~65行:根据指定端口和IP地址来过滤掉数据包。第67行:通过字符串匹配来阻止内网用户访问一些网站(“fund”指包含该单词的网页受阻)。第69~73行:根据是否是通过宽带(ppp0)带动局域网上网来选择相应的规则。第80、81行:对局域网内电脑的MAC和IP地址进行绑定,可以防止内网用户随意修改IP地址。iptables_example.sh文件内容如下:1 #!/bin/bash2 3 echo 1 >/proc/sys/net/ipv4/ip_forward4 #echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts5 #echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all6 echo 1 >/proc/sys/net/ipv4/tcp_syncookies7 8 #INET_IF='ppp0'9 INET_IF='eth0'10 LAN_IF='eth1'11 LAN_IP_RANGE='192.168.0.0/24'12 IPT='/sbin/iptables'13 TC='/sbin/tc'14 MODPROBE='/sbin/modprobe'15 16 $MODPROBE ip_tables17 $MODPROBE iptable_nat18 $MODPROBE ip_nat_ftp19 $MODPROBE ip_nat_irc20 $MODPROBE ipt_mark21 $MODPROBE ip_conntrack22 $MODPROBE ip_conntrack_ftp23 $MODPROBE ip_conntrack_irc24 $MODPROBE ipt_MASQUERADE25 26 for TABLE in filter nat mangle ; do27 $IPT -t $TABLE -F28 $IPT -t $TABLE -X29 $IPT -t $TABLE -Z30 done31 32 $IPT -P INPUT DROP33 $IPT -P OUTPUT ACCEPT34 $IPT -P FORWARD DROP35 $IPT -t nat -P PREROUTING ACCEPT36 $IPT -t nat -P OUTPUT ACCEPT37 $IPT -t nat -P POSTROUTING ACCEPT38 39 #拒绝互联网用户访问内网40 $IPT -A INPUT -i $INET_IF -m state --stateRELATED,ESTABLISHED -j ACCEPT41 $IPT -A INPUT -p tcp --dport 22 -j ACCEPT42 $IPT -A INPUT -i $INET_IF -m state --stateNEW,INVALID -j DROP43 44 for DNS in $(grep ^n /etc/resolv.conf|awk'{print $2}'); do45 $IPT -A INPUT -p tcp -s $DNS --sport domain-j ACCEPT46 $IPT -A INPUT -p udp -s $DNS --sport domain-j ACCEPT47 done48 49 # anti bad scaning50 $IPT -A INPUT -i $INET_IF -p tcp --tcp-flagsALL FIN,URG,PSH -j DROP51 $IPT -A INPUT -i $INET_IF -p tcp --tcp-flagsALL ALL -j DROP52 $IPT -A INPUT -i $INET_IF -p tcp --tcp-flagsALL SYN,RST,ACK,FIN,URG -j DROP53 $IPT -A INPUT -i $INET_IF -p tcp --tcp-flagsALL NONE -j DROP54 $IPT -A INPUT -i $INET_IF -p tcp --tcp-flagsSYN,RST SYN,RST -j DROP55 $IPT -A INPUT -i $INET_IF -p tcp --tcp-flagsSYN,FIN SYN,FIN -j DROP56 57 $IPT -A INPUT -p tcp --sport 1080 -j DROP58 $IPT -A INPUT -p tcp --sport 1090 -j DROP59 $IPT -A INPUT -i $INET_IF -s 60.2.139.192/27-j DROP60 $IPT -A INPUT -i $INET_IF -s 60.3.246.162/32-j DROP61 62 $IPT -A FORWARD -p tcp --sport 1080 -j DROP63 $IPT -A FORWARD -p tcp --dport 1080 -j DROP64 $IPT -A FORWARD -s 60.2.139.192/27 -j DROP65 $IPT -A FORWARD -d 60.2.139.192/27 -j DROP66 67 $IPT -A FORWARD -m string --algo bm --string'fund' -j DROP68 69 if [ $INET_IF = 'ppp0' ] ; then70 $IPT -t nat -A POSTROUTING -o $INET_IF -s$LAN_IP_RANGE -j MASQUERADE71 else72 $IPT -t nat -A POSTROUTING -o $INET_IF -s$LAN_IP_RANGE -j SNAT --to-source 1.2.3.473 fi74 75 #no limit76 $IPT -A FORWARD -s 192.168.0.18 -m mac--mac-source 00-16-EC-A8-F1-A5 -j ACCEPT77 $IPT -A FORWARD -d 192.168.0.18 -j ACCEPT78 79 #MAC、IP地址绑定80 $IPT -A FORWARD -s 192.168.0.2 -m mac--mac-source 00-18-F3-30-86-45 -jACCEPT81 $IPT -A FORWARD -s 192.168.0.3 -m mac--mac-source 00-15-60-B9-94-8E -j ACCEPT82 83 $IPT -A FORWARD -d 192.168.0.2 -j ACCEPT84 $IPT -A FORWARD -d 192.168.0.3 -j ACCEPT