1.firewalld介绍

由于centos 7版本以后默认使用firewalld。官方文档如下:

官方文档地址:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld


1.1 firewalld简介

firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念

firewalld有图形界面和工具界面,由于我在服务器上使用,图形界面请参照官方文档,本文以字符界面做介绍

firewalld的字符界面管理工具是 firewall-cmd 

firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)


1.2 zone概念

硬件防火墙默认一般有三个区,firewalld引入这一概念系统默认存在以下区域(根据文档自己理解,如果有误请指正):

drop(丢弃):默认丢弃所有包

block(限制):拒绝所有外部连接,允许内部发起的连接

public(公共):指定外部连接可以进入

external(外部):这个不太明白,功能上和上面相同,允许指定的外部连接

dmz(非军事):和硬件防火墙一样,受限制的公共连接可以进入

work(工作):工作区,概念和workgoup一样,也是指定的外部连接允许

home(家庭):类似家庭组

internal(内部):使用内部网络,信任所有连接。

trusted(信任):可接受所有的网络连接。

1.png



2.firewalld的安装和使用

2.1安装firewalld

# yum install firewalld firewall-config

# systemctl enable firewalld

# systemctl start firewalld



2.2 运行、停止、禁用firewalld

启动:# systemctl start  firewalld

查看状态:# systemctl status firewalld 或者 firewall-cmd --state

停止:# systemctl disable firewalld

禁用:# systemctl stop firewalld

重载:#  firewall-cmd --reload



2.3 zone 增删查改设

查看全部的zone

# firewall-cmd --get-zones

block dmz drop external home internal public trusted work


查看默认的zone

# firewall-cmd --get-default-zone

public


修改默认的zone

# firewall-cmd --set-default-zone=work

success


指定网卡查询zone

# firewall-cmd --get-zone-of-interface=ens33

work

# firewall-cmd --get-zone-of-interface=ens37

no zone


给指定网卡设置zone

# firewall-cmd --zone=public --add-interface=ens37

success


给指定网卡修改zone

# firewall-cmd --zone=dmz --change-interface=lo

success


给指定网卡删除zone

# firewall-cmd --zone=dmz  --remove-interface=lo

success

# firewall-cmd --get-zone-of-interface=lo      

no zone


查看所有网卡所在的zone

# firewall-cmd --get-active-zones                

dmz

interfaces: ens37

work

interfaces: ens33



2.4 service 增删查改设

查看所有的service,(其实都是一些服务的名字)

# firewall-cmd  --get-services


查看当前zone的service

# firewall-cmd --list-services

ssh dhcpv6-client


查看指定zone下的service

# firewall-cmd --zone=public --list-service  

ssh dhcpv6-client


把http服务添加指定zone里面

# firewall-cmd --zone=public --add-service=http

success

# firewall-cmd --zone=public --list-service      

ssh dhcpv6-client http


把http服务添加指定zone里面,并写入配置文件

# firewall-cmd --zone=public --add-service=http --permanent

success

# cat /etc/firewalld/zones/public.xml

<service name="http"/>


删掉指定zone的http服务

# firewall-cmd --zone=public --remove-service=http

success



2.5 firewalld 文件

/etc/firewalld/zones/ 是zone类型开头.xml格式文件。还有前面文件.old结尾的文件的备份。例如:

public.xml  public.xml.old。分别保存了现在的文件,和修改之前的备份,用于恢复。


/etc/firewalld/services/ 是service类型的文件。

/usr/lib/firewalld/ 里面的 zones 和 services 目录里,分别保存了模板文件。用于手动添加firewalld规则。



3.实例

需求:ftpd服务端口21修改为1121。在 work zone下放行。


新增service文件

# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/

# vim /etc/firewalld/services/ftp.xml

<port protocol="tcp" port="21"/> 修改为  <port protocol="tcp" port="1121"/>



新增work文件

# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

# vim /etc/firewalld/zones/work.xml

新增一行  <service name="ftp"/>



重载firewalld

#  firewall-cmd --reload



查看work zone

# firewall-cmd --zone=work --list-services

ssh dhcpv6-client ftp