Centos7防火墙 firewalld入门
Posted 运维之美
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7防火墙 firewalld入门相关的知识,希望对你有一定的参考价值。
Centos7之上的操作系统默认使用firewalld作为防火墙组件,相比之前的iptables来说,firewalld在进行网络管理的时候,更加便利,今天我们来探究一下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
[ ]
● 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 #启动/停止防火墙,然后检查状态。
~]# 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
/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里默认是每个服务是允许,需要拒绝的才去限制。
下面验证一下
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 8091
Trying 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 -vvv
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
15: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 0
15: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 0
15: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 0
15: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 0
15: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 0
15: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默认是拒绝访问,所以一般情况下,我们会关闭防火墙服务,在服务访问不通的情况下,你不妨去检查下防火墙的状态。
二
命令汇总
常用命令
#进程与状态相关
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段和端口
三
实战
当前114访问146是拒绝访问的,由于业务交互,我们需要给114添加白名单,允许其访问146,目前有如下几种方法。
-
放开8091端口,允许所有地址访问 #单独添加端口是针对全局的 -
放开10.199.137.114地址,允许其访问所有端口 -
放开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 8091
Trying 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
长
按
关
注
一路同频
ID : 运维之美
一起寻找生命中的光.....
你们点点“分享”,给我充点儿电吧~
以上是关于Centos7防火墙 firewalld入门的主要内容,如果未能解决你的问题,请参考以下文章
《网络安全入门到精通》-1.2 - Linux系统 - firewalld防火墙&iptables防火墙