之前使用CentOS6的时候一直使用的是iptables服务来进行防火墙策略的配置,但从CentOS7开始系统默认自带的防火墙工具是firewalld,想要使用iptables还得另外安装,刚好项目需要搭建一个测试环境,模拟网络隔离的场景,于是用firewalld试了一把。
firewalld的基本使用
要配置策略,前提是firewalld服务得启动,所以先来了解一下firewalld服务的一些常用命令吧!
CentOS7推荐使用systemctl来代替service命令的使用,它是融合了之前service和chkconfig的功能,刚开始使用还有点不太顺手。。
-
查看firewalld的状态:
systemctl status firewalld
-
启动firewalld:
systemctl start firewalld
-
关闭firewalld:
systemctl stop firewalld
-
禁用firewalld:
systemctl disable firewalld
查看防火墙配置
1. iptables命令
虽然CentOS默认不支持iptables服务了,但是iptables命令还是可以继续使用的,依然可以通过iptables -L -n
来查看当前的防火墙配置。
2. firewall-cmd命令
firewall-cmd是firewalld服务的命令行工具,通过firewall-cmd命令也可查看当前配置的防火墙策略。
- firewall-cmd --list-all 只显示public域下的策略
- firewall-cmd --list-all-zones 显示所有的策略
3. 配置文件
上面的命令行都是从配置文件中读取信息进行呈现的,对应的配置文件路径为:/etc/firewalld/zones/public.xml
里面的配置内容大致如下:
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<rule family="ipv4">
<source address="10.10.3.21"/>
<reject/>
</rule>
</zone>
限制IP访问
防火墙的配置规则有很多,本文仅以限制IP访问为例来对配置方法进行介绍。
- 需求:10.10.2.21这台机器上需要限制10.10.3.21机器进行访问。
- 配置方法:
# 在2.21上执行如下命令
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=10.10.3.21 reject"
firewall-cmd --reload
- 验证:
配置之前,在3.21上ping2.21的机器,可以正常返回响应。
通过上述方法进行配置之后,再次ping2.21,已经显示不通了。
REJECT和DROP
在配置防火墙策略的时候,我们要限制IP的访问,可以使用REJECT和DROP两种方式,那么它们有何区别呢?
-
DROP只是会将所有收到的包丢弃,不会返回响应,因此在请求侧在等待一段时间后会看到响应超时的提示。
-
REJECT则会回复一个拒绝的数据包,因此请求侧会马上显示REFUSE的提示。