简介
iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
查看 iptables:
1 | which iptables |
内核会按照顺序依次检查 iptables 防火墙规则:
- 如果发现有匹配的规则目录,则立刻执行相关动作,停止继续向下查找规则目录;
- 如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。
使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后,
使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则。
语法:
iptables (选项) (参数)
选项:
1 | -t<表>:指定要操纵的表; |
iptables 命令常用匹配参数及各自的功能:
1 | 参 数 功 能 |
iptables 命令选项输入顺序:
1 | iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 |
表名包括:
1 | raw:高级功能,如:网址过滤。 |
规则链名包括:
1 | INPUT链:处理输入数据包。 |
动作包括:
1 | ACCEPT:接收数据包,允许数据包通过。 |
实例
注意:有时需要删除的规则较长,删除时需要写一大串的代码,这样比较容易写错,这时可以先使用 –line-numbers 找出该条规则的行号,再通过行号删除规则。
查看规则:
1 | iptables -nvL |
解析:
1 | -A DOCKER ! -i br-449595784b72 -p tcp -m tcp --dport 36381 -j DNAT --to-destination 192.168.176.2:6379 |
使用-p 选项指定了协议名称,使用扩展匹配条件 –dport 指定了目标端口,在使用扩展匹配条件的时候,如果没有使用-m 指定使用哪个扩展模块,iptables 会默认使用”-m 协议名”,而协议名就是-p 选项对应的协议名,上例中,-p 对应的值为 tcp,所以默认调用的扩展模块就为-m tcp,如果-p 对应的值为 udp,那么默认调用的扩展模块就为-m udp。
清除已有 iptables 规则:
1 | iptables -F |
添加规则(开放指定的端口):
添加规则有两个参数分别是 -A 和 -I。其中 -A 是添加到规则的末尾;-I 可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
1 | iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机) |
屏蔽 IP:
用-I 往前追加,最先匹配。
屏蔽 docker:
1 | iptables -I DOCKER -p tcp --dport 6379 -j DROP |
1 | iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令 |
修改规则:
在修改规则时需要使用-R 参数。
1 | iptables -R INPUT 6 -s 194.168.10.5 -j ACCEPT |
查看已添加的 iptables 规则:
1 | iptables -L -n -v |
删除已添加的 iptables 规则:
删除规则必须使用 -D 参数。
将所有 iptables 以序号标记显示,执行:
1 | iptables -L -n --line-numbers |
比如要删除 INPUT 里序号为 8 的规则,执行:
1 | iptables -D INPUT 8 |
防火墙的备份与还原
默认的 iptables 防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都会丢失,所以对防火墙规则进行及时保存的操作是非常必要的。
iptables 软件包提供了两个非常有用的工具,我们可以使用这两个工具处理大量的防火墙规则。这两个工具分别是 iptables-save 和 iptables-restore,使用该工具可以实现防火墙规则的保存与还原。这两个工具的最大优势是处理庞大的规则集时速度非常快。
CentOS 7 系统中防火墙规则默认保存在 /etc/sysconfig/iptables 文件中,使用 iptables-save 将规则保存至该文件中可以实现保存防火墙规则的作用,计算机重启后会自动加载该文件中的规则。
如果使用 iptables-save 将规则保存至其他位置,可以实现备份防火墙规则的作用。
当防火墙规则需要做还原操作时,可以使用 iptables-restore 将备份文件直接导入当前防火墙规则。
1 | iptables-save > /etc/sysconfig/iptables |
iptables-save 命令
iptables-save 命令用来批量导出 Linux 防火墙规则,语法介绍如下:
直接执行 iptables-save 命令:
1 | 保存在默认文件夹中(保存防火墙规则) (CentOS7) |
显示出当前启用的所有规则,按照 raw、mangle、nat、filter 表的顺序依次列出。
iptables-restore 命令
iptables-restore 命令可以批量导入 Linux 防火墙规则,同时也需要结合重定向输入来指定备份文件的位置。
命令如下:
1 | iptables-restore < 文件名称 |
注意,导入的文件必须是使用 iptables-save 工具导出来的才可以。
先使用 iptables-restore 命令还原 text 文件,然后使用 iptables -t nat -nvL 命令查看清空的规则是否已经还原。
参考: