firewall-cmd --add-forward-port=port=10080:proto=tcp:toport=22 #将本地端口 10080 转发到 22 端口
firewall-cmd --remove-forward-port=port=10080:proto=tcp:toport=22
firewall-cmd --add-rich-rule="rule family="ipv4" source address="172.16.6.168" accept" #允许 172.16.6.168 的所有流量
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="172.16.6.168" accept"
firewall-cmd --add-rich-rule="rule family="ipv4" source address="172.16.6.168" protocol value="icmp" drop" #拒绝 172.16.6.168 ping 协议
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="172.16.6.168" protocol value="icmp" drop"
firewall-cmd --add-rich-rule="rule family="ipv4" source address="172.16.6.168" port protocol="tcp" port="5901" accept" #允许 172.16.6.168 访问 5901 端口
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="172.16.6.168" port protocol="tcp" port="5901" accept"
firewall-cmd --add-rich-rule="rule family="ipv4" source address="172.16.6.168" service name="vnc-server" accept" #允许 172.16.6.168 访问 vnc 服务
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="172.16.6.168" service name="vnc-server" accept"
firewall-cmd --add-rich-rule="rule family="ipv4" source address="172.16.6.0/24" port protocol="tcp" port="5901" accept" #允许 172.16.6.0/24 网段访问 5901 端口
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="172.16.6.0/24" port protocol="tcp" port="5901" accept"
firewall-cmd --add-rich-rule="rule family="ipv4" source address="172.16.6.0/24" port protocol="tcp" port="5901" reject" #拒绝 172.16.6.0/24 网段访问 5901 端口(返回 timeout 连接超时)
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="172.16.6.0/24" port protocol="tcp" port="5901" reject"
firewall-cmd --zone=public --query-port=1521/tcp #查看 1521 是否在防火墙开启开启
firewall-cmd --add-port=1521/tcp #允许 1521 端口通过
参考文档:https://blog.csdn.net/u012486840/article/details/52635263
参考文档:http://www.itlnmp.com/373.html
Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别
drop: 丢弃所有进入的包,而不给出任何响应
block: 拒绝所有外部发起的连接,允许内部发起的连接
public: 允许指定的进入连接
external: 同上,对伪装的进入连接,一般用于路由转发
dmz: 允许受限制的进入连接
work: 允许受信任的计算机被限制的进入连接,类似 workgroup
home: 同上,类似 homegroup
internal: 同上,范围针对所有互联网用户
trusted: 信任所有连接
二、端口转发
#firewall-cmd --permanent --add-forward-port=port=5423:proto=tcp:toport=80 把端口5423转发到80端口上
#firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.X.0/24 forward-port port=5423 to-port=80 protocol=tcp accept'
Centos7 防火墙 firewalld 实用操作
一.前言
Centos7以上的发行版都试自带了firewalld防火墙的,firewalld去带了iptables防火墙。其原因是iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。 相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
区域对于 firewalld 来说是一大特色,但是对于我们使用Centos7一般是在服务器上,需要切换zone的需求比较少,所以本文不做介绍了,网上资料也比较多,大家可以去百度找找资料。
二.操作与配置
1.服务操作
systemctl start firewalld #启动服务(这里不用担心启用了防火墙以后无法通过ssh远程,22端口默认加入了允许规则)
systemctl stop firewalld #停止服务
systemctl restart firewalld #重启服务
systemctl status firewalld #查看服务状态
参考文档:https://blog.csdn.net/u012486840/article/details/52635263
firewall-cmd --get-active-zones #查看已被激活的 zone 信息
firewall-cmd --get-zone-of-interface=ens192 #查看指定接口的 zone 信息
firewall-cmd --zone=public --list-interfaces #查看指定接口的 Zone 信息
firewall-cmd --zone=public --list-all #查看指定级别所有信息,譬如 public
firewall-cmd --get-service #查看所有级别被允许的信息
firewall-cmd --get-service --permanent #查看重启后所有 Zones 级别中被允许的服务,即永久放行的服务
管理规则:
firewall-cmd --panic-on # 丢弃
firewall-cmd --panic-off # 取消丢弃
firewall-cmd --query-panic # 查看丢弃状态
firewall-cmd --reload # 更新规则,不重启服务
firewall-cmd --complete-reload # 更新规则,重启服务
firewall-cmd --zone=public --add-interface=eth0 --permanent #添加某接口至某信任等级,譬如添加 eth0 至 public,再永久生效
firewall-cmd --set-default-zone=public #设置 public 为默认的信任级别
firewall-cmd --zone=dmz --list-ports #列出 dmz 级别的被允许的进入端口
2.配置文件说明
firewalld 存放配置文件有两个目录,/usr/lib/firewalld 和 /etc/firewalld,前者存放了一些默认的文件,后者主要是存放用户自定义的数据,所以我们添加的service或者rule都在后者下面进行。
server 文件夹存储服务数据,就是一组定义好的规则。
zones 存储区域规则
firewalld.conf 默认配置文件,可以设置默认使用的区域,默认区域为 public,对应 zones目录下的 public.xml
示例文件:
cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="vnc-server"/>
</zone>
其中 service name 的值就是 firewall-cmd --list-all 中看到的值
三.命令
这里需要首先说明的是,在执行命令时,如果没有带 --permanent 参数表示配置立即生效,但是不会对该配置进行存储,相当于重启服务器就会丢失。如果带上则会将配置存储到配置文件,,但是这种仅仅是将配置存储到文件,却并不会实时生效,需要执行 firewall-cmd --reload 命令重载配置才会生效。
firewall-cmd --reload #重载防火墙配置
firewall-cmd --state #查看防火墙运行状态
firewall-cmd --list-all #查看默认区域的设置
#应急命令
firewall-cmd --panic-on # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd --panic-off # 取消应急模式,但需要重启firewalld后才可以远程ssh
firewall-cmd --query-panic # 查看是否为应急模式
#服务
firewall-cmd --add-service=<service name> #添加服务
firewall-cmd --remove-service=<service name> #移除服务
#端口
firewall-cmd --add-port=<port>/<protocol> #添加端口/协议(TCP/UDP)
firewall-cmd --remove-port=<port>/<protocol> #移除端口/协议(TCP/UDP)
firewall-cmd --list-ports #查看开放的端口
#协议
firewall-cmd --add-protocol=<protocol> # 允许协议 (例:icmp,即允许ping)
firewall-cmd --remove-protocol=<protocol> # 取消协议
firewall-cmd --list-protocols # 查看允许的协议
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" accept" #允许指定ip的所有流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" accept" # 表示允许来自192.168.2.1的所有流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" protocol value="<protocol>" accept" # 允许指定ip的指定协议
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept" # 允许192.168.2.208主机的icmp协议,即允许192.168.2.208主机ping
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept" #允许指定ip访问指定服务
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" # 允许192.168.2.208主机访问ssh服务
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept" #允许指定ip访问指定端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" # 允许192.168.2.1主机访问22端口
#将指定ip改为网段(8-11 的各个命令都支持 source address 设置为网段,即这个网段的ip都是适配这个规则)
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept" #表示允许192.168.2.0/24网段的主机访问22端口 。
#禁止指定ip/网段(8-12 各个命令中,将 accept 设置为 reject 表示拒绝,设置为 drop表示直接丢弃(会返回timeout连接超时))
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" reject" #表示禁止192.168.2.0/24网段的主机访问22端口 。
firewall-cmd --add-forward-port=port=10080:proto=tcp:toport=22 #将本地端口 10080 转发到 22 端口
firewall-cmd --remove-forward-port=port=10080:proto=tcp:toport=22 #删除
firewall-cmd --zone=dmz --add-port=8080/tcp #允许 tcp 端口 8080 至 dmz 级别
firewall-cmd --zome=public --add-port=5060-5059/udp --permanent #允许某范围的 udp 端口至 public 级别,并永久生效
firewall-cmd --zone=work --add-service=smtp #添加 smtp 服务至 work zone
irewall-cmd --zone=work --remove-service=smtp
firewalld 端口转发(需要先打开伪装):
firewall-cmd --add-masquerade #查看默认区域伪装是否开启
firewalld 伪装:
参考文档:https://blog.csdn.net/u012486840/article/details/52635263
firewall-cmd --zone=external --query-masquerade #查看external区域是否开启伪装
firewall-cmd --zone=external --add-masquerade #打开伪装
firewall-cmd --zone=external --remove-masquerade #关闭伪装
firewall-cmd --list-all |grep masquerade
masquerade: yes #yes 表示开启,no 表示没有开启
##将 10080 端口转发到 10.0.13.54 的 3389 端口(10080 端口可以没有打开,也可以是已打开的端口)
firewall-cmd --add-forward-port=port=10080:proto=tcp:toport=3389:toaddr=10.0.13.54
firewall-cmd --add-forward-port=port=5902:proto=tcp:toport=3389:toaddr=10.0.13.54