firewall常用命令及作用

systemctl start firewalld.service 	# 开启防火墙
systemctl stop firewalld.service	# 关闭防火墙
systemctl status firewalld.service  # 查看防火墙状态
systemctl enable firewalld.service  # 开机自启
systemctl disable firewalld.service # 永久关闭防火墙
firewall-cmd --version 				# 查看防火墙版本
0.8.0

查看防火墙开放的端口号
firewall-cmd --list-ports 
3306/tcp
firewall-cmd --permanent --zone=public --list-ports 
3306/tcp



查看防火墙是否开放了某一端口号
firewall-cmd --get-zones      		# 查看有哪些区域
block dmz drop external home internal public trusted work

firewall-cmd --zone=public --query-port=3306/tcp  # zone表示区域,public是公共的意思,而区域默认是上面的九个区域,--query-port表示查看3306端口号以及tcp协议是否支持
yes         # yes表示开放,若是no的话就表示没有开放

九个区域的介绍

网络区名称默认配置
block(限制)拒绝所有网络连接
dmz(非军事区,隔离区)仅接受ssh服务连接,此区域内可公开访问,它是非安全系统与安全系统之间的缓冲区。
drop(丢弃)任何接收的网络数据包都被丢弃,没有任何回复
external(外部)出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
home(家庭)用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接
internal(内部)用于内部网络,仅接受ssh、mdns、ipp-client、ssamba-client、dhcpv6-client服务连接
public(公共)在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
trusted(信任)接收的外部网络连接是可信任、可接受的。
work(工作)用于工作区,仅接受ssh、ipp-client或dhcpv6-clinet服务连接
firewall-cmd --get-default-zone 		# 查看默认区域
public  
firewall-cmd --set-default-zone=work  	# 修改默认区域为work
firewall-cmd --list-all-zones 			# 列出所有区域配置
firewall-cmd --get-active-zones 		# 列出活动区域
public
  interfaces: ens160

# Interfaces (接口)是系统中的硬件和虚拟的网络适配器的名字,所有的活动的接口都将被分配到区域,要么是默认的区域,要么是用户指定的一个区域。但是,一个接口不能被分配给多于一个的区域。
查看一个区域的配置信息
[root@localhost ~]# firewall-cmd --zone=public --list-all 
public (active)  				# 活动的区域
  target: default  				# 默认启动的区域
  icmp-block-inversion: no
  interfaces: ens160 			# 列出此区域上关联的接口
  sources:   					# 列出这个区域的源。现在这里什么都没有,如果这里有内容,它们应该是这样的格式
  services: cockpit dhcpv6-client ssh  	# 列出允许通过这个防火墙的服务。你可以通过运行 firewall-cmd --get-services 得到一个防火墙预定义服务的详细列表
  ports: 3306/tcp  				# 列出允许通过这个防火墙的目标端口
  protocols: 					# 协议值可以是一个协议 ID 数字,或者一个协议名
  masquerade: no  				# 表示这个区域是否允许 IP 伪装。如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器。
  forward-ports:   				# 列出转发的端口
  source-ports:    
  icmp-blocks:   				# 阻塞的 icmp 流量的黑名单
  rich rules: 					# 在一个区域中优先处理的高级配置。

基本使用

对外开放指定的端口号
firewall-cmd --add-port=3306/tcp --permanent  	# 这里写要添加的端口号/协议,--permanent为永久生效,如果不写,重启之后就会失效。

firewall-cmd --reload							# 开放之后需要使用下面的命令重新加载使其立即生效
firewall-cmd --query-service ftp				# 查看ftp服务是否支持
no
firewall-cmd --add-service=ftp --permanent		# 永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent	# 永久移除ftp服务
firewall-cmd --panic-on							# 拒绝所有包
firewall-cmd --panic-off 						# 取消拒绝状态
firewall-cmd --query-panic						# 查看是否拒绝
firewall-cmd --remove-port=3306/tcp --permanent # 删除加入的3306防火墙规则
success
firewall-cmd --reload 
success
firewall-cmd --list-all							# 查看防火墙规则
firewall-cmd --query-port=3306/tcp				# 查询端口是否开放,删除成功
no  
firewall-cmd --get-zone-of-interface=ens160 	# 查看指定接口所属区域
public

# 伪装IP
firewall-cmd --query-masquerade                # 检查是否允许伪装IP
firewall-cmd --permanent --add-masquerade      # 允许防火墙伪装IP
firewall-cmd --permanent --remove-masquerade   # 禁止防火墙伪装IP


# 将服务器的6666端口号转发到另一个服务器的8888端口号
firewall-cmd --permanent --add-masquerade       # 开启地址伪装
firewall-cmd --add-forward-port=6666:porto=tcp:toaddr=另一台服务器的IP地址:toport=8888 # 如果使用的是udp协议进行通讯将tcp改为udp即可。

# 限制IP地址访问
比如限制IP为192.168.0.200的地址禁止访问80端口即禁止访问机器
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" reject"

# 解除限制
解除刚才被限制的192.168.0.200
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept"
 
# 限制IP地址段
假如我们需要限制10.0.0.0-10.0.0.255这一整个段的IP,禁止他们访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject"

firewall-cmd --reload  //重新加载防火墙规则使其生效。
多区域的应用:
可以根据不同的接口配置不同的区域
可以对同一个接口,对不同网段的ip/流量,配置不同的访问
例:

一个接口只能对应一个区域,将接口与指定区域关联:
firewall-cmd --change-interface=ens75 --zone=drop

根据不同的访问来源网段,设定至不同的区域规则:
firewall-cmd --add-source=192.168.75.0/24 --zone=public
firewall-cmd --add-source=192.168.85.0/24 --zone=drop
firewall-cmd --get-active-zones :查看(活动区域)默认接口和区域。