2022年9月5日星期一

Linux中iptables 防火墙设置规则永久保存

 永久保存 iptables 防火墙规则

您需要安装iptables-persistent将在重新启动时自动恢复 iptables 的软件包。

sudo apt install iptables-persistent

如果您选择,它将分别为 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

禁ipv4&ipv6 ping

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)