介绍
像大多数其他的Linux发行版,CentOS 7使用netfilter
Linux内核内部框架,以访问通过网络流的数据包。 这提供必要的接口来检查和操纵分组以便实现防火墙系统。
大多数发行版使用iptables
防火墙,它使用netfilter
钩子强制执行防火墙规则。 CentOS 7配备了一个替代服务名为firewalld
它满足了这一相同的目的。
虽然firewalld
是极具特色一个非常有能力的防火墙解决方案,可能会更容易一些用户与坚持iptables
,如果他们是熟悉它的语法和高兴与它的行为和表现。 在iptables
命令实际使用firewalld
本身,而是iptables
服务未在默认情况下的CentOS 7安装。 在本指南中,我们将演示如何安装iptables
在CentOS 7服务和迁移防火墙firewalld
到iptables
(看看这个指南 ,如果你想学习如何使用FirewallD代替)。
保存当前防火墙规则(可选)
使切换之前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
rules.It通过建立使用管理框架完成这个iptables
链。 您可能会看到的大多数规则将用于创建这些管理链,并引导流量流入和流出这些结构。
你最终会移动到你的防火墙规则iptables
服务将不会需要重新创建管理框架firewalld
依赖。 因此,你最终实现的规则集可能会更简单。 我们在这里保存整个集合,以保持尽可能多的原始数据完整。
您可以看到一些更重要的行,以了解您必须重新创建的策略,通过键入以下内容:
grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules
这将主要显示导致最终决定的规则。 仅跳转到用户创建的链的规则将不会显示。
下载并安装Iptables服务
要开始您的服务器的过渡,你需要下载并安装iptables-service
从CentOS软件库包。
通过键入以下内容来下载并安装服务文件:
sudo yum install iptables-services
这将下载并安装systemd
用于管理脚本iptables
服务。 它也将写一些默认iptables
和ip6tables
配置文件复制到/etc/sysconfig
目录。
构建您的Iptables防火墙规则
接下来,你需要来构建你iptables
通过修改防火墙规则/etc/sysconfig/iptables
,并/etc/sysconfig/ip6tables
文件。 这些文件认为,将被读取并应用,当我们开始的规则iptables
服务。
你如何构建你的防火墙规则依赖于是否system-config-firewall
程序的安装和用于管理这些文件。 检查顶部/etc/sysconfig/iptables
文件,看它是否建议不要手动编辑与否:
sudo head -2 /etc/sysconfig/iptables
如果输出看起来是这样的,可随时手动编辑/etc/sysconfig/iptables
,并/etc/sysconfig/ip6tables
文件来实现你的政策iptables
防火墙:
output# 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
文件看起来像这样,你不应该手动编辑该文件:
output# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
这意味着该system-config-firewall
管理工具安装和用于管理该文件。 任何手动更改都将被工具覆盖。 如果您看到这一点,您应该使用相关工具之一更改您的防火墙。 对于文本UI,请键入:
sudo system-config-firewall-tui
如果您安装了图形UI,可以通过键入以下内容启动它:
sudo system-config-firewall
如果你需要一些帮助学习iptables
规则和语法,以下指南可能会有所帮助,即使它们主要针对的是Ubuntu的系统:
停止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
在这一点上, iptables
和ip6tables
服务是当前会话活跃。 然而,目前, firewalld
服务仍然是一个服务器重新启动时,将自动启动。
这是测试防火墙策略以确保您具有所需访问级别的最佳时机,因为如果有任何问题,您可以重新启动服务器以恢复到旧防火墙。
禁用FirewallD服务并启用Iptables服务
测试你的防火墙规则,以确保您的策略是否已正确被强制执行后,您可以继续禁用firewalld
通过键入以下服务:
sudo systemctl disable firewalld
这将阻止服务在引导时自动启动。 由于firewalld
服务不应手动启动,而iptables
服务,要么在运行,你可以采取通过屏蔽服务的额外步骤。 这将防止firewalld
被手工启动,以及服务:
sudo systemctl mask firewalld
现在,你可以启用iptables
和ip6tables
服务,使他们将在开机时自动启动:
sudo systemctl enable iptables
sudo systemctl enable ip6tables
这应该完成您的防火墙转换。
结论
实施防火墙是保持服务器安全的重要一步。 虽然firewalld
是一个伟大的防火墙解决方案,有时使用最熟悉的工具或通过更多样化的基础设施使用相同的系统是很有道理的。