1.iptables的概念理解
iptables全称的写法是Netfilter/iptables ,他们是信息包过滤系统的两个组件
Netfilter:是内核模块的实现,是linux核心中一个架构,运行在linux内核空间,作用是定义保存响应的规则。
iptables:是上层的一种操作工具,用来修改信息的过滤规则和其他配置,运行在用户空间
总结:若netfilter/iptables是一辆功能完整的汽车,netfilter就是汽车发动机以及车轮等部件,他可以让车发动行驶;iptables则是方向盘,刹车,油门,等控制汽车的行驶方向,速度。
表-链-规则
netfilter提供了一系列的表,每个表有若干个链组成,每条链有一条或多条规则组成。
三表五链四状态八动作
三表:
1.filter :这是netfilter默认的表,包含真正的防火墙过滤规则,内建了三条规则链:
INPUT:当一个数据包有内核中的路由计算确认为进入本机的包后,会通过INPUT链的检查
OUTPUT:应用于系统自身生成的数据包
FORWARD:应用与路由经过本地的数据包
2.nat :表包含源地址,目标地址,以及端口转换使用的规则。
内建的链有:
PREROUTING:用于修改目标地址(DNAT)
OUTPUT:路由之前修改本地产生的数据包
POSTROUTING:用于修改源地址(SNAT)
3.mangle:该表用在数据包的特殊变更操作,内建的链有:
PREROUTING ,INPUT,PORWARD,POSTROUTING,OUTPUT
五链
PREROUTING:数据包进入本机,进入路由表之前
INPUT:通过路由表,目的为本机
OUTPUT:由本机产生向外转发
FORWARD:通过路由表后目的不是本机
POSTROUTING:通过路由表发送到网卡接口前
四状态:
NEW:第一次发送链接请求的数据包的状态就是NEW
ESTABLISHED:建立连接后,继续通信的数据包
RELATED:和现有联机相关的新连接的数据包,如ftp用21端口传递命令,其它端口传递数据
INVALID:无效的数据包,或不能被识别属于哪个连接或没任何状态,这种状态的数据包一般会被丢弃
八动作:
ACCEPT:接受数据包
DROP:丢弃数据包
REDIRECT:将数据包重新转向到本机或另一台主机的某一端口
REJECT:拦截该数据包,并发回封包通知对方
SNAT:源地址转换,改变数据包的源地址在nat表的POSTROUTING链进行该动作
DNAT:目标地址转换,在nat表的PREROUTING链进行该动作
MASQUERADE:ip伪装
LOG:日志功能
iptables的工作流程:(只对nat表和filter表)
1.数据包进入防火墙后,先进入nat表的PREROUTING链;如有规则就进行目标地址的转换
2.数据包经过路由判断包是发送给本机还是向其它网络转发
3.如果是转发就发送给filter表的FORWARD链进行过滤,然后发给nat表的POSTROUTING链根据需要可能会进行网络地址转换,修改数据包的源地址,最后数据包发送给网卡,转发给外部网络
4.如果目的为本机,数据包进入filter表的INPUT链进行相应的操作;再进入nat的POSTROUTING链向外发送
详细语法
iptables [-t 表名] <-A|I|D|R>链名[规则号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip地址|源子网] [--sport 源端口号] [-d 目标ip地址|目标子网] [--dport 目标端口号] <-j 动作>