目录

CentOS 7 防火墙详解

当涉及到保护你的CentOS 7 服务器不受未经授权的访问和网络攻击时,防火墙是一个至关重要的工具。CentOS 7 默认使用的是 firewalld 防火墙管理工具,它提供了灵活的配置选项,以确保你的服务器安全性。在本文中,我们将深入探讨 CentOS 7 防火墙命令,包括基本操作、规则管理、服务设置和高级配置,帮助你更好地了解如何保护你的服务器。

什么是防火墙

防火墙是一种网络安全工具,用于管理网络流量并决定哪些流量被允许进入你的服务器,哪些被拒绝。它是保护服务器免受网络攻击的第一道防线。在 CentOS 7 中,firewalld 是默认的防火墙管理工具。

firewalld vs. iptables

在 CentOS 7 之前的版本中,iptables 是默认的防火墙工具。然而,firewalld 更加现代化和易于管理,它是一个动态的防火墙管理器,允许你在运行时添加、删除和修改规则,而不需要重新启动防火墙服务。这使得firewalld 更加适合在生产环境中使用。

基本操作

启用/停用防火墙

在 CentOS 7 中,默认情况下 firewalld 服务是启用的。你可以使用以下命令来检查 firewalld 服务是否启用:

1
sudo systemctl is-enabled firewalld

如果显示disabled,说明firewalld服务被禁用了,可以使用以下命令启用firewalld服务:

1
sudo systemctl enable firewalld

如果想要停用 firewalld 服务,可以使用以下命令:

1
sudo systemctl disable firewalld

查看防火墙状态

当你想要知道firewalld服务是否在运行时,你可以使用以下命令来检查 firewalld 服务的状态:

1
sudo systemctl status firewalld

或者使用下面这个命令:

1
sudo firewall-cmd --state

如果防火墙正在运行,将返回 running

启动/停止防火墙

如果firewalld服务没有启动,可以使用以下命令启动 firewalld 服务:

1
sudo systemctl start firewalld

停止firewalld服务使用以下命令:

1
sudo systemctl stop firewalld

查看活动区域

firewalld 使用区域(zone)的概念来管理网络规则。要查看当前活动的区域,可以运行以下命令:

1
sudo firewall-cmd --get-active-zones

查看区域详细信息

要查看特定区域的详细信息,例如默认区域(通常为 public),可以运行以下命令:

1
sudo firewall-cmd --list-all

这将显示所选区域的详细配置信息,包括已定义的规则和服务。

规则管理

添加规则

开放单个端口

要允许特定端口的入站流量,可以使用以下命令:

1
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent

这将在 public 区域中添加一个永久的入站规则,允许 SSH 流量进入。

批量开放端口

如果我们要开放8000到9000之间的全部端口,可以使用以下命令:

1
sudo firewall-cmd --zone=public --add-port=8000-9000/tcp --permanent

查询端口是否开放

使用以下命令查看端口是否开放:

1
sudo firewall-cmd --zone=public --query-port=80/tcp

查询所有开放端口

使用以下命令查看当前区域所有已开放的端口:

1
sudo firewall-cmd --zone=public --list-ports

允许特定IP地址访问

如果你只希望允许特定IP地址的访问,可以使用以下命令:

1
sudo firewall-cmd --zone=public --add-source=192.168.1.100 --permanent

移除规则

要移除防火墙规则,可以使用 --remove 参数,如下所示:

1
2
3
4
5
6
7
8
# 移除单个端口
sudo firewall-cmd --zone=public --remove-port=22/tcp --permanent

# 批量移除端口
sudo firewall-cmd --zone=public --remove-port=8000-9000/tcp --permanent

# 移除特定IP地址
sudo firewall-cmd --zone=public --remove-source=192.168.1.100 --permanent

应用规则变更

在添加或删除规则后,需要重新加载防火墙以使更改生效。可以使用以下命令:

1
sudo firewall-cmd --reload

服务设置

查看可用服务

firewalld 提供了一个服务定义的列表,可以用来简化规则设置。你可以使用以下命令列出所有可用服务,包括常见的网络服务,如 SSH、HTTP、FTP 等:

1
sudo firewall-cmd --get-services

添加服务规则

要允许特定服务的流量,比如HTTP服务,可以使用以下命令:

1
sudo firewall-cmd --zone=public --add-service=http --permanent

移除服务规则

要移除服务规则,可以使用 --remove-service 参数,如下所示:

1
sudo firewall-cmd --zone=public --remove-service=http --permanent

查看已添加的服务规则

你可以使用以下命令查看当前区域中已添加的服务规则:

1
sudo firewall-cmd --zone=public --list-services

高级配置

自定义区域

除了默认的区域(例如 publicinternaltrusted 等),你还可以创建自定义区域以根据需要管理防火墙规则。要创建自定义区域,可以使用以下命令:

1
sudo firewall-cmd --permanent --new-zone=mycustomzone

然后,你可以将规则添加到自定义区域中,类似于之前的示例。

转发端口

有时你可能需要将某个端口的流量从一个接口转发到另一个接口。你可以使用 --add-forward-port 参数来设置端口转发规则,如下所示:

1
2
# 将来自 eth0 接口的 80 端口流量转发到 eth1 接口的 8080 端口
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.2

这将设置一个端口转发规则,将来自 eth0 接口的 80 端口流量转发到 eth1 接口的 8080 端口,目标地址是 192.168.1.2

日志记录

你可以配置防火墙以记录特定规则的流量。要启用规则的日志记录,可以使用 --add-rich-rule 参数,如下所示:

1
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" log prefix="SSH Access" level="info" accept'

这将启用对来自 IP 地址 192.168.1.100 的端口 22 入站流量的日志记录。

永久规则 vs. 运行时规则

在示例中,我们经常使用 --permanent 参数来添加规则。这会将规则设置为永久规则,并在防火墙重新加载时保留。如果不使用 --permanent 参数,规则将仅在当前运行时生效,重启后将被丢弃。

在进行了一系列规则的更改之后,如果要确保这些更改在服务器重新启动后仍然有效,需要保存规则。你可以使用以下命令保存规则:

1
sudo firewall-cmd --runtime-to-permanent

总结

在本文中,我们详细讨论了在 CentOS 7 上管理防火墙的各种命令和操作。通过使用 firewalld 工具,你可以轻松地配置规则、管理服务和自定义防火墙设置,以保护你的服务器免受未经授权的访问和网络攻击。

如果你正在运行一个生产环境中的服务器,建议详细了解 firewalld 的文档以满足你的特定需求。同时,也要定期审查和更新你的防火墙规则,以确保服务器的安全性得到持续维护。

希望这篇文章对你理解 CentOS 7 防火墙命令和操作提供了有用的信息。祝你的服务器安全无虞!