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 参数。