共计 3013 个字符,预计需要花费 8 分钟才能阅读完成。
一. 前言
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
2. 配置文件说明
firewalld 存放配置文件有两个目录,/usr/lib/firewalld 和 /etc/firewalld,前者存放了一些默认的文件,后者主要是存放用户自定义的数据,所以我们添加的 service 或者 rule 都在后者下面进行。
server 文件夹存储服务数据,就是一组定义好的规则。
zones 存储区域规则
firewalld.conf 默认配置文件,可以设置默认使用的区域,默认区域为 public,对应 zones 目录下的 public.xml
三. 命令
这里需要首先说明的是,在执行命令时,如果没有带 –permanent 参数表示配置立即生效,但是不会对该配置进行存储,相当于重启服务器就会丢失。如果带上则会将配置存储到配置文件,,但是这种仅仅是将配置存储到文件,却并不会实时生效,需要执行 firewall-cmd –reload 命令重载配置才会生效。
1. 重载防火墙配置
firewall-cmd –reload
2. 查看防火墙运行状态
firewall-cmd –state
3. 查看默认区域的设置
firewall-cmd –list-all
4. 应急命令
firewall-cmd –panic-on # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd –panic-off # 取消应急模式,但需要重启 firewalld 后才可以远程 ssh
firewall-cmd –query-panic # 查看是否为应急模式
5. 服务
firewall-cmd –add-service=<service name> #添加服务
firewall-cmd –remove-service=<service name> #移除服务
6. 端口
firewall-cmd –add-port=<port>/<protocol> #添加端口 / 协议(TCP/UDP)
firewall-cmd –remove-port=<port>/<protocol> #移除端口 / 协议(TCP/UDP)
firewall-cmd –list-ports #查看开放的端口
7. 协议
firewall-cmd –add-protocol=<protocol> # 允许协议 (例:icmp,即允许 ping)
firewall-cmd –remove-protocol=<protocol> # 取消协议
firewall-cmd –list-protocols # 查看允许的协议
8. 允许指定 ip 的所有流量
firewall-cmd –add-rich-rule=”rule family=”ipv4″ source address=”<ip>” accept”
例:
firewall-cmd –add-rich-rule=”rule family=”ipv4″ source address=”192.168.2.1″ accept” # 表示允许来自 192.168.2.1 的所有流量
9. 允许指定 ip 的指定协议
firewall-cmd –add-rich-rule=”rule family=”ipv4″ source address=”<ip>” protocol value=”<protocol>” accept”
例:
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
10. 允许指定 ip 访问指定服务
firewall-cmd –add-rich-rule=”rule family=”ipv4″ source address=”<ip>” service name=”<service name>” accept”
例:
firewall-cmd –add-rich-rule=”rule family=”ipv4″ source address=”192.168.2.208″ service name=”ssh” accept” # 允许 192.168.2.208 主机访问 ssh 服务
11. 允许指定 ip 访问指定端口
firewall-cmd –add-rich-rule=”rule family=”ipv4″ source address=”<ip>” port protocol=”<port protocol>” port=”<port>” accept”
例:
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 端口
12. 将指定 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 端口。
13. 禁止指定 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 端口。
四. 参考资料
firewalld 防火墙详解 by xuad88.
本文作者:晓晨 master 阅读原文
本文为云栖社区原创内容,未经允许不得转载。