iptables5 表 5 链及语法

Iptables 是 linux 上特有的防火墙机制,其功能非常强大

netfilter5 表 5 链介绍

  • filter 这个表主要用于过滤包的,是系统预设的表。内建三个链 INPUT、OUTPUT 以及 FORWARD。INPUT 作用于进入本机的包;OUTPUT 作用于本机送出的包;FORWARD 作用于那些跟本机无关的包。

  • nat 主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT 链改变本地产生的包的目的地址。POSTROUTING 链在包就要离开防火墙之前改变其源地址。

  • mangle 这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。

还有两个不常用的表:raw 和 security,在此不多讲述。

iptables 语法

iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

  • 命令语法
    iptables [选项][参数]

  • 命令选项
    -n:不针对 IP 反解析主机名
    -v:显示更详细的信息
    -t:指定表(iptables 命令默认作用于 filter 表)
    -L:显示信息
    -F:清空所有规则
    -A/D:=add/delete,添加 / 删除一条规则
    -I:插入一条规则
    -p:指定协议,可以是 tcp,udp 或 icmp
    –sport:跟 -p 一起使用,指定源端口
    –dport:跟 -p 一起使用,指定目标端口
    -s:指定源 IP(可以是一个 IP 段)
    -d:指定目的 IP(可以是一个 IP 段)
    -j:后面跟动作(ACCEPT 表示允许包;DROP 表示丢掉包;REJECT 表示拒绝包)
    -i:指定网卡
    -Z:把包以及流量计数器清零
    -P:=pre,预设策略

实战

  • iptables 命令选项输入顺序
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

  • 查看规则
[root@localhost ~]# iptables -t nat -nvL

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
iptables规则配置文件:/etc/sysconfig/iptables

说明:-t 后面跟表名,-nvL 即查看该表的规则,其中 -n 表示不针对 IP 反解析主机名;-L 表示列出的意思;而 -v 表示列出的信息更加详细。如果不加 -t ,则打印 filter 表的相关信息。


  • 清空规则
[root@dl-001 ~]# iptables -F
[root@dl-001 ~]# iptables -Z	//把包以及流量计数器清零

说明: -F 是把当前规则清除,但这个只是临时的,重启系统或者重启 iptalbes 服务后还会加载已经保存的规则,所以需要使用 /etc/init.d/iptables save 保存一下规则


  • 增加一条规则
# iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP

说明:这就是增加了一条规则,省略 -t 所以针对的是 filter 表。-A 表示增加一条规则,另外还有 -I 表示插入一条规则,-D 删除一条规则;后面的 INPUT 即链名称,还可以是 OUTPUT 或者 FORWORD;-s 后跟源地址;-p 协议(tcp, udp, icmp); –sport/–dport 后跟源端口 / 目标端口;-d 后跟目的 IP(主要针对内网或者外网);-j 后跟动作(DROP 即把包丢掉,REJECT 即包拒绝;ACCEPT 即允许包)。


  • 删除一条规则方法 1
root@adai003 ~]# iptables -D INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP

说明: 要删除一条规则时,必须和插入的规则一致,也就是说,两条 iptables 命令除了 -A/I 和 -D 不一样外,其他地方都一样。


  • 删除一条规则方法 2

有时候你的服务器上 iptables 过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。其实有一种比较简单的方法:

[root@localhost ~]# iptables -nvL --line-numbers	//查看规则序号
Chain INPUT (policy ACCEPT 133 packets, 9740 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  eth0   *       192.168.1.0/24       0.0.0.0/0

删除某一条规则使用如下命令:

[root@localhost ~]# iptables -D INPUT 1

说明:-D 后跟链名,然后是规则 num,这个 num 就是查看 iptables 规则时第一列的值。再次查看刚才的规则,已经没有了:

[root@localhost ~]# iptables -nvL --line-numbers

说明:iptables 还有一个选项经常用到,-P(大写)选项,表示预设策略。用法如下:

[root@localhost ~]# iptables -P INPUT DROP

说明:-P 后面跟链名,策略内容或者为 DROP 或者为 ACCEPT,默认是 ACCEPT。注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉。

这个策略一旦设定后,只能使用 iptables -P INPUT ACCEPT 才能恢复成原始状态,而不能使用 -F 参数。