专栏首页云计算教程系列如何从FirewallD迁移到CentOS 7上的Iptables
原创

如何从FirewallD迁移到CentOS 7上的Iptables

介绍

你可能需要一台已经设置好可以使用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

这将主要显示导致最终决定的规则。仅跳转到用户创建的链的规则将不会显示。

下载并安装Iptables服务

要开始服务器转换,您需要从CentOS存储库下载并安装该iptables-service软件包。

键入以下命令下载并安装服务文件:

sudo yum install iptables-services

这将下载并安装用于管理iptables服务的systemd脚本。它还会将一些默认iptablesip6tables配置文件写入/etc/sysconfig目录。

构建您的Iptables防火墙规则

接下来,您需要通过修改/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防火墙并启动我们的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

此时,iptablesip6tables服务对当前会话是活动的。但是,目前,该firewalld服务仍然是服务器重新启动时自动启动的服务。

这是测试防火墙策略以确保您具有所需访问级别的最佳时间,因为如果出现任何问题,您可以重新启动服务器以恢复到旧防火墙。

禁用FirewallD服务并启用Iptables服务

在测试防火墙规则以确保正确实施策略之后,您可以通过键入以下内容来继续并禁用该firewalld服务:

sudo systemctl disable firewalld

这将阻止服务在引导时自动启动。由于在firewalld服务运行时不应手动启动iptables服务,因此您可以通过屏蔽服务来采取额外步骤。这样也会阻止手动启动firewalld服务:

sudo systemctl mask firewalld

现在,您可以启用iptablesip6tables服务,使他们将在开机时自动启动:

sudo systemctl enable iptables
sudo systemctl enable ip6tables

这应该完成您的防火墙转换。

结论

实施防火墙是保证服务器安全的重要一步。虽然这firewalld是一个很好的防火墙解决方案,但有时使用最熟悉的工具或在更多样化的基础架构中使用相同的系统是最有意义的。

更多CentOS教程请前往腾讯云+社区学习更多知识。

> 参考文献:《How To Migrate from FirewallD to Iptables on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 16.04上的Jenkins中设置持续集成管道

    Jenkins是一个开源的自动化服务器,目的是能够自动执行持续集成和交付软件所涉及的重复性技术任务。凭借强大的插件生态系统,Jenkins可以处理各种工作负载,...

    无敌小笼包
  • 物联网入门:搭建MQTT服务器

    MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设...

    无敌小笼包
  • 如何在Debian 8上安装Git

    Git是自2005年发布以来根据GNU通用公共许可证v.2的条款分发的版本控制系统。

    无敌小笼包
  • CentOS 7 :Failed to start IPv4 firewall with iptables.

    https://blog.csdn.net/u013028876/article/details/78750561

    拓荒者
  • 自相矛盾:一个进程可以自成死锁么?

    崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 编辑手记:感谢崔华授权我们独家转载其精品文章,也欢迎大家向“Oracl...

    数据和云
  • 理解Java里面并发工具框架AbstractQueuedSynchronizer的底层实现

    前面的文章我们讨论了Java并发工具框架基类AbstractQueuedSynchronizer的核心功能和设计思想,本篇在结合源码来分析下相关的内容

    我是攻城师
  • android引导用户开启自启动权限的方法

    最近在做项目的过程中遇到了以下一个需求,虽然看起来不难实现,但是在实现的过程中遇到了各种坑,记录一下,今后方便查看!!!

    砸漏
  • 论快速原型设计的重要性

    产品原型是用于还原用户体验最直接的手段,一个可触击原型不仅能检测产品的可用性,还能最大限度地节省时间,降低资源消耗。权威案例表明,原型设计对产品逻辑的精确再现...

    奔跑的小鹿
  • 数据运营实战(三):用数据说话,从埋点开始

    埋点是 App 数据运营中很重要的一个环节。之前我们讨论过用户分群的方式、漏斗转化的改进,但所有 App 数据的来源是数据采集,很多时候就是 App 的埋点。

    腾讯大数据
  • 以太坊交易签名过程源码解析

    向以太坊网络发起一笔交易时,需要使用私钥对交易进行签名。那么从原始的请求数据到最终的签名后的数据,这中间的数据流转是怎样的,经过了什么过程,今天从go-ethe...

    Tiny熊

扫码关注云+社区

领取腾讯云代金券