Linux Centos7 firewall防火墙的基本操作
Centos7中使用firewalld来作为防火墙,其底层调用的命令仍然是iptables等命令,但是在配置上发生了较大的变化。 Centos7中有两个位置存放了firewall的配置文件,一个是/etc/firewalld,一个是/usr/lib/firewalld,前者是用户配置目录,后者是系统配置目录。/usr/lib/firewalld目录中存放的是firewalld提供的一些默认和备份的配置文件,一般不随意改变,/etc/firewalld目录下才是用户配置的真正生效的配置文件,只有在/etc/firewalld目录不存在或该目录下不存在配置文件的情况下/usr/lib/firewalld目录下的配置文件才会生效。
zone的概念
zone定义了防火墙对某个连接、网口(interface)或源地址的信任等级,我们可以把他理解为防火墙对不同的连接(connection)、网口(interface)或源地址(source address)划分到不同的zone当中,而不同的zone定义了不同的规则,因此防火墙可以针对不同的连接、网口(interface)或源地址做出不同的行为。例如,我们将10.12.18.201这个地址划分到zone1中,将10.12.18.202这个地址划分到zone2中,然后zone1中定义的规则为:允许访问3306端口,其余的端口都拒绝访问;zone2中定义的规则为:拒绝访问3306端口,其余的端口都允许访问。那么10.12.18.201就仅能访问本机的3306端口,10.12.18.202就仅不能访问本机的3306端口。每个zone的防火墙规则是通过/etc/firewalld/zones目录下的xml配置文件来配置的。
zone和connection、interface、source address之间是一对多的关系,即一个connection、interface或source address仅能划分到一个zone中,而一个zone中可以包含多个connection、interface或source address。
对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址
2、interface,接收请求的网卡
3、firewalld.conf中配置的默认zone
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是学生在前面给大家讲过的在firewalld.conf中配置的默认zone。
预定义的zone
Centos7中firewalld为用户预定义了9个zone,分别为drop,block,public,external,dmz,work,home,internal,trusted。这9个zone的配置文件在/usr/lib/firewalld/zones目录下,通过查看他们的配置文件可以得知这9个zone的规则是怎么样的。
drop:任何传入本机的网络数据包都会被丢弃,并且不会回复,只允许本机对外访问其他服务器。
block:任何传入本机的网络连接请求都会被拒绝,并且会回复一条拒绝访问的消息。
public:用于本机处于公共网络环境的场景下,仅接受特定的连接请求,如仅接受某些特定的IP的连接请求,或仅对外部开放特定的某些端口。Centos 7 默认的public.xml文件中仅开放用于ssh连接请求的22端口和dhcpv6-client服务的546端口。
external:与public类似,Centos 7 默认仅开放用于ssh连接请求的22端口。
dmz:与external一样,Centos 7 默认也是仅开放用于ssh连接请求的22端口。
work:用于工作网络环境场景下,信任大部分的其他的计算机不会对本机进行攻击。Centos 7 默认开放用于ssh连接请求的22端口,dhcpv6-client服务的546端口,以及IPP协议的631端口。
home:用于家庭网络环境,信任网络上的其他计算机不会攻击本机。Centos 7默认开放用于ssh连接请求的22端口,dhcpv6-client服务的546端口,IPP协议的631端口,samba服务的137、138端口,mDNS服务的5353端口。
internal:与home一样,Centos 7默认开放用于ssh连接请求的22端口,dhcpv6-client服务的546端口,IPP协议的631端口,samba服务的137、138端口,mDNS服务的5353端口。
trusted:所有对本机的网络连接请求都会被接受。
(注:如果更改的防火墙配置,记得要执行 firewall-cmd –reload 重新加载一次才会生效。)
操作firewall防火墙的常用命令
-
查看防火墙状态
systemctl status firewalld -
关闭防火墙
systemctl stop firewalld -
打开防火墙
systemctl start firewalld -
重启防火墙
systemctl restart firewalld.service -
开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
//在public作用域中开放80端口。
返回success为成功。 -
关闭端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
//在public作用域中关闭80端口。
其中--zone
是作用域,--add-port=80/tcp
添加80端口,通讯协议为TCP,--permanent
设置为永久生效。 -
开放一段端口
firewall-cmd --zone=public --add-port=40000-45000/tcp --permanent
重新加载Firewalld守护程序以使更改生效:
firewall-cmd --reload
-
查看开放的端口列表
firewall-cmd --zone=public --list-ports
//列出public作用域开放的端口
firewall-cmd --list-all
//列出全部开放的端口(并能查看到当前活动的作用域) -
查看与公共区域关联的防火墙规则或服务
firewall-cmd --list-all
-
查看与某个区域关联的防火墙规则或服务,例如查看block这个区域
firewall-cmd --zone=block --list-all
-
将某个source(IP地址)划分到某个zone的命令如下:
firewall-cmd [--permanent] [--zone=zone] --add-source=source
例如:
firewall-cmd --permanent --zone=trusted --add-source=192.168.5.112
这条命令会将192.168.5.112这个ip划分到trusted这个zone,-–permanent
参数会将该配置写入trusted这个zone的配置文件trusted.xml中,使其永久生效。如果不加–permanent,则只会临时生效,重启防火墙或者调用firewall-cmd --reload
重新加载配置文件会使得该项配置失效。 -
将某个网口(interface)划分到某个zone的命令如下:
firewall-cmd [--permanent] [--zone=zone] --add-interface=interface
例如:
firewall-cmd --permanent --zone=block --add-interface=ens33
这条命令会将ens33这个网口划分到block这个zone,这样其他机器访问本机的ens33网口时就会默认走这个zone。
如果某个连接请求没有划分到任何一个zone,那么就会走默认的zone,Centos7 默认情况下,默认zone为public。可以通过以下命令查看或者修改默认zone。 -
获取默认的zone:
firewall-cmd --get-default-zone
-
修改默认的zone:
firewall-cmd --permanent --set-default-zone=[zone]
创建新的区域
firewalld还允许您创建自己的区域。当您想要创建每个应用程序的规则时,这很方便。在以下示例中,我们将创建一个名为memcached的新分区,打开端口11211,并仅允许从IP地址192.168.100.30进行访问:
firewall-cmd --new-zone=visitors --permanent
开放端口添加端口
firewall-cmd --zone=visitors --add-port=80/tcp --permanent
firewall-cmd --zone=visitors --add-port=53/tcp --permanent
firewall-cmd --zone=visitors --add-source=10.10.2.0/24 --permanent
重新加载Firewalld守护程序以激活更改:
firewall-cmd --reload
…………………………………………………
其他的一些相关的命令:
列出该zone下绑定了哪些interface:
firewall-cmd [--zone=zone] --list-interfaces
将该interface绑定到另一个zone上:
firewall-cmd [--permanent] [--zone=zone] --change-interface=interface
如果该interface之前绑定到了某个zone,可以取消绑定,取消绑定后,会走默认的zone:
firewall-cmd [--permanent] --remove-interface=interface
与source相关的:
把某个ip绑定到source中
firewall-cmd [--permanent] [--zone=zone] --add-source=source
例如:
firewall-cmd --permanent --zone=public --add-source=192.168.1.111
从某个source中把某个ip取消绑定(删除绑定)
firewall-cmd [--permanent] --remove-source=source
例如:
firewall-cmd --permanent --zone=public --remove-source=192.168.1.111
查看source中的绑定
firewall-cmd [--permanent] [--zone=zone] --list-sources
………………………………….
向firewalld中添加规则:
将服务添加到特定的区域
指定特定的zone区域名称,并且使用–add-service添加服务名称
firewall-cmd --zone=public --add-service=dns --permanent
从区域中删除(删除)服务
firewall-cmd --zone=public --remove-service=dns --permanent
如何允许/打开TCP/UDP端口/协议
firewall-cmd --zone=public --add-port=8080/tcp --permanent
验证结构,可以使用以下命令验证
firewall-cmd --list-ports
拒绝/阻止TCP/UDP端口/协议
firewall-cmd --zone=public --remove-port=23/tcp --permanent
打开端口和源IP
Firewalld还允许您快速启用来自可信IP地址或特定端口的所有流量,而无需创建服务定义
开放源IP:
要允许来自特定IP地址(或范围)的所有传入流量,请使用–zone选项指定区域,并使用–add-source选项指定源IP。例如,要允许公共区域中来自192.168.172.32的所有传入流量,请运行:
firewall-cmd --zone=public --add-source=192.168.172.32