文章目录
网络基础
一、防火墙
1. 概述
防火墙是具备安全防护功能的网络设备。
隔离网络:将需要保护的网络与不可信任的网络进行隔离,隐藏信息并进行安全防护。
2. 功能
- 访问控制(ACL)
- 攻击防护
- 冗余设计
- 路由、交换
- 日志记录
- 虚拟专网VPN
- NAT
3. 分类
- 按防火墙形态
- 硬件防火墙
- 软件防火墙
- 按技术实现
-
包过滤防火墙
工作在网络层,仅根据数据包头中的IP地址、端口号、协议类型等标志确定是否允许数据包通过。在符合防火墙规定标准之下,满足安全性能以及类型才可以进行信息的传递,而一些不安全的因素则会被防火墙过滤、阻挡。 -
状态检测包过滤防火墙
工作在2~4层,访问控制方式与1同,但处理的对象不是单个数据包,而是整个连接,在网络层有一个检查引擎截获数据包并抽取出与应用层状态有关的信息,通过规则表和连接状态表,综合判断是否允许数据包通过。 -
应用代理防火墙
应用代理防火墙的工作范围就是在OIS的最高层,位于应用层之上。可以完全隔离网络通信流,通过特定的代理程序就可以实现对应用层的监督与控制。 -
WAF防火墙
WAF的出现是由于传统防火墙无法对应用层的攻击进行有效抵抗,并且IPS也无法从根本上防护应用层的攻击。它能在应用层理解分析HTTP会话,因此能有效的防止各类应用层攻击,同时他向下兼容,具备网络防火墙的功能。 -
应用层防火墙
4. 防火墙原理
- 区域隔离
Untrust(非信任域):通常用来定义Internet等不安全网络,用于网络入口线接入;
DMZ(隔离区):通常放置一些不含机密信息的公用服务器;
trust(信任区):通常用来定义内部用户所在的网络。 - 状态检测
状态检测表:记录你的会话状态,如源IP、目标IP、源端口号、目标端口号、从哪个端口流入、路由记录等;
初始的状态检测表为空,在经过策略、路由等匹配后才会有记录。
5. 防火墙工作模式
5.1 透明模式
一般用于用户网络已经建设完毕,网络功能基本实现,用户需要加防火墙实现安全区域隔离的要求。
5.2 路由模式
一般用于防火墙当作路由器和NAT设备连接上网的同时,提供安全过滤功能。
5.3 混杂模式
为透明模式和路由模式的混合
6. Linux环境下防火墙策略配置
1. 概述
netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制。iptables 则是一个命令行工具,用来配置 netfilter 防火墙。
Netfilter/iptables 有三部分组成,分别是:Netfilter 框架、Iptables(内核空间)、Iptables 命令行工具(用户空间)。
2. netfilter 防火墙原理
对进出主机的数据包进行过滤,通过 iptables 设置一些规则(rules)。所有进出主机的数据包都会按照一定的顺序匹配这些规则,如果匹配到某条规则,就执行这条规则对应的行为(ACCEPT),比如抛弃该数据包或接受该数据包(DROP)。
3. table 与 chain
iptables中有“四表五链”
- table
iptables 用表(table)来分类管理它的规则(rule),根据 rule 的作用分成了好几个表,如用来过滤数据包的 rule 就会放到 filter 表中,用于处理地址转换的 rule 就会放到 nat 表中…
“四表”:
- filter
filter 表里面的规则主要用来过滤数据, 控制数据包是否允许进出及转发,可以控制的链路有input、forward、output; - nat
用来处理网络地址转换的,控制要不要进行地址转换,以及怎样修改源地址或目的地址,从而影响数据包的路由,达到连通的目的,这是路由器必备的功能,可以控制的链路有prerouting、input、output、postrouting; - mangle
修改数据包中的原数据,可以控制的链路有prerouting、input、forward、output、postrouting; - raw
控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting、output
最常用的是 filter 表和 nat 表。
- chain
表中的规则(rule)又被编入了不同的链(chain),由 chain 来决定什么时候触发 chain 上的这些规则。
PREROUTING:接收的数据包刚进来,还没有经过路由选择,即还不知道数据包是要发给本机还是其它机器。这时会触发该 chain 上的规则。
INPUT:进站链,已经经过路由选择,并且该数据包的目的 IP 是本机,进入本地数据包处理流程。此时会触发该 chain 上的规则。
FORWARD:转发规则链,已经经过路由选择,但该数据包的目的 IP 不是本机,而是其它机器,进入 forward 流程,此时会触发该 chain 上的规则。
OUTPUT:出站链,本地程序要发出去的数据包刚到 IP 层,还没进行路由选择。此时会触发该 chain 上的规则。
POSTROUTING:本地程序发出去的数据包,或者转发(forward)的数据包已经经过了路由选择,即将交由下层发送出去。此时会触发该 chain 上的规则。
4. 基本命令
iptables基本语法格式:iptables [-t table] COMMAND [Match] -j ACTION
-t
来设置对哪一张表生效,默认是filter表。如果是要对nat操作,则需要注明-t nat;
Command
告诉程序该做什么,如:插入、或删除一个规则;
如 -A:是代表在所选择的链的最后添加一条规则;
-D:从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除;
-R:取代现行规则,规则被取代后并不会改变顺序;
-I:插入一条规则,原本该位置上的规则将会往后移动一个顺位;
-L:查看规则
Match
是用来指定过滤数据包所参照的条件。如源IP地址、网络接口、端口、协议类型等;
如 -p:指定协议,如 -p tcp 代表针对TCP协议;
-s:指定源地址,如 -s 10.0.0.1 指针对源地址为10.0.0.1的数据包;
-d:指定目的地址;
--sport:指定源端口;
--dport:指定目的端口;
-i:指定进入网卡,如 -i eth0 是针对本地所使用的eth0网络接口。
-o:指定出去网卡
ACTION
通过对数据包与所有规则的匹配结果,内核将做出相应的处理动作。
如 -j ACCEPT:表示当信息包与具有ACCEPT目标的规则完全匹配时会被接受(允许它前往目的地);
-j DROP:不允许见进行某操作
操作链的部分命令:
iptables -L
列出某规则链中的所有规则。
-F
删除某规则链中的所有规则。
-Z
将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
-N
定义新的规则链。
-X
删除某个规则链。
-P
定义默认过滤政策。,也就是未符合过滤条件之封包,预设的默认处理方式。
-E
修改某自订规则链的名称。
保存&导入过滤配置文件:
保存配置文件:
iptales-save > 路径
导入配置文件:
iptables-restore < 路径
查看filter表的默认配置:
[root@localhost Desktop]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) # 默认策略为:ACCEPT
pkts bytes target prot opt in out source destination
6 342 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 48 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 180 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
1 328 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
# 处理动作 协议类型 进口 出口 源地址 目标地址
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 28 packets, 2076 bytes)
pkts bytes target prot opt in out source destination
- 模拟编写nat表相关规则
- 私网网段为10.1.1.0/24上的一台主机源IP地址为10.1.1.11,向公网网段为20.1.1.0/24上的服务器地址为20.1.1.22发送请求,经过linux网关服务器进行路由后的处理:
编写POSTROUTING链规则(路由后):
iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 10.1.1.0/24 -j SNAT --to-source 22.1.1.11
或者
iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 10.1.1.0/24 -j MASQERAND
# MASQERAND:当linux网关服务器上的公网IP变更了,都会将源IP地址,转换为公网地址,然后再到服务器
当收到路由后(POSTROUTING )的tcp协议,出口为 eth1,源地址为10.1.1.0/24网段的IP请求时,将其转换为公网IP:22.1.1.11。
- 服务器20.1.1.22响应请求,通过网关的公网IP地址:22.1.1.11,然后到私网IP,经过linux网关服务器进行路由前处理:
编写PREROUTING链(路由前):
iptables -t nat -A PREROUTING -i eth1 -d 20.1.1.11 -p tcp --dport 80 -j DNAT(目标地址转换) --to-destination 10.1.1.11:8080
当收到路由后(PREROUTING )的tcp协议且入口为 eth1,如果目标地址为公网IP地址的IP请求并访问我的80端口时,将其转换为私网主机IP和8080端口。