你可能需要一台已经设置好可以使用sudo
命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
与大多数其他Linux发行版一样,CentOS 7使用netfilter
Linux内核中的框架来访问流经网络堆栈的数据包。这为检查和操作数据包提供了必要的接口,以实现防火墙系统。
大多数发行版使用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 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有