嵌入式Linux可用的防火墙——iptables:实现ip白名单、mac地址白名单

  • A+
所属分类:linux技术
摘要

  iptables是linux系统下的一个功能强大的模块,不仅可以用作防火墙,还可以实现NAT等众多路由功能。iptables的容器有很清晰的层次关系:

  iptables是linux系统下的一个功能强大的模块,不仅可以用作防火墙,还可以实现NAT等众多路由功能。iptables的容器有很清晰的层次关系:

  1. iptables是表的容器,iptables包含表(4张表)

  2. 表是链的容器,每个表都包含若干个链

  3. 链是规则的容器,真正的过滤规则是属于链里面的

  iptables是采用数据包过滤机制工作的,它会对请求的数据包的包头数据进行分析,并根据预先设定的规则来进行匹配,决定是否可以进入主机,流程如下:

嵌入式Linux可用的防火墙——iptables:实现ip白名单、mac地址白名单

 

   从上图不难看出,防火墙是一层层过滤的,按照配置规则的顺序从上到下,从前到后进行过滤。如果匹配上规则,即明确了是阻止还是通过,此时数据包就不再往下匹配新规则了。否则一直向下匹配,直到匹配到默认规则,得到明确的阻止或通过;防火墙的默认规则是对应链的所有规则执行完后才会执行的。

  iptables根据功能和表的定义划分包含三个表,filter,nat,mangle,其每个表又包含不同的操作链(Chains)。要使用iptables实现ip白名单、mac地址白名单,只需使用filter表。filter表包含的操作链有三个:INPUT、FORWARD、OUTPUT:

  1.INPUT负责过滤所有目标地址是本机地址的数据包,即进入主机的数据包

  2.FORWARD负责转发流经主机的数据包

  3.OUTPUT负责处理所有源地址是本机地址的数据包,即主机发出的数据包

  防火墙功能主要设定INPUT链的规则。首先加载如下模块到Linux内核:

modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack 连接跟踪 modprobe ip_conntrack_ftp 连接跟踪 modprobe ip_nat_ftp modprobe ipt_state

  iptables的语法如下:

iptables -P INPUT DROP iptables [-A/-I num] INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT  -A: 添加规则到指定链的结尾,最后一条 -I num: 添加规则到指定链的指定行,num默认为1,即添加到第一条 -t: 指定表,不指定默认为filter -p: 指定协议(all,tcp,udp,icmp),默认为all --dport: 指定端口 -j: 处理的行为, ACCEPT, DROP, REJECT(最好使用drop而非reject,因为'拒绝'会返回给用户信息) -P: 设置默认策略 -s: 匹配来源地址IP/MASK -i: 接网卡名称,匹配从这块网卡流入的数据 -o: 接网卡名称,匹配从这块网卡流出的数据     #setting for loopback interface     iptables -A INPUT -i lo -j ACCEPT     iptables -A OUTPUT -o lo -j ACCEPT  -m mac --mac-source XX:XX:XX:XX:XX:XX -m state --state NEW/ESTABLISHED/RELATED/INVALID    //可以用,连接多个

  可以看到,实例的第二句即是将某个MAC地址加入白名单中。第一句则是将INPUT的默认规则设为DROP,以屏蔽来自其它MAC消息。若要删除规则,可使用以下方法:

iptables -F    //清除所有规则 iptables -D INPUT -p tcp --dport 8080 -j DROP(删除指定链中匹配的规则) /etc/init.d/iptables restart (用iptables命令行配置的命令都是临时生效) iptables -D INPUT 规则序号