CentOS 7 防火墙(FirewallD)的全面指南
CentOS 7 引入了 FirewallD 作为默认的防火墙管理工具,取代了之前版本中使用的 iptables,FirewallD 提供了一个动态的、基于区域的管理方式,使得配置和管理防火墙变得更加灵活和简便。
安装与启动
1、安装:
在 CentOS 7 中,FirewallD 通常已经预装,但可以通过以下命令进行安装或重新安装:
```bash
sudo yum install firewalld y
```
2、启动:
启动 FirewallD 服务:
```bash
sudo systemctl start firewalld
```
3、查看状态:
检查 FirewallD 是否正在运行:
```bash
sudo systemctl status firewalld
```
4、设置开机启动:
使 FirewallD 在系统启动时自动启动:
```bash
sudo systemctl enable firewalld
```
5、禁用和停止:
停止 FirewallD 服务:
```bash
sudo systemctl stop firewalld
```
禁用 FirewallD 服务,使其在重启后不再启动:
```bash
sudo systemctl disable firewalld
```
基本操作
1、查看版本和帮助:
查看 FirewallD 的版本:
```bash
firewallcmd version
```
查看帮助信息:
```bash
firewallcmd help
```
2、显示状态和区域:
显示 FirewallD 的状态:
```bash
firewallcmd state
```
查看当前活动的区域:
```bash
firewallcmd getactivezones
```
查看特定接口所在的区域:
```bash
firewallcmd getzoneofinterface=eth0
```
3、信任级别:
FirewallD 通过区域(Zone)来定义网络连接的信任级别,常见的区域包括:
drop
: 丢弃所有进入的包,不回应。
block
: 拒绝所有外部发起的连接,允许内部发起的连接。
public
: 允许选中的连接。
external
: 用于路由转发。
dmz
: 允许受限制的进入连接。
work
: 允许受信任的计算机被限制的进入连接。
home
: 类似家庭组。
internal
: 针对所有互联网用户。
trusted
: 信任所有连接。
端口和服务管理
1、开启和关闭端口:
在public
区域中开放端口 80 (HTTP):
```bash
sudo firewallcmd zone=public addport=80/tcp permanent
```
移除端口 80:
```bash
sudo firewallcmd zone=public removeport=80/tcp permanent
```
重新载入规则以应用更改:
```bash
sudo firewallcmd reload
```
查询特定端口是否开放:
```bash
firewallcmd queryport=80/tcp
```
2、管理服务:
将 SMTP 服务添加到work
区域:
```bash
sudo firewallcmd zone=work addservice=smtp permanent
```
查看已添加的服务:
```bash
firewallcmd listservice
```
删除服务:
```bash
sudo firewallcmd zone=work removeservice=smtp permanent
```
3、IP地址伪装:
查看 IP 地址伪装状态:
```bash
firewallcmd querymasquerade
```
启用 IP 地址伪装:
```bash
sudo firewallcmd permanent addmasquerade
```
禁用 IP 地址伪装:
```bash
sudo firewallcmd permanent removemasquerade
```
4、端口转发:
打开 IP 地址伪装(必须先启用):
```bash
sudo firewallcmd permanent addmasquerade
```
将 TCP 端口 22 转发到端口 3753:
```bash
sudo firewallcmd permanent addforwardport=port=22:proto=tcp:toport=3753
```
将端口数据转发到另一个 IP 的相同端口:
```bash
sudo firewallcmd permanent addforwardport=port=22:proto=tcp:toaddr=192.168.0.2:toport=22
```
高级配置和管理
1、查看策略列表:
列出当前的策略规则:
```bash
firewallcmd listrichrules
```
添加白名单规则,只允许指定 IP 段访问服务器的 22 端口:
```bash
sudo firewallcmd permanent addrichrule='rule family="ipv4" source address="指定IP或IP段" port protocol="tcp" port="22" accept'
```
添加白名单规则,允许指定 IP 段访问服务器的所有端口:
```bash
sudo firewallcmd permanent addrichrule='rule family="ipv4" source address="指定IP或IP段" accept'
```
重新加载配置以应用更改:
```bash
sudo firewallcmd reload
```
2、配置文件修改:
进入配置文件目录并编辑配置文件:
```bash
cd /etc/firewalld/zones/
vim public.XML
```
在文件中添加内容,然后重启防火墙以应用更改:
```xml
<rule family="ipv4">
<source address="指定IP或IP段"/>
<port protocol="tcp" port="22"/>
<accept/>
</rule>
```
FAQs(常见问题解答)
1、如何查看防火墙当前的状态?
你可以使用以下命令查看防火墙的当前状态:
```bash
firewallcmd state
或者
sudo systemctl status firewalld
```
这些命令会告诉你防火墙当前是否正在运行。
2、如何永久地开放一个端口?
要永久开放一个端口,你需要使用permanent
选项,要永久开放 HTTP 端口(80),你可以使用以下命令:
```bash
sudo firewallcmd zone=public addport=80/tcp permanent
然后重新加载防火墙规则以使更改生效:
sudo firewallcmd reload
```