服务器管理员们有件事肯定最头疼,那就是有些黑客一天到晚的在那里进行密码爆破,一天不登录,就能有数十万次的登录尝试。运气不好的话,上次成功登录的可能已经就不是你了。
当然,这种情况自古有之。为了对抗这种行为,各个操作系统厂商专门为系统开发了防火墙。下面记录一下我在防火墙(firewalld)操作中经常使用到的命令。
1、开启防火墙
1 2 |
systemctl enable firewalld #开启firewalld的开机启动 systemctl start firewalld #启动firewalld防火墙 |
如果ssh端口是默认的#22端口,启动防火墙后不会有任何影响,因为ssh使用的#22端口已经被加入到了默认规则“public”的例外中。
2、查看防火墙状态
1 2 |
systemctl status firewalld #使用系统命令查看firewalld是否在运行 firewall-cmd --state #使用firewalld命令查看防火墙状态,正常会显示“running” |
3、重新加载配置文件
1 2 |
firewall-cmd --reload #重新加载配置文件(平滑重启,现有连接不影响) firewall-cmd --complete-reload #重新加载配置文件(硬性重启,会中断现有连接) |
4、列出默认配置中已经开放的端口和服务
1 |
firewall-cmd --list-all |
5、在默认规则中添加/移除端口例外
在默认规则中添加端口例外有两种形式,一种是直接开放端口+协议,还有一种是开放相关“服务”。“服务”中包含了某种功能对应的端口和协议,直接开放协议即可将对应的端口和协议一次性添加。
1 2 3 4 |
firewall-cmd --add-port=80/tcp #添加端口立即(暂时)生效,重新加载配置文件后端口失效 firewall-cmd --add-port=80/tcp --permanent #添加端口永久保存(未生效),重新加载配置文件后端口生效 firewall-cmd --add-service=http #添加服务立即(暂时)生效,重新加载配置文件后服务失效 firewall-cmd --add-service=http --permanent #添加服务永久保存(未生效),重新加载配置文件后服务生效 |
命令中的,“–permanent”代表永久保存,但不能立即生效,需要重新加载配置文件。“80/tcp”和“http”可以根据实际情况进行修改,移除端口和服务可以将命令中的“add”修改为“remove”。
1 |
firewall-cmd --get-services #列出存储在/usr/lib/firewalld/services/目录中的服务。 |
如果默认存在的服务不能满足需要,可以自行添加。
6、富规则
“富规则”直译自“rich rules”,代表通过这些命令,可以实现更多的功能,比如,允许某个范围的IP对某个端口/服务的访问
1 |
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="22" accept" |
防火墙默认规则是将所有访问挡在墙外,通过上述命令,192.168.0.0/24范围内的所有IP,从192.168.0.1到192.168.0.254已经能够正常访问服务器#22端口上的TCP(ssh)服务了。不要忘记,“–permanent”代表保存,但是并未生效,需要重新加载配置文件。
7、可信域
随着服务器功能越来越多,需要添加的富规则也就越多,不方便管理。这时,我们可以将管理员常用的IP加入“信任”区域,将管理员的访问自动放行,对公共区域仅开放必须的端口,比如http等。
1 |
firewall-cmd --get-zones #查看所有区域 |
firewalld中一共存在“block”、“dmz”、“drop”、“external”、“home”,“internal”、“public”、“trusted”、“work”共9个信任区域,每
个区域的默认设置是不相同的。1-6点中的所有设置被默认保存在默认区域“public”中。
1 |
firewall-cmd --permanent --zone=trusted --add-source=192.168.0.0/24 #将192.168.0.0/24加入“trusted”可信区域中 |
这样,192.168.0.0/24范围内的地址再次访问服务器时就不会受到防火墙阻挡了,同时也精简了防火墙规则。