共计 1613 个字符,预计需要花费 5 分钟才能阅读完成。
firewalld 是 Linux 操作系统的防火墙管理工具。它通过充当 Linux 内核的 netfilter 框架的前端来提供防火墙功能,就像 iptables 一样。
安装 firewalld
默认情况下 CentOS 7 可能已经安装了 firewalld 服务,若确实没有安装直接使用 yum
命令安装即可:
# 安装 firewalld
yum -y install firewalld
运行 firewalld 之前的准备
firewalld 默认规则已经放行 SSH 服务(22 端口),但如果您修改过 SSH 端口,则必须先放行,否则一旦启用 firewalld 将被阻挡在外,无法连接服务器,那就杯了个具。
比如您将 SSH 端口修改为了 2018,可尝试直接编辑 firewalld 的配置文件vi /etc/firewalld/zones/public.xml
,里面加入一条规则:
<port protocol="tcp" port="2018"/>
另外直接修改配置文件的方法不太推荐,而且容易改错,最近了解到 firewall-offline-cmd
命令可在 firewalld 离线的时候执行:
firewall-offline-cmd --zone=public --add-port=2018/tcp
接着输入命令:systemctl start firewalld
来启动 firewalld,这样就不会阻挡在外啦。
常用命令
安装完成后 firewalld 并没有运行,有必要先来熟悉下基本的命令:
# 查看运行状态
firewall-cmd --state
#启动 firewall
systemctl start firewalld
#设置开机自启
systemctl enable firewalld
#删除开机自启
systemctl disable firewalld
#停止 firewall
systemctl stop firewalld
如果您在启动的时候提示“Failed to start firewalld.service: Unit firewalld.service is masked.”,输入下面的命令可解决:
systemctl unmask firewalld.service
一些常用的列子
放行某个指定的 TCP 端口,如放行 80 端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
放行端口范围(8000-9000):
firewall-cmd --zone=public --add-port=8000-9000/tcp --permanent
查看已经放行的端口:
firewall-cmd --zone=public --list-ports
删除某个已经放行的端口(6022):
firewall-cmd --zone=public --remove-port=6022/tcp --permanent
阻止某个 IP(123.57.22.204)连接:
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=123.57.22.204 reject"
仅允许特定的 IP 访问特定的端口:
firewall-cmd --permanent --add-rich-rule="rule family="ipv4"source address="101.32.40.130"port protocol="tcp"port="3306"accept"
注意上面的所有列子都需要输入: firewall-cmd --reload
重载 firewall 使其生效。
总结
个人感觉 firewalld 使用起来比 iptables 简单,CentOS 7 默认使用 firewalld 作为防火墙也肯定是有原因的,因此赶紧把这篇文章收藏了肯定没坏处(此处应有一个坏笑的表情)。上面仅提供了 firewalld 的基本使用方法,应对大部分情况应该足够了,如果需要详细了解参数含义可网上自行搜索。