Linux命令:firewall-cmd防火墙设置
最近更新时间 2019-12-31 21:44:10
firewall-cmd是firewalld的管理工具,提供动态管理的防火墙,支持"zone"来定义网络连接或接口的信任级别。支持IPv4和IPv6网络,将运行时和永久配置分开,支持服务或应用程序直接添加防火墙规则。
firewalld使用Python语言编写。
下列Linux系统的发行版本支持firewalld
- CentOS 7 and newer
- Fedora 18 and newer
- Red Hat Enterprise Linux 7 and newer
- OpenSUSE Leap 15 and newer
- SUSE Linux Enterprise 15 and newer
firewalld跟iptables比较有如下优势:
- firewalld支持动态修改单条规则,而iptables修改规则后需要刷新才生效。
- firewalld对使用者更友好,易于学习。
语法格式
firewalld-cmd [参数]
常用选项
-V
显示版本信息。--state
显示firewalld的状态。-reload
不中断服务的重新加载。--complete-reload
中断所有连接的重新加载。--runtime-to-permanent
将当前防火墙的规则永久保存。--check-config
检查配置是否正确。--get-log-denied
获取记录被拒绝的日志。--set-log-denied=<value>
设置记录被拒绝的日志,只能为 'all','unicast','broadcast','multicast','off'。
常用命令
启动关闭防火墙
#启动防火墙
systemctl start firewalld
#设置开机启动
systemctl enable firewalld
#关闭防火墙
systemctl stop firewalld
#取消开机启动
systemctl disable firewalld
#查看状态
systemctl status firewalld
#● firewalld.service - firewalld - dynamic firewall daemon
# Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor >
# Active: inactive (dead)
# Docs: man:firewalld(1)
#查看状态
firewall-cmd --state
#not running
配置firewalld
#查看区域信息
firewall-cmd --get-active-zones
#public
# interfaces: ens33
#查看指定接口所属区域
firewall-cmd --get-zone-of-interface=ens33
#拒绝所有包
firewall-cmd --panic-on
#取消拒绝状态
firewall-cmd --panic-off
#查看是否拒绝
firewall-cmd --query-panic
#更新防火墙规则
firewall-cmd --reload
#两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
firewall-cmd --complete-reload
# 将接口添加到区域,默认接口都在public
firewall-cmd --zone=public --add-interface=eth0
#永久生效加上 --permanent 然后reload防火墙
#设置默认接口区域,立即生效无需重启
firewall-cmd --set-default-zone=public
#查看所有打开的端口:
firewall-cmd --zone=dmz --list-ports
#显示支持的区域列表
firewall-cmd --get-zones
# 查看当前区域
firewall-cmd --get-active-zones
#显示所有公共区域(public)
firewall-cmd --zone=public --list-all
管理端口和服务
#打开80/TCP端口
firewall-cmd --add-port=80/tcp
#永久打开443/TCP端口,永久打开需要reload
firewall-cmd --permanent --add-port=443/tcp
#永久删除8080端口,禁止外网访问
firewall-cmd --permanent --remove-port=8080/tcp
#查询端口是否开启
firewall-cmd --permanent --query-port=8080/tcp
firewall-cmd --query-port=8080/tcp
#添加 SMTP 服务
firewall-cmd --zone=work --add-service=smtp
#移除 SMTP 服务
firewall-cmd --zone=work --remove-service=smtp
# 临时允许Samba服务通过600秒
firewall-cmd --enable service=samba --timeout=600
#查看开放的服务
firewall-cmd --list-services
#开放mysql端口
firewall-cmd --add-service=mysql
端口转发
#打开端口转发
firewall-cmd --zone=external --add-masquerade
#将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
#将80端口的流量转发至192.168.1.107
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.107
#将80端口的流量转发至192.168.1.107的8080端口
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.107:toport=8080