firewalld 是centos7 新出的防火墙。
至于开启防火墙的重要性,在这里就不多强调了
为什么放弃了iptables 而选择了 firewalld呢?
1、firewalld可以动态配置,即时生效。
2、提供了强大易用的工具(Complete D-Bus API)firewall-cmd等等,给用户或者其他应用调用
3、两用状态配置(runtime,permanent)更方便用户测试调试
Complete D-Bus API (firewall-cmd, firewallctl, firewall-config and firewall-applet)
IPv4, IPv6, bridge and ipset support(支持IPv6,桥接,IP集)
IPv4 and IPv6 NAT support (支持IPv4/IPv6地址转换)
Firewall zones (防火墙区域)
Predefined list of zones, services and icmptypes(预设,服务,报文类型)
Simple service, port, protocol, source port, masquerading, port forwarding, icmp filter, rich rule, interface and source address handlig in zones
Simple service definition with ports, protocols, source ports, modules (netfilter helpers) and destination address handling
Rich Language for more flexible and complex rules in zones(丰富的语法)
Timed firewall rules in zones (有时限的规则)
Simple log of denied packets(拒包log)
Direct interface (直接接口)
Lockdown: Whitelisting of applications that may modify the firewall(可以控制firewall的应用白名单)
Automatic loading of Linux kernel modules(自动加载linux内核模块)
Integration with Puppet()
Command line clints for online and offline configuration(在线配置命令行,离线配置命令行)
Graphical configuration tool using gtk3(图形界面管理工具)
Applet using Qt4
zone : (空间,区域)
在CentOS/RHEL 7系统中,基于用户对网络中设备和通信所给与的信任程度
防火墙可用于将网络划分成不同的区域,
类似windows下 的网络环境,在接入新的网络时,window会让你决定当前网络的安全程度(家庭网络,工作网络,公共网络)
预设的区域类型如下:
drop:拒绝所有外部连接请求。
block:拒绝所有外部连接(with an icmp-host-prohibited message for IPv4 and icmp6-adm-prohibited for IPv6),允许内部发起的连接
public:适用公共环境,拒绝所有外部连接请求,但指定外部连接可以进入
external:特别适用路由器启用了伪装功能的外部网。拒绝所有外部连接请求,只能接收经过选择的连接。
dmz:用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。(受限制的公共连接可以进入)
work:适用于工作网络环境,概念和workgoup一样,也是指定的外部连接允许用于工作区。
home:类似家庭组,用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal:用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted:可接受所有的网络连接。(最不安全)
public、external、dmz、work、home从功能上都需要自定义允许连接,默认都是拒绝所有外部连接请求,
但是信任级别不一样, 信不信任是一回事,基本都是拒绝所有外部请求,都要额外开放配置
当然,也可以自定义zone
防火墙的使用,主要是在防火墙的配置。
yum install firewalld firewall-config
firewall-cmd 就是一个操作命令行,当然redhat 也有图形界面版。
所有配置操作监控都可以通过firewall-cmd来操作
firewall-cmd --version
(要在firewalld启动状态才能看到版本号)
firewall-offline-cmd --version(这个是离线下的client ,可以在服务器未启动的状态下查看版本号)
firewall-cmd --help
systemctl status firewalld 或者 firewall-cmd --state
注意firewall-offline-cmd --state 不能查看服务状态
systemctl start firewalld
systemctl stop firewalld
systemctl disable firewalld
firewalld 是支持动态配置的,动态配置有两种属性:一种是运行时的, 重启后失效。另一种是永久生效的,
会写到配置文件里, 配置时,需要加上参数--permanent
空间配置(zone,空间可以看成是一系列的规则):
获取默认空间(在没有配置指定空间的网卡下有效):firewall-cmd --get-default-zone
设置默认空间(在没有配置指定空间的网卡下有效):firewall-cmd --set-default-zone=public
把网卡添加在空间里:
firewall-cmd --zone=trusted --add-interface=eth0
firewall-cmd --zone=public --add-interface=eth1
查看网卡所在空间:
firewall-cmd --get-zone-of-interface=eth0
firewall-cmd --get-zone-of-interface=eth1
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态:firewall-cmd --panic-off
查看是否拒绝:firewall-cmd --query-panic
更新防火墙规则:firewall-cmd --reload
或者 firewall-cmd --complete-reload
后者会重启
端口配置:
查看某个空间所有打开的端口:
firewall-cmd --zone=public --list-ports
给指定空间开放特定端口:
firewall-offline-cmd --zone=public --add-port=22/tcp
firewall-offline-cmd --zone=public --add-port=80/tcp
firewall-offline-cmd --zone=public --add-port=111/tcp
firewall-offline-cmd --zone=public --add-port=443/tcp
firewall-offline-cmd --zone=public --add-port=3690/tcp
firewall-offline-cmd --zone=public --add-port=8081/tcp
然后启动服务:systemctl start firewalld
测试没问题后, firewall-cmd --runtime-to-permanent
另外,也可以修改xml配置文件,然后重载配置 firewall-cmd --reload
这里只是个人学习使用firewall总结的一些笔记,firewall是个很强大的应用,这里只是冰山一角,希望对大家的探索有些帮助。
参考 :firewalld 官网