防火墙是用来保护主机不会受到任何外部可疑流量访问的一种方法,分为软件防火墙和硬件防火墙两种。软件防火墙其实就是一种应用程序,用于进行主机流量的监控管理。VPS主机提供商常常会提供RHEL/Centos 7 的镜像,而RHEL/Centos 7 默认会安装软件防火墙Firewalld,如果Firewalld玩不熟,会在使用VPS过程中遇到各种问题。

Firewalld允许用户通过一系列的防火墙规则(firewall rules)来定义主机网络流量,简单来说,Firewalld是就阻止和筛选,通过筛选规则来确定流量是放行还是阻止。

本教程将对RHEL/Centos 7 系统的Firewalld命令进行总结,方便备忘使用。

安装和管理Firewalld

安装Firewalld服务,使用如下命令:

 # yum install firewalld -y

启动Firewalld服务,使用如下命令:

 # systemctl start firewalld

重新启动Firewalld服务,使用如下命令:

 # systemctl restart firewalld

停止Firewalld服务,使用如下命令:

 # systemctl stop firewalld

查看Firewalld服务状态,使用如下命令:

 # systemctl status firewalld

如果只查看Frewalld服务是否运行,使用如下命令:

 # firewall-cmd --state

重新加载Firewalld服务,使用如下命令:

为了重新加载Firewalld的永久性规则而又不影响现在已经存在的连接,就需要重新加载Firewalld服务,相当于刷新一次防火墙规则,让Firewalld以新载入的规则来进行流量控制。如果为Firewalld服务添加了新的规则,则需要使用下面的命令载入规则以使规则生效:

 # firewall-cmd --reload

设置Firewalld服务是否开机自动启动,使用如下命令:

 # systemctl enable firewalld    //允许
 # systemctl disable firewalld   //不允许

防火墙区域(Firewall Zones)

获得Firewalld默认区域:

 # firewall-cmd --get-default-zone

获得Firewalld激活区域:

 # firewall-cmd --get-active-zones

设置Firewalld默认区域:

 # firewall-cmd --set-default-zone=ZoneName

向Firewalld区域中添加网络接口:

以下命令用于向”public”区域添加”eht1″接口

 # firewall-cmd --zone=public --change-interface=eth1

显示Firewalld某个区域中信任(即放行流量)的网络端口:

以下命令用于显示”public”区域中所有的信任端口:

 # firewall-cmd --zone=public --list-ports

显示Firewalld某个区域中信任(即放行流量)的网络应用协议:

以下命令用于显示”public”区域中所有的信任应用协议:

 # firewall-cmd --zone=public --list-service

显示Firewalld活动区域的详细信息:

如果命令中使用”–zone=ZoneName”参数,则会显示指定区域”ZoneName”的详细信息:

 # firewall-cmd --list-all

显示全部区域配置的详细信息:

 # firewall-cmd --list-all-zones

显示全部区域名称:

 # firewall-cmd --get-zones

利用Firewalld管理端口

向Firewalld添加信任端口/协议

如果使用”–permanent”参数,则添加的规则会一直有效,否则会在重新载入Firewalld规则时失效。下面的命令将永久开放主机的80端口用于tcp连接:

 # firewall-cmd --permanent --add-port=80/tcp

移除Firewalld信任端口/协议

移动信任命令支持”–zone=ZoneName”参数,可以选择性的移除端口信任;同样如果使用”–permanent”参数,则移除的规则会一直有效,否则会在重新载入Firewalld规则时失效。下面的命令将永久关闭主机”public”区域的80端口tcp连接:

 # firewall-cmd --permanent --zone=public --remove-port=80/tcp

利用Firewalld管理协议

显示当前支持的所有协议:

 # firewall-cmd --get-services

向Firewalld添加信任协议:

“–zone=ZoneName”参数用于指定添加信任的区域,如果未指定则向全部区域添加信任;”–permanent”参数用于设置永久有效。以下命令将向主机所有区域添加对于”http”协议的信任,即放行http流量:

 # firewall-cmd --permanent --add-service=http

移除Firewalld对于特定协议的信任

“–zone=ZoneName”参数用于指定移除信任的区域,如果指定则移除全部区域的信任;”–permanent”参数用于设置永久有效。以下命令将对主机”public”区域的”http”协议移除信任,即阻止http流量:

 # firewall-cmd --permanent --zone=public --remove-service=http

端口重定向

以下示例将把80端口的流量重定向至主机的8080端口:

 # firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=800

或者使用:

firewall-cmd --add-rich-rule "rule family=ipv4 source address=192.168.0.0/24 forward-port port=80 protocol=tcp to-port=800"

重定向到其它服务器的指定端口

1. 首先激活对应区域的”masquerade”功能:

 # firewall-cmd --zone=public --add-masquerade

2. 然后添加重定向规则:

以下的命令会将访问本机80端口的流量重定向到IP地址为192.168.219.130主机的8080端口:

 # firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.219.130

移除masquerade规则:

 # firewall-cmd --zone=public --remove-masquerade

使用Firewalld的富规则

Firewalld的富规则语法十分丰富,可以参照其帮助页了解详细内容。可以使用”–add-rich-rule;–list-rich-rules;–remove-rich-rule”等参数来管理它们。

示例

允许IP地址为192.168.0.1主机的所有流量进入主机:

 # firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.1 accept'

阻止IP地址为192.168.0.2主机的所有流量访问本机的22端口:

 # firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.0.2" port port=22 protocol=tcp reject'

允许IP地址为192.168.0.3主机的所有流量访问本机的80端口,并且将其重定向到本机的8080端口:

 # firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=192.168.0.3 forward-port port=80 protocol=tcp to-port=8080'

将访问本机80端口的流量重定向到192.168.0.4主机的8080端口(注意设定的区域启用了”masquerade”):

 # firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.0.4'

显示当然所有的富规则:

 # firewall-cmd --list-rich-rules

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注