Linux命令:firewall-cmd防火墙设置

Lasted 2019-12-31 21:44:10

firewall-cmdfirewalld的管理工具,提供动态管理的防火墙,支持"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

 firewalldiptables比较有如下优势:

  1. firewalld支持动态修改单条规则,而iptables修改规则后需要刷新才生效。
  2. 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