一、firewall-cmd基本命令
1. systemctl相关
shell
# 首先查看防火墙是否开启,如未开启,需要先开启防火墙并作开机自启
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 停止防火墙
systemctl disable firewalld
# 禁用防火墙
systemctl stop firewalld
# 设置开机自启
systemctl enable firewalld
# 在开机时启用一个服务
systemctl enable firewalld.service
# 在开机时禁用一个服务
systemctl disable firewalld.service
# 查看服务是否开机启动
systemctl is-enabled firewalld.service
2. firewall-cmd通用信息查询
shell
# 查看当前的firewall的信息和配置
firewall-cmd --list-all
# 查看版本
firewall-cmd --version
# 查看帮助
firewall-cmd --help
# 显示firewalld状态
firewall-cmd --state
# 模式
# trusted:信任。可接受所有的网络连接。
# home :家庭。用于家庭网络,仅接受dhcpv6-client ipp-client mdns samba-client ssh服务连接。
# work :工作。工作网络,仅接受dhcpv6-client ipp-client ssh服务连接。
# public :公共。公共区域使用,仅接受dhcpv6-client ssh服务连接,这是firewalld的默认区域。
# external:外部。出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接。
# dmz :非军事区。仅接受ssh服务连接。
# block :限制。拒绝所有网络连接。
# drop :丢弃。任何接收的网络数据包都被丢弃,没有任何回复。
# 查看firewall的默认模式
firewall-cmd --get-default-zone
# 查看firewall都有哪几种模式
firewall-cmd --get-zones
# 将firewall的默认模式改为xxx,这是一个临时更改
firewall-cmd --set-default-zone=xxx
# 端口
# 查看所有打开的端口
firewall-cmd --zone=public --list-ports
# 查看单独端口【--query-port端口/协议】
firewall-cmd --zone= public --query-port=80/tcp
# service
# 查看所有服务
firewall-cmd --list-services
# 获取所有支持的服务
firewall-cmd --get-service
# 伪装IP
# 检查是否允许伪装IP
firewall-cmd --query-masquerade
# 允许防火墙伪装IP
firewall-cmd --add-masquerade
# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade
# 查看区域信息
firewall-cmd --get-active-zones
# 查看指定接口所属区域
firewall-cmd --get-zone-of-interface=eth0
# panic
# 拒绝所有包
firewall-cmd --panic-on
# 取消拒绝状态
firewall-cmd --panic-off
# 查看是否拒绝
firewall-cmd --query-panic
# 查看已设置的规则
firewall-cmd --zone=public --list-rich-rules
3. firewall-cmd基本配置
注意配置完需要reload重新加载下,在每次修改端口和服务后/etc/firewalld/zones/public.xml文件就会被修改,所以也可以在文件中之中修改,然后重新加载,使用命令实际也是在修改文件,需要重新加载才能生效。
shell
# 端口
#【--zone作用域】【--add-port端口/协议】【--permanent永久生效】
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 批量开放端口
firewall-cmd --zone=public --add-port=100-500/tcp --permanent
# 移除
firewall-cmd --zone= public --remove-port=80/tcp --permanent
# 批量移除
firewall-cmd --zone=public --remove-port=100-500/tcp --permanent
# 服务【--add-service服务】
# 添加服务
firewall-cmd --zone=public --add-service=http --permanent
# 开启服务
firewall-cmd --enable service=xxx
# 关闭服务
firewall-cmd --disable service=xxx
# 删除服务
firewall-cmd --remove-service=xxx
# 流量转发
# 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1
# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080
# 限制访问
# 设置某个ip访问某个服务
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept'
# 删除配置
firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept'
# 设置某个ip访问某个端口
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept'
# 删除配置
firewall-cmd --permanent --remove-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept'
# 表示来自"172.25.254.102"的数据全部通过。如果开启,firewall不添加http,且改为8080端口后不添加到firewall,"172.25.254.102"主机也可以访问Apache。"add"改为"remove"可以取消。
firewall-cmd --permanent --add-source=172.25.254.102 --zone=trusted
# 重新加载
# 不中断服务的重新加载
firewall-cmd --reload
#中断连接,重新加载
firewall-cmd --complete-reload
# 防火墙规则永久保存
firewall-cmd --runtime-to-permanent