目录
一、安全技术和防火墙
1.安全技术
(1)入侵检测系统(Intrusion Detection Systems)
(2)入侵防御系统(Intrusion Prevention System)
(3)防火墙( FireWall )
(4)防水墙(Waterwall)
2.防火墙的分类
(1)按保护范围划分
(2)按实现方式划分
(3)按网络协议划分
(4)包过滤防火墙
(5)应用层防火墙
二、Linux防火墙基础知识
1.Netfilter
2. 防火墙工具
(1)nftables
(2) firewalld
(3)iptables
三、firewalld服务
1. firewalld介绍
2.归入zone顺序
(1)已经存在了zone区域
(2)使用firewall,就是将特定的流量关联到某个zone中
(3)进入到zone以后,开始匹配zone内的规则
3.命令行配置
四、iptables
1. netfiler
2.iptables
3.iptables四表五链
(1)五表 (系统默认四表)
(2)五链
(3)防火墙默认的规则表,链结构
(4) 内核中数据包的传输过程
4.iptables安装与用法
(1)安装
(2)语法格式
(3)控制类型
(4)管理选项
(5)用法
4.介绍几种规则的匹配
(1)通用匹配
(2)隐含匹配
(3) 显式匹配
(4)状态匹配
5.NAT
(1)定义
(2)NAT的实现分为下面类型
(3)实现步骤
6. SNAT策略概述
(1)SNAT策略的典型应用环境
(2)SNAT策略的原理
(3)SNAT转换前提条件
7.DNAT
特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式
以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式(必经之路)
隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,将希望外网访问的主机放在DMZ (demilitarized zone)网络中
与防火墙相对,是一种防止内部信息泄漏的安全产品。 网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事 中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco,
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护缺点:无法检查应用层数据,如病毒等
缺点:无法检查应用层数据,如病毒等
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server),将所有跨越防火墙的网络通信链路分为两段,内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter官网文档:https://netfilter.org/documentation/
它重用了netfilter框架的许多部分,例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的几个部分,例如表,链和规则。就像iptables一样,表充当链的容器,并且链包含单独的规则,这些规则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。
从用户的角度来看,nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和
ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。
从CentOS 7 版开始引入了新的前端管理工具
软件包:
firewalld
firewalld-config
管理工具:
firewall-cmd 命令行工具
firewall-config 图形工作
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
[root@centos7 ~]# iptables --version
iptables v1.4.21
firewalld是配置和监控防火墙规则的系统守护进程。可以实现iptables,ip6tables,ebtables的功能
先根据数据包中源地址,将其纳为某个zone
纳为网络接口所属zone
纳入默认zone,默认为public zone,管理员可以改为其它zone
网卡默认属于public zone,lo网络接口属于trusted zone
firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
通过源网段关联zone
通过网卡关联zone区域
如果两者都没有关联的数据报文,那就会去default zone
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。
netfilter/iptables:IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。
主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理
属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。
netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
表名 | 功能 |
filter | 过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表 |
nat | network address translation 地址转换规则表 |
mangle | 修改数据标记位规则表 |
raw | 关闭启用的连接跟踪机制,加快封包穿越防火墙速度 |
security | 用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现 |
优先级由高到低的顺序为:
security -->raw-->mangle-->nat-->filter
链名 | 功能 |
INPUT | 处理入站数据包,匹配目标IP为本机的数据包 |
OUTPUT | 处理出站数据包,一般不在此链上做配置 |
FORWARD | 处理转发数据包,匹配流经本机的数据包 |
PREROUTING | 把内网服务器的IP和端口映射到路由器的外网IP和端口上 |
POSTROUTING | 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT |
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去
如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达
如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
systemctl stop firewalld.service
yum -y install iptables iptables-services
systemctl start iptables.service
setenforce 0
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回 应信息。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
SNAT:修改数据包的源地址。
DNAT:修改数据包的目的地址。
MASQUERADE:伪装成一个非固定公网IP地址。
管理选项 | 用法示例 |
---|---|
-A | 在指定链末尾追加一条 iptables -A INPUT (操作) |
-I | 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作) |
-P | 指定默认规则 iptables -P OUTPUT ACCEPT (操作) |
-D | 删除 iptables -t nat -D INPUT (操作) |
-p | 服务名称 |
-R | 修改、替换某一条规则 iptables -t nat -R INPUT (操作) |
-L | 查看 iptables -t nat -L (查看) |
-n | 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v | 查看时显示更详细信息,常跟-L一起使用 (查看) |
--line-number | 规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number |
-F | 清除链中所有规则 iptables -F (操作) |
-X | 清空自定义链的规则,不影响其他链 iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z |
-S | 查看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
添加新的规则
iptables -t filter -A INPUT -P icmp -j REJECT (不允许任何主机ping本主机)
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT (允许主机ssh端口 通过我的)
查看规则列表
iptables [-t 表名] -n -L [链名] [--line-numbers] 或 iptables -[vn]L 注意:不可以合写为-Ln
iptables -n -L --line-numbers
设置默认策略
ptables [-t 表名] -P <链名> <控制类型>
iptables -P INPUT DROP
输入后没显示 清除所有规则之后生效,因为下面只剩下DROP 添加远程端口22
iptables -P FORWARD DROP
生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单
删除规则
iptables -D INPUT 2
iptables -t filter -D INPUT -P icmp -j REJECT
清空规则
iptables [-t 表名] -F [链名]
iptables -F INPUT
iptables -F
可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名 .
地址匹配: -s源地址、-d目的地址 可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡
iptables -A FORWARD ! -P icmp -j ACCEPT
iptables -A INPUT -s 192.168.121.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.68.0/24 -j DROP
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。
端口匹配: --sport 源端口、–dport 目的端口,可以是个别端口、端口范围
--sport 1000 匹配源端口是1000的数据包
--sport 1000 :3000 匹配源端口是1000-3000的数据包
--sport :3000 匹配源端口是3000及以下的数据包
--sport 1000 : 匹配源端口是1000及以上的数据包
注意: --sport 和–dport 必须配合-P <协议类型>使用
iptables -A INPUT -P tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -d 192.168.68.0/24 -P tcp --dport 24500:24600 -j DROP
TCP标记匹配: --tcp- flags TCP标记
iptables -I INPUT -i ens33 -P tcp --tcp-flags SYN, RST,ACK SYN -j ACCEPT
丢弃SYN请求包, 放行其他包
ICMP类型匹配: --icmp-type ICMP类型,可以是字符串、数字代码
"Echo-Request”(代码为8)表示请求
"Echo- -Reply”(代码为0)表示回显
"Dest ination-Unreachable" (代码为3)表示目标不可达
关于其它可用的ICMP 协议类型,可以执行“iptables -P icmp -h”命令,查看帮助信息
iptables -A INPUT -P icmp -- icmp-type 8 -j DROP 禁止其它主机ping本机
iptables -A INPUT -P icmp --icmp-type 0 -j ACCEPT 允许本机ping其它主机
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT 当本机ping不通其它主机时提示目标不可达
iptables -A INPUT -P icmp -j REJECT 此时其它主机需要配置关于icmp协议的控制类型为REJEC
多端口匹配
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
iptables -A INPUT -P tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT
P范围匹配
-m iprange --src- range IP范围
iptables -A FORWARD -P udp -m iprange --src-range 192.168.68.100-192.168.68.200 -j DROP
禁止转发源地址位于192.168.68.100-192.168.68.200的udp数据包
-m state --state连接状态
常见的连接状态
NEW: 与任何连接无关的,还没开始连接
ESTABLISHED: 响应请求或者已建立连接的,连接态
RELATED: 与已有连接有相关性的( 如FTP主被动模式的数据连接),衍生态,一般ESTABLISHED配合使用
INVALID: 不能被识别属于哪个连接或没有任何状态
iptables -A FORWARD -m state --state NEW -P tcp ! --syn -j DROP
禁止转发与正常TCP连接无关的非--syn请求数据包(如伪造的网络攻击数据包)
iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -P tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。
iptables -P INPUT DROP
NAT,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
请求报文:修改源/目标IP,由定义如何修改I
响应报文:修改源/目标IP,根据跟踪机制自动实现
SNAT: source NAT,支持POSTROUTING,INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
DNAT: destination NAT支持PREROUTING,OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
PNAT: port nat,端口和IP都进行修改
网关服务器:首先我们先添加下网卡
更改网卡配置文件
同理,我们建立内网地址
同理,我们建立外网地址
在网关服务器上抓包一下
[root@localhost ~]# tcpdump -i ens37 -nn icmp 抓包命令
流量能发出但没法得到反馈
这是因为linux系统本身没有转发功能 只有路由发送数据
这时我们就用到了SNAT,DNAT
局域网主机共享单个公网IP地址接入Internet
源地址转换
修改数据包的源地址
局域网各主机已正确设置IP地址、子网掩码、默认网关地址
Linux网关开启IP路由转发
永久打开
vim /etc/sysctl. conf
net. ipv4. ip_ _forward = 1 #将此行写入配置文件
sysct1 -p #将取修改后的配置
在三个机子上本地搭建yum,进行iptables安装,如果不会可以访问我之前的博客yum那一章
我们用iptables加规则(配置SNAT策略,实现SNAT功能)
接下来我们进行验证
此刻转发已经完成
清空NAT
主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一般要详细的指定到端口
网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可
我们用iptables加规则(配置DNAT策略,实现DNAT功能)
命令
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.101