你可能需要一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
与大多数其他Linux发行版一样,CentOS 7使用netfilterLinux内核中的框架来访问流经网络堆栈的数据包。这为检查和操作数据包提供了必要的接口,以实现防火墙系统。
大多数发行版使用iptables防火墙,防火墙使用netfilter挂钩来强制执行防火墙规则。CentOS 7附带了一个替代服务firewalld,它实现了同样的目的。
虽然firewalld是一个非常强大的防火墙解决方案,具有强大的功能,但iptables如果一些用户对其语法感到满意并对其行为和性能感到满意,则可能更容易坚持使用。该iptables 命令实际上是单独使用的firewalld,但默认情况下该iptables 服务未安装在CentOS 7上。在本指南中,我们将演示如何iptables在CentOS 7上安装服务并将防火墙firewalld迁移到iptables。
在切换到iptables服务器的防火墙解决方案之前,最好保存当前firewalld强制执行的规则。我们在上面提到,firewalld守护进程实际上利用该iptables命令与netfilter内核钩子通信。因此,我们可以使用该iptables命令转储当前规则。
通过键入以下内容,将当前规则集转储到标准输出和firewalld_iptables_rules主目录中的文件:
sudo iptables -S | tee ~/firewalld_iptables_rules用ip6tables做同样的事情:
sudo ip6tables -S | tee ~/firewalld_ip6tables_rules根据活动的firewalld区域,已启用的服务以及从firewall-cmd直接传递到iptables转储规则集的规则可能非常广泛。
该firewalld服务使用常规iptables规则实现其防火墙策略。它通过使用iptables链构建管理框架来实现此目的。您可能会看到的大多数规则将用于创建这些管理链,并指导流入和流出这些结构的流量。
最终转移到iptables服务的防火墙规则不需要重新创建firewalld依赖的管理框架。因此,您最终实施的规则集可能会简单得多。我们在这里保存整个集合,以尽可能保持原始数据的完整性。
您可以通过键入以下内容来查看一些更重要的行,以了解您必须重新创建的策略:
grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules这将主要显示导致最终决定的规则。仅跳转到用户创建的链的规则将不会显示。
要开始服务器转换,您需要从CentOS存储库下载并安装该iptables-service软件包。
键入以下命令下载并安装服务文件:
sudo yum install iptables-services这将下载并安装用于管理iptables服务的systemd脚本。它还会将一些默认iptables和ip6tables配置文件写入/etc/sysconfig目录。
接下来,您需要通过修改/etc/sysconfig/iptables和/etc/sysconfig/ip6tables文件来构建iptables防火墙规则。这些文件包含我们启动iptables服务时将读取和应用的规则。
如何构建防火墙规则取决于是否已安装该system-config-firewall进程并用于管理这些文件。检查/etc/sysconfig/iptables文件顶部是否建议不要手动编辑:
sudo head -2 /etc/sysconfig/iptables如果输出如下所示,请随意手动编辑/etc/sysconfig/iptables和/etc/sysconfig/ip6tables文件以实现iptables防火墙的策略:
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall使用sudo权限打开并编辑文件以添加规则:
sudo nano /etc/sysconfig/iptables
sudo nano /etc/sysconfig/ip6tables制定规则后,可以使用以下命令测试IPv4和IPv6规则:
sudo sh -c 'iptables-restore -t < /etc/sysconfig/iptables'
sudo sh -c 'ip6tables-restore -t < /etc/sysconfig/ip6tables'另一方面,如果检查/etc/sysconfig/iptables文件的输出如下所示,则不应手动编辑该文件:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.这意味着system-config-firewall管理工具已安装并用于管理此文件。该工具将覆盖任何手动更改。如果您看到这一点,则应使用其中一个相关工具对防火墙进行更改。对于文本UI,请键入:
sudo system-config-firewall-tui如果安装了图形用户界面,可以键入以下命令启动它:
sudo system-config-firewall接下来,我们需要停止当前的firewalld防火墙并启动我们的iptables服务。一旦firewalld服务成功关闭,我们将使用该&&构造来启动新的防火墙服务:
sudo systemctl stop firewalld && sudo systemctl start iptables; sudo systemctl start ip6tables您可以通过键入以下内容来验证firewalld未运行:
sudo firewall-cmd --state您还可以通过键入以下内容来查看已在/etc/sysconfig目录中设置的规则已加载并应用:
sudo iptables -S
sudo ip6tables -S此时,iptables和ip6tables服务对当前会话是活动的。但是,目前,该firewalld服务仍然是服务器重新启动时自动启动的服务。
这是测试防火墙策略以确保您具有所需访问级别的最佳时间,因为如果出现任何问题,您可以重新启动服务器以恢复到旧防火墙。
在测试防火墙规则以确保正确实施策略之后,您可以通过键入以下内容来继续并禁用该firewalld服务:
sudo systemctl disable firewalld这将阻止服务在引导时自动启动。由于在firewalld服务运行时不应手动启动iptables服务,因此您可以通过屏蔽服务来采取额外步骤。这样也会阻止手动启动firewalld服务:
sudo systemctl mask firewalld现在,您可以启用iptables和ip6tables服务,使他们将在开机时自动启动:
sudo systemctl enable iptables
sudo systemctl enable ip6tables这应该完成您的防火墙转换。
实施防火墙是保证服务器安全的重要一步。虽然这firewalld是一个很好的防火墙解决方案,但有时使用最熟悉的工具或在更多样化的基础架构中使用相同的系统是最有意义的。
更多CentOS教程请前往腾讯云+社区学习更多知识。
> 参考文献:《How To Migrate from FirewallD to Iptables on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。