netfilter/iptables 小结
1.netfilter是防火墙在内核中的框架,iptables是用于管理netfilter的工具。netfilter在系统中定义了五个监测点对网络中的数据进行检测。这五个点分别是input,output,prerouting,forward,postrouting。
见下图
解释:
prerouting:数据到达防火墙后首先需要判断是进行本地的接受还是路由,prerouting完成这个工作。
fowrad: 对于需要进行路由处理的数据进行路由转发
postrouting:根据规则链的目标进行数据包的发送或者丢弃,完成路由功能。
input: 用于对向上层传递的数据进行处理
output: 对于需要从应用层向下传的数据进行处理。
这些规则链由于在完成不同的功能时可能需要不同的组合,因而把他们放在了三个不同的表中filter,Nat,Mange。
filter表包含input,forward,output三个规则链,用于数据过滤
nat表包含prerouting,postrouting,input,output四个规则链,用于完成数据过滤
mangele表包含output,postrouting用于完成对数据包指定标志的修改。
下面是iptables的语法总结
iptables -t 表名 动作 规则链 匹配方式 扩展匹配 符合这条规则的包的处理方式
NAT -A INPUT -p(tcp/udp/icmp) --sport -j
MANGLE -D OUTPUT -src --dport ACCEPT
FILTER -R FORWARD -dst --tcp-flags DROP
-I PREROUTING -i --mac-source REJECT
-L POSTROUTING -o REDIRECT
-F DNAT
-Z SNAT
-X
-P
-E
动作解释:
-A :在所选择的链中添加一条或者多条规则
-D :在所选择的链中删除一条或者多条规则,可以为规则的序列号也可以是规则
-R :替换所选择链中的一条规则
-I :向所选择的链中插入一条或者多条规则,默认插入链的头部
-L :显示所选择链中的规则
-F :清空所选择的链
-Z :清空计数器
-N :创建用户的规则链
-X :删除用户自定义的规则链
-P :指定规则链的默认规则
-E :重命名规则链
匹配方式解释:
-p :指定要待检测包的协议,可以是tcp,udp,icmp中的一个或者全部(all)。!表示取反
-src:指定源地址,可以是主机名,网络名和下角切的ip地址。!表示取反
-dst:指定目标地址,同src
-i :指定数据是从哪个接口进入的。!表示取反。如果接口名后边跟一个+则表示所有以该接口名开头的数据都会被匹配
-o :输出接口的名称,同-i
扩展匹配解释:
-p
如果匹配tcp协议,则可以指定
--sport:指定源端口号或者范围,可以是0-65535
--dport:指定目的端口号或者范围
--tcp-flags:匹配tcp协议的六个标志位。它由两部分组成,第一部分是要检查的标志位,第二部分是不许被设置的标志位。tcp的六个标志位是:syn,ack,fin,rst,urg,psh。举例 syn,ack,fin,rst syn表示只匹配那些syn标志被设置,而ack,find和rst标记没有被设置的包。
如果匹配udp协议,则可以指定
--sport:同tcp
--dport:同tcp
如果匹配icmp协议,则可以指定
--icmp-type:指定icmp协议的类型,!取反。
如果匹配mac,则可以指定
--mac-source:网卡的mac地址,格式“xx:xx:xx:xx:xx:xx”,它只对以太网的prerouting,forward,input有效。
处理方式解释:
-j :目标跳转,指定规则的目标,也就是说如果包匹配做什么
REJECT:拒绝数据包并返回一个错误
DROP: 直接丢弃数据包
SNAT: 做源地址转换
DNAT: 做目标地址转换,只能用于nat表的postrouting。
MASQUERADE:用于动态获取ip地址的地址转换。只能用于nat表的postrouting。
REDIRECT:只能用于nat表的prerouting和output。它修改包的目标地址而发给自身。