1.firewalld介绍
由于centos 7版本以后默认使用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(信任):可接受所有的网络连接。
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
转载于:https://blog.51cto.com/11060853/2114972