永久保存 iptables 防火墙规则
您需要安装iptables-persistent
将在重新启动时自动恢复 iptables 的软件包。
sudo apt install iptables-persistent
在安装过程中,系统会要求您保存当前/现有的 iptables 规则。选择Yes
或No
取决于您的需要。
如果您选择是
,它将分别为 IPv4 和 IPv6创建现有的 iptables 规则并将其保存到/etc/iptables/rules.v4
和/etc/iptables/rules.v6
保存。
无论何时更改iptables的规则,都应该使用iptables-save
命令将其保存到文件中,以便在重新启动后使更改保持不变。
对于 IPv4 iptables(使用最广泛的场景):
sudo iptables-save -f /etc/iptables/rules.v4
对于 IPv6 iptables:
sudo iptables-save -f /etc/iptables/rules.v6
请注意,每次对系统上的 iptables 进行更改时,都需要运行上述两行命令。它基本上将当前活动的 iptables 规则复制到指定的文件中。
恢复到您上次保存它们时的状态:
sudo netfilter-persistent reload
使用cat 命令显示保存的文件 :
sudo cat /etc/iptables/rules.v4
sudo cat /etc/iptables/rules.v6
此外,要删除持久性 iptables 规则,您只需打开相应的/etc/iptables/rules.v*
文件并手动删除包含所有不需要的规则的行。
示例:放行8888端口
iptables -I INPUT -p 协议 -m 协议 --dport 端口 -j ACCEPT 入站规则
iptables -I INPUT -p 协议 -m 协议 --dport 端口 -j ACCEPT 出站规则
ipv4:
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 8888 -j ACCEPT
ipv6:
ip6tables -I INPUT -p tcp --dport 8888 -j ACCEPT
ip6tables -I OUTPUT -p tcp --sport 8888 -j ACCEPT
针对这2条命令进行一些讲解吧
-A 参数就看成是添加一条 INPUT 的规则
-p 指定是什么协议 我们常用的tcp 协议,当然也有udp 例如53端口的DNS
到时我们要配置DNS用到53端口 大家就会发现使用udp协议的
而 –dport 就是目标端口 当数据从外部进入服务器为目标端口
反之 数据从服务器出去 则为数据源端口 使用 –sport
-j 就是指定是 ACCEPT 接收 或者 DROP 不接收
选 项 功 能
-A 添加防火墙规则
-D 删除防火墙规则
-I 插入防火墙规则
-F 清空防火墙规则
-L 列出添加防火墙规则
-R 替换防火墙规则
-Z 清空防火墙数据表统计信息
-P 设置链默认规则
开放所有端口
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
关闭所有端口
关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。
下面是命令实现:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
再用命令 iptables -L -n 查看 是否设置好, 好看到全部DROP了。
临时关闭iptables,重启后恢复开启:
service iptables stop
service ip6tables stop
删除iptables:
apt-get purge netfilter-persistent
开启为:
apt-get install netfilter-persistent
强制删除并重启
rm -rf /etc/iptables && reboot
查看规则是否生效,命令:
IPV4:
iptables -L
IPV6:
ip6tables -L
删除规则
首先我们要知道 这条规则的编号,每条规则都有一个编号。
通过
iptables -L -n --line-number 可以显示规则和相对应的编号。
num target prot opt source destination
1 DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
2 DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
3 DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
多了 num 这一列, 这样我们就可以看到刚才的规则对应的是编号2,那么我们就可以进行删除了。
iptables -D INPUT 2
上述示例为删除INPUT链编号为2的规则。
iptables -D OUTPUT 2
上述示例为删除OUTPUT链编号为2的规则。
再 iptables -L -n 查看一下,发现规则已经被清除了。
开放指定端口范围:
入站:
iptables -I INPUT -p tcp --dport 500:800 -j ACCEPT
ip6tables -I INPUT -p tcp --dport 500:800 -j ACCEPT
出站:
iptables -I OUTPUT -p tcp --sport 500:800 -j ACCEPT
ip6tables -I OUTPUT -p tcp --sport 500:800 -j ACCEPT
一、 500:800 表示500到800之间的所有端口
二、 :800 表示800及以下所有端口
三、 500: 表示700以及以上所有端口
连续设置示例:开放500-800端口出入站并永久生效 (全部复制仅执行一次)
iptables -I INPUT -p tcp --dport 500:800 -j ACCEPT &&
ip6tables -I INPUT -p tcp --dport 500:800 -j ACCEPT &&
iptables -I OUTPUT -p tcp --sport 500:800 -j ACCEPT &&
ip6tables -I OUTPUT -p tcp --sport 500:800 -j ACCEPT &&
sudo iptables-save -f /etc/iptables/rules.v4 &&
sudo iptables-save -f /etc/iptables/rules.v6
sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
sudo ip6tables -I INPUT -p icmpv6 --icmpv6-type echo-request -j DROP
解除ipv4&ipv6 ping
sudo iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
sudo ip6tables -D INPUT -p icmpv6 --icmpv6-type echo-request -j DROP
通过命令iptables -L查看已有规则
注意,需要注释掉( # )此下规则,上述配置才有效。
这条策略的配置如下:
-A INPUT -p icmp -j ACCEPT
配置文件路径:
(/etc/iptables/rules.v4)
(/etc/iptables/rules.v6)