|
在介绍OpenStack安全组前先简单介绍下iptables,其实iptables只是一个用户空间的程序,真正干活的其实是Linux内核netfilter,通过iptables创建新规则,其实就是在netfilter中插入一个hook,从而实现修改数据包、控制数据包流向等,对iptables使用方法不熟悉的可以参考图文并茂理解iptables[1].
简单地说,iptables就是通过一系列规则条件匹配执行指定的动作,因此一条规则就是由条件+动作构成,条件比如源IP地址、四层协议、端口等,动作如拒绝、通过、丢弃、修改包等,动作通常通过-j参数指定。
比如拒绝192.168.1.2访问目标22端口,只需要添加如下iptables规则:

如上:
-
-t指定表(table),如果把所有的规则混放在一起肯定会特别乱,因此iptables根据功能划分为不同的表,过滤包的放在filter表,做NAT的放nat表等,还有raw表、mangle表、security表,共5个表。如果不指定该参数,默认会选中filter表。
-
-I表示insert操作,在最前面插入这条规则,相对应的还有-A参数,表示从末尾追加规则,-I、-A还可以在后面指定索引位置,将规则插入到指定的位置。
-
INPUT表示链名称,链可以看做是一个链表,链表元素为规则。iptables一共可操纵5条链,分别为PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。需要注意的是,所有的表都是共享这5条链的,当然并不是所有的表都同时需要这5条链,比如filter表就没有PREROUTING、POSTROUTING。如果多个table都在如上链上插入了规则,则根据raw -> mangle -> nat -> filter的顺序执行。
-
-s、-p、--dport都是条件,多个条件是与的关系,即只有满足指定的所有条件才能匹配该规则,如上-s指定了源地址IP为192.168.1.2,-p指定了协议为TCP,--dport指定了端口22,即只有源地址访问目标的22 TCP端口才能匹配这条规则。
-
-j指定了行为,当然官方的叫法是目标(target),这里DROP表示丢弃包。
1.2 iptables匹配条件
除了以上的-s、-p、--dport等参数作为匹配条件外,iptables还支持如-d匹配目标IP地址,-i、-o分别指定从哪个网卡进入的以及从哪个网卡出去的。当然这些匹配条件还不够,甚至都不支持匹配MAC地址。iptables为了满足不同的需求,通过扩展模块支持更多的匹配条件,主要分为如下两类:
-
功能加强型:比如前面的--dport参数只能匹配单个port或者连续的port,如果需要匹配多个不连续的port,则不得不通过添加多条规则实现。mulport扩展模块允许同时指定多个port,通过逗号分隔。再比如ip-range模块,支持指定ip地址段。
-
新功能:比如mac模块支持匹配源MAC地址。time模块支持通过时间段作为匹配条件,比如实现每天0点到8点不允许外部SSH。
(编辑:信阳站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|