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

评论