iptables入门:iptables简介和命令

2016-10-20 阅读: iptables

iptables是Linux中基于内核的防火墙,功能十分强大。 iptables工作在网络层,不需要把数据发送到用户空间,在系统内核空间中进行数据过滤可以保证数据处理效率。 当数据包到达iptables之后,如果MAC地址相符,就会由内核中的相应驱动程序接收,通过一系列操作决定将数据包发送给本地程序或转发到其他主机,或进行其他操作。 iptables由一系列表(table)组成,表再由一系列链(chain)组成,当数据包到达iptables之后,就会基于规则按一定顺序穿越不同的表和链。

1.数据报的流向

iptables数据包的流向主要有以下两种:

  • PREROUTING -> FORWARD -> POSTROUTING
  • PREROUTING -> INPUT -> localhost(本机内部传输) -> OUTPUT -> POSTROUTING

iptables-data-direction.jpg

iptables根据数据包的流向和对数据包的处理使用不同的规则表,如:filter表,nat表,mangle表。

2.iptables的表

2.1 filter表

filter表是默认的表,用来过滤数据包。filter表内建3个链:

  • INPUT作用于进入本机的数据包(即入站)
  • OUTPUT作用于本机送出的包(即出站)
  • FORWARD作用于经过本机与本机无关的包(即路由)

2.2 nat表

nat表用来做NAT(Network Address Traslation),即网络地址转换,转换包的源或目标地址。nat表包含源地址、目标地址以及端口转换的使用规则。 nat表内建3个链:

  • PREROUTING用于改变到达防火墙的包的目标地址,在路由前修改目的地址实现DNAT
  • OUTPUT用于改变本地产生的包的目标地址
  • POSTROUTING用于在包要离开时改变其源地址

NAT的操作包含以下几类:

  • DNAT( Destination Network Address Translation)即目标地址转换,将对防火墙的访问重定向到其他主机上,即改变数据包的目标地址,使其路由到其他主机
  • SNAT 即源地址转换,改变数据包的源地址

2.3 mangle表

mangle表用来给数据打标记,然后根据标记去操作那些包,包含用于设置特殊的数据包路由标志的规则,这些标志随后可以被filter表中的规则检查。 mangle表内建的链包括PREROUTING, INPUT, FORWARD, POSTROUTING, OUTPUT.

2.4 raw表和security表

iptables还包含raw表和security表,这里不展开了。可以man iptables查看关于这两个表的介绍。

3. iptables命令

iptables命令的语法如下:

iptables -t [表名]  <-A | I | D | R> 链名 [规则编号] [-i | o 网卡名称] [-p 协议] [-s 源ip地址 | 源子网] [--sport 源端口] [-d 目标ip地址 | 目标子网] [--dport 目标端口] <-j target>
  • -A新增一条规则,该规则增加到规则列表的最后一行,使用该参数时不能使用规则编号
  • -I插入一条规则,如果指定了规则编号,原本该位置上的规则会向后顺序移动,如果没有指定规则编号,将在第一条规则前插入
  • -D从规则列表中删除一条规则,可以输入完整的规则进行删除,也可以直接指定规则编号进行删除
  • -R替换某条规则,规则被替换时不会改变其顺序,必须指定要替换的规则编号
  • 规则编号 规则列表的第一条规则的编号为1
  • -i指定数据包进入的网卡,-o指定数据包输出的网卡
  • -p指定规则应用的协议,可以是tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
  • -s指定源主机的IP地址或子网地址,格式为address[/mask][,...]
  • -d指定指定目标主机的IP地址或子网地址,格式为address[/mask][,...]
  • -j target--jump target决定符合条件的包到何处去。target可以指定另一个链,常用的Target/Jumps包含:
    • ACCEPT表示允许包,即满足匹配条件的包被允许,并且不会再匹配当前链中的其他规则或同一个表内的其他规则,但这个包还会通过其他表中的链
    • DROP表示丢弃包,即将符合条件的包丢弃,不会再向下走。效果就是包被阻塞,不会像发送者返回任何信息。
    • REJECT表示拒绝包,REJECT和DROP类似,在阻塞包时会向发送者返回错误信息。
    • REDIRECT表示将数据包重定向到本机或另一台主机的某个端口,通常用来实现透明代理或对外开放内网的某些服务
    • SNAT源地址转换,即改变数据包的源地址
    • DNAT目标地址转换,即改变数据包的目标的地址
    • LOG将符合规则的数据包相关规则信息记录在日志中,便于管理员分析问题

3.1 链的默认策略(Policy)

当数据包不符合链中的任一规则时,将会使用该链预定义的默认策略(Policy)处理数据包。

iptables -nvL
Chain INPUT (policy ACCEPT 249M packets, 162G bytes)
 pkts bytes target     prot opt in     out     source               destination                                                       

Chain FORWARD (policy ACCEPT 8248K packets, 4343M bytes)
 pkts bytes target     prot opt in     out     source               destination 
......

上面命令的输出filter表INPUT链和FORWARD链的默认策略都是ACCEPT。

使用下面的命令定义默认策略:

iptables [-t 表名] <-P> <链名> <动作>

-P即定义默认策略Policy。

例如:

iptables -P FORWARD ACCEPT

3.2 查看规则

查看规则的命令语法:

iptables [-t 表名] <-L> [链名]

查看filter表的规则:

iptables -nvL

查看nat表的规则:

iptables -t nat -nvL

3.3 添加规则

filter表增加一条规则:

iptables -A INPUT -p tcp -s 192.168.0.15  --sport 1234 -d 192.168.1.10 --dport 80 -j ACCEPT

3.4 删除规则

-D指定删除规则,必须与添加的规则完全一致:

iptables -D INPUT -p tcp -s 192.168.0.15  --sport 1234 -d 192.168.1.10 --dport 80 -j ACCEPT

还通过行号删除:

iptables -nvL --line-numbers

iptables -D INPUT <line-number>

3.5 清除规则和计数

iptables [-t 表名] <-F | Z>

删除filter表所有规则

iptables -F

将filter表数据包和流量计数清零:

iptables -Z

参考

标题:iptables入门:iptables简介和命令
本文链接:https://blog.frognew.com/2016/10/linux-iptables.html
转载请注明出处。

目录