iptables编写规则
[-t 表名]
:该规则所操作的哪个表,可以使用filter、nat等,如果没有指定则默认为filter-A
:新增一条规则,到该规则链列表的最后一行-I
:插入一条规则,原本该位置上的规则会往后顺序移动,没有指定编号则为1-D
:从规则链中删除一条规则,要么输入完整的规则,或者指定规则编号加以删除-R
:替换某条规则,规则替换不会改变顺序,而且必须指定编号。-P
:设置某条规则链的默认动作-nL
:-L
、-n
,查看当前运行的防火墙规则列表chain名
:指定规则表的哪个链,如INPUT、OUPUT、FORWARD、PREROUTING等[规则编号]
:插入、删除、替换规则时用,--line-numbers
显示号码[-i|o 网卡名称]
:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出[-p 协议类型]
:可以指定规则应用的协议,包含tcp、udp和icmp等[-s 源IP地址]
:源主机的IP地址或子网地址[--sport 源端口号]
:数据包的IP的源端口号[-d目标IP地址]
:目标主机的IP地址或子网地址[--dport目标端口号]
:数据包的IP的目标端口号-m
:extend matches,这个选项用于提供更多的匹配参数,如:
- -m state --state ESTABLISHED,RELATED
- -m tcp --dport 22
- -m multiport --dports 80,8080
- -m icmp --icmp-type 8
<-j 动作>
:处理数据包的动作,包括ACCEPT、DROP、REJECT等
规则链
INPUT
链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。OUTPUT
链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。FORWARD
链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。PREROUTING
链:在对数据包作路由选择之前,应用此链中的规则,如DNAT。POSTROUTING
链:在对数据包作路由选择之后,应用此链中的规则,如SNAT。
防火墙处理数据包的方式:
ACCEPT
:允许数据包通过DROP
:直接丢弃数据包,不给任何回应信息-
REJECT
:拒绝数据包通过,必要时会给数据发送端一个响应的信息。 -
SNAT
:源地址转换。在进入路由层面的route之前,重新改写源地址,目标地址不变,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机。解决内网用户用同一个公网地址上网的问题。MASQUERADE
,是SNAT的一种特殊形式,适用于像adsl这种临时会变的ip上 -
DNAT
:目标地址转换。和SNAT相反,IP包经过route之后、出本地的网络栈之前,重新修改目标地址,源地址不变,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机。可以隐藏后端服务器的真实地址。REDIRECT
:是DNAT的一种特殊形式,将网络包转发到本地host上(不管IP头部指定的目标地址是啥),方便在本机做端口转发。 -
LOG
:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
除去最后一个LOG
,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编写的规则顺序极其关键。