centos7门卫:firewalld
一. 简介
centos7现在默认防火墙换成了firewalld,以前是iptables,相比起来firewalld真是省心又省事。
需要说的是firewalld和iptables都不是真正的防火墙,他们的作用都是维护规则,而真正使用规则实现防火墙功能的是内核的netfilter。
二. 出事了
之前对这两个了解都不多,iptables用过accept几个tcp端口,也没什么问题,或者说我没注意到有什么问题。
升级到centos7之后也跟着系统用上了firewalld,看网上教程开放了80(http)、443(https)、3306(mysql)、3690(svn)端口,结果就出事了。
有一天闲着没事查看了我的vps开放了哪些端口,发现开放的这么多端口中并不包括22这个我平时ssh登陆用的端口,那我怎么登上去的?为了确认问题,我把443(https)端口去掉了,结果。。。https://wangbin.io可以正常访问,不相信的我又去掉了其他的几个端口,都可以正常使用,终于意识到事大了。
三. centos的门卫
为什么事大了呢,因为对于linux刚入门的我,安全方面的了解很少,而防火墙这个门卫可以说就是全部了。连这个门卫都配置错了,那我的vps安全程度基本为零,只能听天由命了。
防火墙是门卫的概念是从你真的理解防火墙吗?中学习的,讲的很有道理,推荐大家也看下。所有访问的第一站都是防火墙,它像门卫一样放行、拒绝或者指路。
套路(zone)
firewalld这个门卫是有套路的,执行firewall-cmd --get-zones
命令可以看到有work drop internal external trusted home dmz public block共9种套路。
drop(丢弃):
任何流入网络的包都被丢弃,不作出任何响应,只允许流出的网络连接.
block(阻塞):
任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文,只允许由该系统初始化的网络连接.
public(公开):
用以可以公开的部分,你认为网络中其他的计算机不可信并且可能伤害你的计算机,只允许选中的连接接入
external(外部):
用在路由器等启用伪装的外部网络,你认为网络中其他的计算机不可信并且可能伤害你的计算机,只允许选中的连接接入.
dmz(隔离区):
用以允许隔离区中的电脑有限地被外界网络访问。只接受被选中的连接。
work(工作):
用在工作网络,你信任网络中的大多数计算机不会影响你的计算机,只接受被选中的连接。
home(家庭):
用在家庭网络,你信任网络中的大多数计算机不会影响你的计算机,只接受被选中的连接.
internal(内部):
用在内部网络,你信任网络中的大多数计算机不会影响你的计算机,只接受被选中的连接.
trusted(受信任的)
允许所有网络连接。
走哪个套路
对于每个请求,firewalld是通过三种方法来判断使用哪个套路的:
-
source,也就是源地址
-
interface,接收请求的网卡
-
firewalld.conf中配置的默认zone
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是默认zone。
虽然优先级这么排,但是对我来说最重要的还是最后一个,因为
-
source可以是ip也可以是ip段,相同的source节点只可以在一个zone中进行配置,这个一般我们都是动态ip访问,不会设置它,所以不用关注。
-
interface更不用关注了,一般我们只有一个网卡。
我的vps所有的请求都会被这个套路。
套路(zone)详解
执行firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http shadowsocks ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
可以看到zone有target、icmp-block-inversion、interfaces、services、ports、protocols、masquerade、forward-ports、sourceports、icmp-blocks、rich rules属性。
其中用的最多的是services和ports。
services
表示一个服务,会先在/etc/firewalld/services/找配置文件,然后去/usr/lib/firewalld/services/找,配置xml文件里其实也是协议(tcp、udp)和端口(22、80),相当于起个别名。我们自己的配置放在/etc/firewalld/services/里,如果不用了或者想知道自己定义了哪些到这个文件夹做操作就可以了。
ports
端口,这个没说的,协议(tcp、udp)/端口(22、80)
四. 命令
//安装
yum install firewalld
//开启
systemctl start firewalld.service
//停止
systemctl stop firewalld.service
//开机启动
systemctl enable firewalld.service
//关闭开机启动
systemctl disable firewalld.service
//列出当前默认配置
firewall-cmd --list-all
//zone
//设置默认zone
firewall-cmd --set-default-zone=public
//查看默认zone
firewall-cmd --get-default-zone
//service
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --remove-service=ssh --permanent
//ports
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --remove-port=80/tcp --permanent
//重新加载
firewall-cmd --reload
三. 总结
我之前出事,就是因为我的默认套路不知道怎么设成了trusted,允许所有网络接入。。。
所以,赶紧给centos请个好的门卫吧,心安
参考: