一、什么是firewalld?
从CentOS7版本开始使用了firewall防火墙服务,7版本里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统。firewalld 提供了一个 daemon 和 service,还有命令行和图形界面配置工具,它仅仅是替代了 iptables service 部分,其底层还是使用 iptables 作为防火墙规则管理入口。firewalld 使用 python 语言开发,在新版本中已经计划使用 c++ 重写 daemon 部分。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样。
- firewalld与iptables:
- firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
- firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
- firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
- firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现
二、firewalld服务基础
1.1 firewalld防火墙体系
1.1.1 一个重要的概念:区域管理
- /etc/sysconfig/iptables 中储存规则配置
- firewalld 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里
- 在/etc/firewalld/的区域设定是一系列可以被快速执行到网络接口的预设定
- 通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。有如下几种不同的初始化区域(默认为public区域):
- 阻塞区域(block):任何传入的网络数据包都将被阻止
- 工作区域(work):相信网络上的其他计算机,不会损害你的计算机
- 家庭区域(home):相信网络上的其他计算机,不会损害你的计算机
- 公共区域(public):不相信网络上的任何计算机,有选择接受入口的网络连接
- 隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,有选择接受入口的网络连接
- 信任区域(trusted):所有的网络连接都接受
- 丢弃区域(drop):任何的网络连接都被拒绝
- 内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接
- 外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接
1.1.2 配置firewalld
- firewalld的配置方法主要有三种:
- firewall-config & //图形化管理工具
- firewall-cmd //命令行管理工具
- 直接编辑xml文件 //修改配置文件 /usr/lib/firewalld/zones/
- 启动:# systemctl start firewalld
- 查看状态:# systemctl status firewalld 或者 firewall-cmd --state
- 停止:# systemctl disable firewalld
- 禁用:# systemctl stop firewalld
- 查看版本:firewall-cmd --version
- 查看帮助: firewall-cmd --help
- 显示状态: firewall-cmd --state
- 查看区域信息: firewall-cmd --get-active-zones
- 查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
- 永久生效再加上:--permanent
- 拒绝所有: firewall-cmd --panic-on
- 取消拒绝状态: firewall-cmd --panic-off
- 查看是否拒绝: firewall-cmd --query-panic
- 查看所有打开的端口:firewall-cmd --zone=dmz --list-ports
- 加入一个端口到区域:firewall-cmd --zone=dmz --add-port=8080/tcp
- 更新防火墙规则: firewall-cmd --reload firewall-cmd --complete-reload 两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
- 将接口添加到区域,默认接口都在public:firewall-cmd --zone=public --add-interface=eth0
- 移除服务:firewall-cmd --zone=work --remove-service=smtp
- 查看防火墙规则列表:
- firewall-cmd --list-all [ --zone=区域名 ]
- firewall-cmd --list-all-zones
- firewall-cmd --get-zones
- firewall-cmd --get-services
- firewall-cmd --get-default-zone
- 指定默认的安全区域
- firewall-cmd --set-default-zone=trusted
- 隔离网段
- firewall-cmd --permanent --zone=block --add-source=172.34.0.0/24
- 添加服务
- firewall-cmd --permanent --zone=public --add-service=http
- firewall-cmd --reload //重载配置
- 端口映射
- firewall-cmd --permanent --zone=trusted --add-forward-port=port=8888:proto=tcp:toport=80
- firewall-cmd --reload //重载配置