CentOS7 系统防火墙firewalld工具手册
国猫 关注
2017.03.06 17:41* 字数 2388 阅读 1228评论 1喜欢 8
0、前言
0.1 firewalld的动态防火墙
Firewalld提供了一个动态管理的防火墙,支持网络/区域来定义网络连接或接口的信任级别。它支持IPv4、IPv6防火墙设置和以太网网桥,并且具有运行时和永久配置选项的分离。它还支持服务或应用程序直接添加防火墙规则的接口。
旧的防火墙使用system-config-防火墙 / lokkit模型是静态的,每次更改都需要完全重新启动防火墙。这还包括卸载防火墙netfilter内核模块,并加载新配置所需的模块。模块的卸载破坏了状态防火墙和建立的连接。
防火墙守护程序在另外的层面动态管理防火墙并应用更改,而不需要重新启动整个防火墙。因此,不需要重新加载所有防火墙内核模块。但是使用防火墙守护程序需要使用该守护程序进行所有防火墙修改,以确保守护程序中的状态和内核中的防火墙保持同步。防火墙守护程序无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。
守护程序通过D-BUS提供有关当前活动防火墙设置的信息,并通过使用PolicyKit身份验证方法的D-BUS接受更改。
Firewalld 的官方主页是 (www.firewalld.org)[www.firewalld.org]
0.2 守护进程
应用程序,守护程序和用户可以请求通过D-BUS启用防火墙功能。 功能可以是预定义的防火墙功能之一,如服务,端口和协议组合,端口/数据包转发,伪装或icmp阻止。 该功能可以启用一段时间,或者可以再次禁用。
使用所谓的直接接口,其他服务(例如libvirt)能够使用iptables参数和参数添加自己的规则。
netfilter防火墙帮助程序,例如用于amanda,ftp,samba和tftp服务,也由守护程序处理,只要它们是预定义服务的一部分。 加载附加助手不是当前界面的一部分。 对于某些帮助器,只有在模块处理的所有连接都关闭后才能卸载。 因此,连接跟踪信息在这里很重要,需要考虑。
0.3 静态防火墙(system-config-firewall/lokkit)
使用 system-config-firewall 和 lokkit 的静态防火墙模型实际上仍然可用并将继续提供,但却不能与“守护进程”同时使用。用户或者管理员可以决定使用哪一种方案。
在软件安装,初次启动或者是首次联网时,将会出现一个选择器。通过它你可以选择要使用的防火墙方案。其他的解决方案将保持完整,可以通过更换模式启用。
firewall daemon 独立于 system-config-firewall,但二者不能同时使用。
1. firewalld常用命令
-
启动firewalld
systemctl start firewalld
-
停止firewalld
systemctl stop firewalld
-
设置firewalld开机启动
sysemctl enable firewalld
-
设置firewalld开机不启动
systemctl disable firewalld
-
查看firewalld当前状态
firewall-cmd --list-all
-
重新读取配置文件
firewall--cmd --reload
-
临时关掉一个已开放的服务端口,在public区域下(如关闭dncpv6-client) (即时生效)
firewall-cmd --zone=public --remove-service dhcpv6-client
-
永久关闭一个已开放的服务端口public区域下(必须reload或者重启服务、重启系统才会生效)(区别在于--permanent)
firewall-cmd --zone=public --remove-service dhcpv6-client --permanent
-
临时启用一个服务规则(如启用dns)(即时生效)
- 永久开启一个已开放的服务端口public区域下(必须reload或者重启服务、重启系统才会生效)
firewall-cmd --add-service=dns --permanent
2. 区域
所谓的 zone 就表示主机位于何种环境,需要设定哪些规则,在 firewalld 里共有 7 個zones
修改区域
vi /etc/firewalld/firewalld.conf 修改 DefaultZone=public
- public: 公开的场所,不信任网域内所有访问请求,只有被允许的访问请求才能进入,一般比较常用这种zone。
- external: 公开的场所,应用在IP是NAT的网络。在外部网络上使用,特别是为路由器启用伪装。不信任网络上的其他计算机。只接受选定的传入连接。
- dmz: (Demilitarized Zone) 非军事区,对于您的非军事区域中的计算机,可以通过有限访问您的内部网络进行公开访问。只接受选定的传入连接。
- work: 用于工作区域。你大多信任网络上的其他计算机不会伤害你的计算机。只接受选定的传入连接。
- home: 用于家庭环境。你大多信任网络上的其他计算机不会伤害你的计算机。只接受选定的传入连接。
- internal: 内部网路,应用在NAT设定时的对内网络。你大多信任网络上的其他计算机不会伤害你的计算机。只接受选定的传入连接。
- trusted: 接受所有的连接。
- drop: 任何进入的封包全部丢弃,只有往外的连线是允许的。
- block: 任何进入的封包全部拒绝,并以icmp回覆对方,只有往外的连线是允许的
3. 配置文件
3.1. 配置文件路径(重启后生效)
- 主配置目录,被用于用户创建和自定义配置文件
/etc/firewalld/
- 主配置文件,被用于用户创建和自定义配置文件
/etc/firewalld/firewalld.conf
- 服务类型配置文件目录,被用于用户创建和自定义配置文件
/etc/firewalld/services/
- 区域配置目录,被用于用户创建和自定义配置文件
/etc/firewalld/zone/
- 预设参考配置路径(xml格式),子目录与主配置目录结构相同,被用于默认和备用配置(配置文件库)
/usr/lib/firewalld/
3.2. 配置实例
3.2.1.例1 修改预设的zone 改为dmz
- 从配置库中拷贝一份dmz配置文件至系统配置内
cp /usr/lib/firewalld/zones/dmz.xml /etc/firewalld/zones/
- 修改firewalld.conf配置文件
vi /etc/firewalld/firewalld.conf
DefaultZone=dmz
#将等号右边的部分修改为你想要使用的zone
- 重新载入配置,生效配置
firewall-cmd --complete-reload
3.2.2.例2 开放sshd远程端口(默认22口)
- 修改zone配置(假设这里使用的zone是public)
vi /etc/firewalld/zones/public.xml
在配置文件中加入 一行:<service name="ssh"/>
如下:
- 重新载入配置,配置生效
firewall-cmd --complete-reload
备注:默认firewalld会优先读取/etc/firewalld/services/ssh.xml配置文件,当该配置文件不存在时,将会读取配置库中的配置/lib/firewalld/services/ssh.xml作为生效配置。
3.2.3.例3 开放自己定义的服务与端口
- 从配置库中拷贝一份service配置文件至系统配置内
cp /lib/firewalld/services/snmp.xml /etc/firewalld/services/
- 将配置文件名称修改为自己需要的服务名(假设需要开放shadowsocks)
cd /etc/firewalld/services/
mv snmp.xml shadowsocks.xml
- 修改service配置内容
vi shadowsocks.xml
- 将服务名称改为我要开放的服务:
<short>SNMP</short>
改为:
<short>shadowsocks</short>
- 将端口改为我需要的端口:
<port protocol="tcp" port="161”/>
改为:
<port protocol="tcp" port="443"/>
- 删除无用的端口:
删除
<port protocol="udp" port="161"/>
- 将服务名称改为我要开放的服务:
- 修改zone配置(假设这里使用的zone是public)
vi /etc/firewalld/zones/public.xml
在配置文件中加入 一行:<service name="shadowsocks"/>
如下:
- 重新载入配置,配置生效
firewall-cmd --complete-reload