如何在Linux上永久保存iptables防火墙规则

时间:2020-01-09 10:39:40  来源:igfitidea点击:

Debian/Ubuntu Linux服务器,如何使用iptables命令添加的CLI在Linux上永久保存iptables规则?
如何将iptables IPv4和IPv6规则永久存储在Debian Linux云服务器上?

Linux系统管理员和开发人员使用iptables和ip6tables命令在Linux内核中设置,维护和检查IPv4和IPv6数据包筛选器规则的防火墙表。
重新引导Linux服务器时,使用这些命令进行的任何修改都将丢失。
因此,我们需要在重新引导期间永久存储这些规则。
本教程举例说明如何在Ubuntu或Debian Linux服务器上永久保存iptables防火墙规则。

在Linux上永久保存iptables防火墙规则

您需要使用以下命令永久保存iptables防火墙规则:

  • iptables-save命令或ip6tables-save命令以易于分析的格式保存或转储IPv4或IPv6表的内容到屏幕或指定文件。
  • iptables-restore命令或ip6tables-restore命令在Linux下从给定文件恢复IPv4或IPv6防火墙规则和表。

步骤1打开终端

打开终端应用程序,然后执行以下命令。
对于使用ssh命令登录的远程服务器:

$ ssh [email protected]
$ ssh ec2-user@ec2-host-or-ip

您必须使用sudo命令或su命令以root用户身份执行以下命令。

步骤2保存IPv4和IPv6 Linux防火墙规则

Debian和Ubuntu Linux用户类型:

$ sudo /sbin/iptables-save > /etc/iptables/rules.v4
## IPv6 ##
$ sudo /sbin/ip6tables-save > /etc/iptables/rules.v6

CentOS/RHEL用户运行:

$ sudo /sbin/iptables-save > /etc/sysconfig/iptables
## IPv6 ##
$ sudo /sbin/ip6tables-save > /etc/sysconfig/ip6tables

在Linux上显示已保存的规则

我们可以使用cat命令显示保存的文件,或者使用grep命令/egrep命令搜索:

$ cat /etc/iptables/rules.v4
*mangle
 
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
 
 
COMMIT
 
 
*nat
 
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
 
-A POSTROUTING -s 10.8.0.0/24 -m policy --pol none --dir out -j MASQUERADE
 
COMMIT
 
 
*filter
 
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
 
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p ah -j ACCEPT 
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-upto 5/s --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name icmp-echo-drop -j ACCEPT
-A INPUT -p udp -m multiport --dports 21194 -j ACCEPT
-A INPUT -p tcp -s 1xx.yy.zz.ttt,10.8.0.0/24,10.8.1.0/24 --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp --dport 3128 -d 10.8.0.1 -s 10.8.0.0/24,10.8.1.0/24  -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -d 172.xx.yyy.zzz -p udp --dport 53 -j ACCEPT
-A INPUT -d 172.xx.yyy.z -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -m limit --limit 5/min -j LOG --log-prefix "[iptables denied] " --log-level 7
-A FORWARD -s 10.8.0.0/24 -d 10.8.0.0/24 -j DROP
-A OUTPUT -d 10.8.0.0/24 -m owner --gid-owner 15000 -j DROP
-A FORWARD -s 10.8.0.0/24 -d 169.254.0.0/16 -j DROP
-A OUTPUT -d 169.254.0.0/16 -m owner --gid-owner 15000 -j DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp --dport 445 -j DROP
-A FORWARD -p udp -m multiport --ports 137,138 -j DROP
-A FORWARD -p tcp -m multiport --ports 137,139 -j DROP
-A FORWARD -m conntrack --ctstate NEW -s 10.8.0.0/24 -m policy --pol none --dir in -j ACCEPT
-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "[iptables forward denied] " --log-level 7
COMMIT

步骤3还原IPv4和IPv6 Linux文件墙规则

对于每个操作系统,我们只需按以下方式反转上述命令:

## Debian or Ubuntu ##
$ sudo /sbin/iptables-restore < /etc/iptables/rules.v4
$ sudo /sbin/ip6tables-restore < /etc/iptables/rules.v6
## CentOS/RHEL ##
$ sudo /sbin/iptables-save < /etc/sysconfig/iptables
$ sudo /sbin/ip6tables-save < /etc/sysconfig/ip6tables

步骤4为Debian或Ubuntu Linux安装iptables-persistent软件包

请注意,以下命令将与ipws前端(例如ufw命令或firewall-cmd命令)冲突。
如果使用这些工具,请避免使用以下软件包。

我们需要安装iptables-persistent。
它将充当Netfilter规则的加载程序,iptables插件netfilter-persistent,这是使用基于插件的体系结构进行Netfilter配置的加载程序。
换句话说,从上述文件自动加载已保存的iptables规则。
执行以下apt命令或apt-get命令:

$ sudo apt install iptables-persistent
## 或者
$ sudo apt-get install iptables-persistent

确保使用systemctl命令在Debian或Ubuntu上启用了服务:

$ sudo systemctl is-enabled netfilter-persistent.service

如果未启用它:

$ sudo systemctl enable netfilter-persistent.service

获取状态:

$ sudo systemctl status netfilter-persistent.service

步骤5为RHEL/CentOS安装iptables-services软件包

默认情况下,RHEL/CentOS 7或8附带有firewalld。
如果您需要旧的基于文件的旧防火墙,请执行以下命令:

# Disable firewalld if installed #
$ sudo systemctl stop firewalld.service
$ sudo systemctl disable firewalld.service
$ sudo systemctl mask firewalld.service
# install package on Linux to save iptables rules using the yum command/dnf command ##
$ sudo yum install iptables-services
$ sudo systemctl enable iptables
$ sudo systemctl enable ip6tables
$ sudo systemctl status iptables