如何在Linux上永久保存iptables防火墙规则
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