防火墙对于系统安全至关重要,iptables则是防火墙的管理工具 iptables帮助我们定义各种验证规则,实现对网络的验证控制 数据包的传输过程 数据包来到防火墙后,传输过程会经历一系列验证链: (1)prerouting 数据包作路由选择前 (2)forward 转发数据包的时候 (3)input 数据包进入系统的时候 (4)output 系统发出数据包的时候 (5)postrouting 数据包作路由选择后 过程说明
从外界到达防火墙的数据包,先被 prerouting 规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处) 如果数据包的目标是本机,内核将其传给input链处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(如Apache服务器)进行响应,响应完成后如果需要发出数据包,就交给output规则链,验证通过之后进行路由选择,然后传递给 postrouting 规则链(是否修改数据包的地址等)进行处理 如果数据包的目标地址是其它外部地址,则内核将其传递给 forward 链进行处理(是否转发或拦截),然后再交给postrouting 规则链(是否修改数据包的地址等)进行处理 iptables的规则表 iptables从名字就可以看出,它还有个重要的概念,就是验证表 iptables内置了4个表,每个表中定义了各个规则链中的具体验证规则 这几个表有优先级,当数据包到达某个规则链时,就会按照表的优先级,取得表中定义的此验证链的规则 4个表及优先级如下
iptables的管理 (1)查看已添加的规则 iptables -L -n (2)清除已有规则 iptables -F iptables -X iptables -Z (3)添加规则 先看几个示例,然后通过示例看各项具体含义 #允许所有本机向外的访问 iptables -A OUTPUT -j ACCEPT # 允许访问22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT #屏蔽单个IP的命令是 iptables -I INPUT -s 123.45.6.7 -j DROP #减少不安全的端口连接 iptables -A OUTPUT -p tcp --sport 31337 -j DROP iptables命令格式 iptables table command chain parameter action table 指定要操作哪个规则表 通过 -t 指定,没指定时默认为 filter 表 command 定义如何对规则进行管理 常用命令有 -A : 追加,在当前链的最后新增一个规则 -I num : 把当前规则插入为第几条,没有num时插入头部 -R num : Replays替换/修改第几条规则 -D num : 删除,明确指定删除第几条规则 chain 指定接下来的规则是在哪个链上的 parameter 指定匹配规则 常用参数 -s:指定作为源地址匹配,必须是IP -d:表示匹配目标地址 -p:用于匹配协议(TCP/UDP/ICMP) --dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口 --sport:指定源端口 action 指定如何进行处理 -j ACCEPT 同意接受 -j DROP 悄悄放弃
-j REJECT 明确拒绝