零基础快速了解掌握Linux防火墙-Firewalld

一、 概述

按表现形式划分:

软件防火墙: 集成在系统内部,Linux系统: iptables、firewalld、ufw; windows系统下: windows defender

硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防火墙等

按技术划分:

包过滤防火墙: 检查数据包的源IP、目的IP、源端口、目的端口、TCP的syn控制位

七层防火墙: 除了上述检查外,还会检查数据内容

防火墙的作用:

阻止来自网络外部的攻击、进行流量控制

二、 Linux防火墙

防火墙结构

用户态:

iptables: 使用iptables命令对防火墙规则进行管理,必须深度理解网络技术和四表五链,对 于初学者或者网络技术不达标的人员不友好
firewalld:使用firewall-cmd命令对防火墙进行管理,采用的是区域划分的形式。不需要连接 底层的四表五链,对于初学者比较友好
ufw: 使用ufw命令对防火墙进行管理,命令简单易懂。

内核态:

四表: 从内核->用户的顺序: raw -> mangle -> nat -> filter
五链: input、output、forward、prerouting、postrouting

firewalld防火墙

区域分类

九大区域: block、dmz、drop、external、home、internal、public、trusted、work

区域功能:

public: 公共区域,默认区域

public (active)
 target: default   #区域类型规则
 icmp-block-inversion: no
 interfaces: ens33 #属于该区域的接口
 sources:  #来源
 services: dhcpv6-client ssh #放行服务的名称
 ports:  #放行端口号
 protocols:  #放行协议
 masquerade: no  #NAT地址转换
 forward-ports:  #转发端口
 source-ports:  #源端口
 icmp-blocks:  #ICMP的阻塞类型,ping的阻塞
 rich rules:  #富规则

home: 家庭区域

home
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: dhcpv6-client mdns samba-client ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules:

work: 工作区域

work
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: dhcpv6-client ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules: 

trusted: 完全信任区域

trusted
 target: ACCEPT  #不采用默认规则,放行一切
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: 
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules: 

internal: 内部区域 (连接内部网络)

internal
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: dhcpv6-client mdns samba-client ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules: 

external: 外部区域 (连接外部网络,例如: internet网络)

ternal
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: ssh
 ports: 
 protocols: 
 masquerade: yes  #默认进行NAT地址转换
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules: 

dmz: 非军事化管理区域(内部的服务器放于该区域)

dmz
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules:

drop: 丢弃区域 (丢弃一切流量,不给出任何回应)

drop
 target: DROP
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: 
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules:

block: 阻塞区域 (拒绝任何流量,但给出回应)

block
 target: %%REJECT%%
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: 
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules:

firewall-cmd命令用法

关键字:

--list-*

--get-*

--set-*

--add-*

--remove-*

--change-*

--zone=

命令分类:

查看:

#查看所有区域的详细信息
[root@localhost ~]# firewall-cmd --list-all-zones 
#查看指定区域的详细信息
[root@localhost ~]# firewall-cmd --list-all --zone=public 
#查看指定区域的放行服务
[root@localhost ~]# firewall-cmd --list-services --zone=public 
#查看指定区域的放行端口
[root@localhost ~]# firewall-cmd --list-ports --zone=public 
#查看指定区域包含的网络接口
[root@localhost ~]# firewall-cmd --list-interfaces --zone=public 
#查看指定区域的放心协议
[root@localhost ~]# firewall-cmd --list-protocols --zone=public
#查看指定区域的ICMP阻塞类型
[root@localhost ~]# firewall-cmd --list-icmp-blocks --zone=public
#查看指定区域的放行源地址
[root@localhost ~]# firewall-cmd --list-sources --zone=public
#查看指定区域的源端口
[root@localhost ~]# firewall-cmd --list-source-ports --zone=public
#查看指定区域的富规则
[root@localhost ~]# firewall-cmd --list-rich-rules --zone=public 
#查看指定区域的转发端口
[root@localhost ~]# firewall-cmd --list-forward-ports --zone=public 
#查看firewalld支持的服务类型
[root@localhost ~]# firewall-cmd --get-services
#查看firewalld的默认区域
[root@localhost ~]# firewall-cmd --get-default-zone
#查看firewalld支持的ICMP的阻塞类型
[root@localhost ~]# firewall-cmd --get-icmptypes 
#查看firewalld所有的活动区域
[root@localhost ~]# firewall-cmd --get-active-zones
#查看指定网络接口所属区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
#查看所有区域名称
[root@localhost ~]# firewall-cmd --get-zones

添加:

#添加指定服务到指定区域
[root@localhost ~]# firewall-cmd --add-service=http --zone=public 
success
#添加端口到指定区域
[root@localhost ~]# firewall-cmd --add-port=80/tcp --zone=public 
success
#添加指定协议到指定区域
[root@localhost ~]# firewall-cmd --add-protocol=ah --zone=public 
success
#添加ICMP阻塞类型到指定区域
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=public 
success
#windows端验证
C:\Users\zzh>ping 192.168.115.129
正在 Ping 192.168.115.129 具有 32 字节的数据:
来自 192.168.115.129 的回复: 无法访问目标主机。
来自 192.168.115.129 的回复: 无法访问目标主机。
来自 192.168.115.129 的回复: 无法访问目标主机。
#添加指定网络接口到指定区域
[root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work 
success
#添加指定区域的放行源地址
[root@localhost ~]# firewall-cmd --add-source=192.168.1.0/24 --zone=work 
success
#添加指定区域的放行源端口
[root@localhost ~]# firewall-cmd --add-source-port=999/tcp --zone=work 
success
#添加转发端口到指定区域
[root@localhost ~]# firewall-cmd --add-forwardport=port=8080:proto=tcp:toport=80:toaddr=192.168.115.115
 --zone=work 
success
#添加地址转换功能到指定区域
[root@localhost ~]# firewall-cmd --add-masquerade --zone=work 
success
#验证添加
[root@localhost ~]# firewall-cmd --list-all --zone=public 

修改:

#修改默认区域
[root@localhost ~]# firewall-cmd --set-default-zone=work
success
#修改网络接口所属区域
[root@localhost ~]# firewall-cmd --change-interface=ens33 --zone=internal 
success
[root@localhost ~]# firewall-cmd --change-zone=ens33 --zone=external 
success
#追加指定区域的放行源地址
[root@localhost ~]# firewall-cmd --change-source=192.168.2.0/24 --zone=work 
success

删除:

#删除指定服务到指定区域
[root@localhost ~]# firewall-cmd --remove-service=http --zone=public 
success
#删除端口到指定区域
[root@localhost ~]# firewall-cmd --remove-port=80/tcp --zone=public 
success
#删除指定协议到指定区域
[root@localhost ~]# firewall-cmd --remove-protocol=ah --zone=public 
success
#删除ICMP阻塞类型到指定区域
[root@localhost ~]# firewall-cmd --remove-icmp-block=echo-request --
zone=public 
success
#删除指定网络接口到指定区域
[root@localhost ~]# firewall-cmd --remove-interface=ens33 --zone=work 
success
#删除指定区域的放行源地址
[root@localhost ~]# firewall-cmd --remove-source=192.168.1.0/24 --zone=work 
success
#删除指定区域的放行源端口
[root@localhost ~]# firewall-cmd --remove-source-port=999/tcp --zone=work 
success
#删除转发端口到指定区域
[root@localhost ~]# firewall-cmd --remove-forwardport=port=8080:proto=tcp:toport=80:toremover=192.168.115.115
 --zone=work 
success
#删除地址转换功能到指定区域
[root@localhost ~]# firewall-cmd --remove-masquerade --zone=work 
success
#验证删除
[root@localhost ~]# firewall-cmd --list-all --zone=public 

保存规则

#逐行规则保存
[root@localhost ~]# firewall-cmd --remove-masquerade --zone=work --permanent
#一次性保存所有规则
[root@localhost zones]# firewall-cmd --runtime-to-permanent
success
#保存的规则存储路径
/etc/firewalld/zones

案例:

禁止外部主机ping本机

#本机IP:192.168.115.129 ens33 NAT
#外部IP:192.168.115.128
#防火墙配置
[root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work 
success
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=work 
success
#验证
[root@localhost ~]# ping -c 4 192.168.115.129
PING 192.168.115.129 (192.168.115.129) 56(84) bytes of data.
From 192.168.115.129 icmp_seq=1 Destination Host Prohibited
From 192.168.115.129 icmp_seq=2 Destination Host Prohibited
From 192.168.115.129 icmp_seq=3 Destination Host Prohibited
From 192.168.115.129 icmp_seq=4 Destination Host Prohibited
--- 192.168.115.129 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms

允许外部主机访问本机的http服务

#本机IP:192.168.80.128 ens34 vmnet3
#外部IP:192.168.80.129
#######环境配置 开始#########
##本机安装httpd服务
#改变SElinux的规则
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd
##启动httpd服务
[root@localhost ~]# systemctl start httpd
##修改httpd服务的监听IP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.80.128:80
##重启httpd服务
[root@localhost ~]# systemctl restart httpd
##验证服务监听状态
[root@localhost ~]# netstat -naptu | grep :80
tcp        0      0 192.168.80.128:80      0.0.0.0:*               LISTEN     
 5884/httpd 
#######环境配置 结束#########
#防火墙配置
[root@localhost ~]# firewall-cmd --change-interface=ens34 --zone=dmz
success
##客户端验证访问##
[root@localhost ~]# curl 192.168.80.128
curl: (7) Failed connect to 192.168.80.128:80; 拒绝连接
##发现无法访问###
#服务端查看dmz区域信息
[root@localhost ~]# firewall-cmd --list-all --zone=dmz
dmz (active)
 target: default
 icmp-block-inversion: no
 interfaces: ens34
 sources: 
 services: ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules: 
#发现没有放心http服务
#配置dmz区域http服务放行策略
[root@localhost ~]# firewall-cmd --add-service=http --zone=dmz 
success
dmz (active)
 target: default
 icmp-block-inversion: no
 interfaces: ens34
 sources: 
 services: http ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules:

允许外部主机访问本机的某个端口号

#前置环境如上
#防火墙配置
[root@localhost ~]# firewall-cmd --add-port=801/tcp --zone=dmz 
success
#放行服务的本质实际上是放行了该服务的默认端口号!!!
#假如服务改变了监听端口号,只需放行对应的端口号即可!!!
#客户端验证
[root@localhost ~]# curl 192.168.80.128:801

三、 课后实验

实验拓扑

实验拓扑

内部PC1位于internal区域,地址段为: 192.168.1.0/24,pc1地址为:192.168.1.1/24,网关地址 为:192.168.1.254/24
服务器S1位于DMZ区域,地址段为: 192.168.2.0/24,pc1地址为:192.168.2.1/24,网关地址 为:192.168.2.254/24 PC2位于external区域,模拟外部网络,地址段为:10.0.0.0/8,
pc2地址为:10.0.0.1/8,网关地址 为:10.0.0.254/8
Linux防火墙的三块网卡为别连接不同的网络区域,地址分别为 :ens33 192.168.1.254/24; ens34 10.0.0.254/8;ens35 192.168.2.254/24

实验要求

1. 允许Linux内部客户端访问外部的Linux客户端,且使用地址转换。

2. 允许Linux内部和外部客户端访问WEB服务器。

3. 禁止Linux外部客户端ping内部网络的任何主机,包括Linux防火墙服务器。

4. 禁止Linux外部客户端使用ssh远程连接任何内部主机。

5. 禁止Linux外部客户端使用telnet远程连接任何内部主机。

6. 允许Linux内部客户端使用ssh连接WEB服务器。(防火墙端口转换)

7. 禁止Linux内部和外部服务器连接WEB服务器的除80端口之外任何端口。

*****注意:该实验只需要配置指定策略即可,不用验证!!!!******

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值