Centos7防火墙 firewalld入门

Posted 运维之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7防火墙 firewalld入门相关的知识,希望对你有一定的参考价值。





Centos7防火墙 firewalld入门

Centos7之上的操作系统默认使用firewalld作为防火墙组件,相比之前的iptables来说,firewalld在进行网络管理的时候,更加便利,今天我们来探究一下firewalld的使用方法。


Centos7防火墙 firewalld入门

Centos7防火墙 firewalld入门


防火墙启动


  • 演示机器:10.200.19.146 (打开防火墙)

  • 系统:CentOS Linux release 7.4.1708

  • 10.199.137.114(源端访问发起机器)


注:后文验证,防火墙策略都是在10.200.19.146添加,访问从10.199.137.114发起。


Centos7之上操作系统使用systemctl对组件进行管理。

登录10.200.19.146,检查firewalld状态

systemctl status firewalld.service

[root@localhost  ~]# systemctl status firewalld.service● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)

‍‍‍‍‍‍‍可以看到防火墙是inactive状态

systemctl start/stop firewalld.service  #启动/停止防火墙,然后检查状态。

[root@localhost ~]# systemctl status firewalld.service firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2020-07-08 15:42:37 CST; 1s ago Docs: man:firewalld(1) Main PID: 18267 (firewalld) Tasks: 1 Memory: 25.5M CGroup: /system.slice/firewalld.service └─18267 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Jul 08 15:42:35 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...Jul 08 15:42:37 localhost systemd[1]: Started firewalld - dynamic firewall daemon.

firewalld跟iptables比起来至少有两大好处:

  • firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

  • firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。


firewalld跟iptables相比,默认规则是不同的,firewalld启动后除了ssh端口,其他访问默认是拒绝,而iptables里默认是每个服务是允许,需要拒绝的才去限制。


下面验证一下

Centos7防火墙 firewalld入门

8091是10.200.19.146上apache服务端口,146防火墙已经打开,我们在146上抓包,114上telnet 10.200.19.146 8091看看包的访问情况。

发起端访问,telnet不通

[root@10-199-137-114 ~]# telnet 10.200.19.146 8091Trying 10.200.19.146...

目标端抓包

tcpdump -i any host 10.200.19.146 and port 8091 -nn  -vvv

[root@localhost ~]# tcpdump -i any host 10.200.19.146 and port 8091 -nn -vvvtcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes15:16:03.036467 IP (tos 0x10, ttl 63, id 24397, offset 0, flags [DF], proto TCP (6), length 60) 10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xf110 (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729211707 ecr 0,nop,wscale 7], length 015:16:04.038764 IP (tos 0x10, ttl 63, id 24398, offset 0, flags [DF], proto TCP (6), length 60) 10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xed27 (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729212708 ecr 0,nop,wscale 7], length 015:16:06.041784 IP (tos 0x10, ttl 63, id 24399, offset 0, flags [DF], proto TCP (6), length 60) 10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xe553 (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729214712 ecr 0,nop,wscale 7], length 015:16:10.049588 IP (tos 0x10, ttl 63, id 24400, offset 0, flags [DF], proto TCP (6), length 60) 10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xd5ab (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729218720 ecr 0,nop,wscale 7], length 015:16:18.065025 IP (tos 0x10, ttl 63, id 24401, offset 0, flags [DF], proto TCP (6), length 60) 10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xb65b (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729226736 ecr 0,nop,wscale 7], length 015:16:34.080527 IP (tos 0x10, ttl 63, id 24402, offset 0, flags [DF], proto TCP (6), length 60) 10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0x77cb (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729242752 ecr 0,nop,wscale 7], length 0

从抓包情况我们可以看出,由于10.200.19.146上防火墙打开,从114上访问146的8091端口,146一直没有响应,可以看出firewalld默认是拒绝访问,所以一般情况下,我们会关闭防火墙服务,在服务访问不通的情况下,你不妨去检查下防火墙的状态。



Centos7防火墙 firewalld入门


命令汇总

常用命令

#进程与状态相关systemctl start firewalld.service #启动防火墙 systemctl stop firewalld.service #停止防火墙 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #更新防火墙规则 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #重载防火墙规则 firewall-cmd --list-ports #查看所有打开的端口 firewall-cmd --list-services #查看所有允许的服务 firewall-cmd --get-services #获取所有支持的服务
#区域相关firewall-cmd --list-all-zones #查看所有区域信息 firewall-cmd --get-active-zones #查看活动区域信息 firewall-cmd --set-default-zone=public #设置public为默认区域 firewall-cmd --get-default-zone #查看默认区域信息 firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
#接口相关firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0 firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域
#端口控制firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)firewall-cmd  --zone=public --add-port=65001-65010/tcp --permanent   #永久增加65001-65010例外(区域public)#地址控制firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.199.137.114" accept" -------添加允许单个地址firewall-cmd -permanent --add-rich-rule="rule family="ipv4" source address="10.199.137.0/24"  accept"-------添加允许ip段firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="10.199.137.114" accept"-------删除添加的ip段firewall-cmd -permanent -add-rich-rule="rule family="ipv4" source address="10.199.137.0/24" port protocol="tcp" port="5432" accept"-------控制访问的ip段和端口
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

实战

当前114访问146是拒绝访问的,由于业务交互,我们需要给114添加白名单,允许其访问146,目前有如下几种方法。

  1. 放开8091端口,允许所有地址访问  #单独添加端口是针对全局的
  2. 放开10.199.137.114地址,允许其访问所有端口
  3. 放开10.199.137.114地址和8091端口
  • 操作步骤

查看当前规则

[root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources:  services: ssh dhcpv6-client ports:  protocols:  masquerade: no forward-ports:  source-ports:  icmp-blocks:  rich rules:

当前没有规则,只有默认放开了ssh服务

[root@localhost ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.199.137.114" port protocol="tcp" port="8091" accept"success[root@localhost ~]# firewall-cmd --reload success[root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources:  services: ssh dhcpv6-client ports:  protocols:  masquerade: no forward-ports:  source-ports:  icmp-blocks:  rich rules:  rule family="ipv4" source address="10.199.137.114" port port="8091" protocol="tcp" accept

如上,添加白名单成功,我们在114上访问146测试

[root@10-199-137-114 ~]# telnet 10.200.19.146 8091Trying 10.200.19.146...Connected to 10.200.19.146.Escape character is '^]'.


总结

1、策略添加完成后需要firewall-cmd --reload才能生效;

2、--permanent生产环境需要添加,无此参数重启会失效;

3、firewalld开启后,进入策略默认是关闭的,出去数据包无限制;

4、Firewalld存放配置文件有两个目录,/usr/lib/firewalld和/etc/firewalld,前者存放了一些默认的文件,后者主要是存放用户自定义的数据,所以我们添加的service或者rule都在后者下面进行。


THE

END

Centos7防火墙 firewalld入门

一路同频

ID : 运维之美

一起寻找生命中的光.....

你们点点“分享”,给我充点儿电吧~

以上是关于Centos7防火墙 firewalld入门的主要内容,如果未能解决你的问题,请参考以下文章

Firewalld安全技术介绍

《网络安全入门到精通》-1.2 - Linux系统 - firewalld防火墙&iptables防火墙

CentOS7防火墙服务(Firewalld)关闭实战

centos7版本firewalld防火墙的基本命令配置管理

CentOS7防火墙之--firewalld

firewalld动态防火墙管理-centos7.5技能