华为防火墙基础配置
一.防火墙基础配置
1.Web界面登录/SSH登录
实验拓扑如下:
Web界面登录步骤:
# 1. 华为防火墙中的所有接口都需要加入安全区域而管理接口GE0/0/0默认已加入
firewall zone trust
set priority 85
add interface GigabitEthernet0/0/0
# 2.可以设置Web界面登录时使用的协议和端口号,默认端口号是8443
web-manager security version tlsv1.1 tlsv1.2
web-manager enable
web-manager security enable port 8443
# 3.设置系统管理员账户,授权服务
manager-user admin
password cipher xxx
service-type web terminal ssh
level 15
role system-admin
bind manager-user admin role system-admin
# 4.配置接口IP,放行服务
interface GigabitEthernet0/0/0
undo shutdown
ip address 10.0.0.21 255.255.255.0
service-manage https permit
service-manage ssh permit
配置完上述内容后,浏览器输入IP地址[10.0.0.21-你配置的管理接口IP,默认端口为8443],即可到Web登录界面。
开启SSH服务登录
# 华为防火墙开启SSH登录管理
# 1.开启服务
stelnet server enable
# 2.设置用户密码服务
ssh user admin
ssh user admin authentication-type password
ssh user admin service-type stelnet
# 3.远程登录接口授权SSH协议
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
<FW1>display users
2024-06-03 02:52:53.350
User-Intf Delay Type Network Address AuthenStatus AuthorcmdFlag
+ 0 CON 0 00:00:00 pass no Username : admin
34 VTY 0 00:06:26 SSH 10.0.0.10 pass no Username : admin
2.防火墙Local区域讲解
华为防火墙中会有一个Local区域,所有的接口本身都是Local区域,将这个接口加入到某个区域,只是代表这个接口所连接的网络被划分到了这个区域。所以会发现默认在防火墙上去ping 其他的设备IP地址时,都会不通,解决方法就是创建安全策略,放行Local区域到其他区域的流量。
[FW1]dis security-policy rule name Local_to_Any
2024-06-04 08:50:25.210
(6 times matched)
rule name Local_to_Any
source-zone local
destination-zone trust
destination-zone untrust # 放行Local->trust Local-untrust区域的流量
action permit
interface GigabitEthernet1/0/0.1 # 防火墙设置子接口
vlan-type dot1q 10
ip address 10.0.10.254 255.255.255.0
service-manage ping permit
#
interface GigabitEthernet1/0/0.2
vlan-type dot1q 100
ip address 10.0.100.254 255.255.255.0
service-manage ping permit # 放行相应的服务
firewall zone trust
set priority 85
add interface GigabitEthernet0/0/0
add interface GigabitEthernet1/0/0.1
#
firewall zone dmz
set priority 50
add interface GigabitEthernet1/0/0.2 # 接口加入安全区域
# 不过在模拟器上的子接口有一处Bug,无法在子接口上启用DHCP功能
[LSW1]
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 100 # 交换机放行相关VLAN
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 100
#
interface GigabitEthernet0/0/3
port link-type access
port default vlan 10
[FW1]ping 10.0.100.1 # 再次进行测试,可以ping通主机
PING 10.0.100.1: 56 data bytes, press CTRL_C to break
Request time out
Reply from 10.0.100.1: bytes=56 Sequence=2 ttl=255 time=18 ms
Reply from 10.0.100.1: bytes=56 Sequence=3 ttl=255 time=12 ms
Reply from 10.0.100.1: bytes=56 Sequence=4 ttl=255 time=16 ms
Reply from 10.0.100.1: bytes=56 Sequence=5 ttl=255 time=7 ms
[FW1]ping 10.0.10.1
PING 10.0.10.1: 56 data bytes, press CTRL_C to break
Reply from 10.0.10.1: bytes=56 Sequence=1 ttl=128 time=40 ms
Reply from 10.0.10.1: bytes=56 Sequence=2 ttl=128 time=26 ms
Reply from 10.0.10.1: bytes=56 Sequence=3 ttl=128 time=31 ms
Reply from 10.0.10.1: bytes=56 Sequence=4 ttl=128 time=39 ms
Reply from 10.0.10.1: bytes=56 Sequence=5 ttl=128 time=46 ms
# 并且会发现主机也可以ping通防火墙的接口,虽然处于不同的安全区域,但是网管相关的服务不用写安全策略。比如Trust_to_local,只要接口放行了相应的服务,
就能够使用。网管服务有:ping/http/https/snmp/ssh
3. 防火墙PPPoE相关配置
在这之前,先简单回顾一下PPPoE。
PPPoE协议是一种把PPP帧封装到以太网帧中的链路层协议。当以太网帧中的Type类型值字段为8863时代表下层封装的协议为PPPoE。PPPoE可以使以太网网络中的多台主机连接到远端的宽带接入服务器。PPPoE利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,并运用PPP协议对接入的每个主机进行控制,具有适用范围广、安全性高、计费方便的特点。
PPPoE拨号的工作原理
主要分为Discover发现–>Session会话–>Terminate阶段
Discover阶段
1.PPPoE Client广播发送一个PADI报文,在此报文中包含PPPoE Client想要得到的服务类型信息。
2.所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO报文。
3.根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR报文。
4.PPPoE Server产生一个唯一的会话ID,标识和PPPoE Client的这个会话,通过发送一个PADS报文把会话ID发送给PPPoE Client,会话建立成功后便进入PPPoE Session阶段。
Session阶段
会话协商LCP链路层参数协商、用户身份认证、NCP网络层参数协商三个阶段。
1.LCP阶段主要完成建立、配置和检测数据链路连接。
2.LCP协商成功后,开始进行认证,认证协议类型由LCP协商结果(CHAP或者PAP)决定。
3.认证成功后,PPP进入NCP阶段。NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它主要负责协商用户的IP地址和DNS服务器地址。
Terminate阶段
PPP通信双方可以使用PPP协议自身来结束PPPoE会话,当无法使用PPP协议结束会话时可以使用PADT(PPPoE Active Discovery Terminate)报文。
# PPPoE_Server(AR)相关配置
[AR1]
ip pool Nanjing
network 155.1.121.0 mask 255.255.255.0
excluded-ip-address 155.1.121.1 155.1.121.50
# 创建地址池,用来为客户端分配IP
aaa
authentication-scheme pppoe
domain pppoe
authentication-scheme pppoe # 创建身份认证行为和域
local-user test password cipher Huawei@123
local-user test service-type ppp
# 本地创建用于认证的用户名和密码
interface Virtual-Template1
ppp authentication-mode chap domain pppoe
# 创建虚拟模板接口,设置认证方式为chap,在此处绑定之前创建好的认证域
remote address pool Nanjing
# 指定为对端分配IP地址时使用地址池
ip address 155.1.121.2 255.255.255.0
# 配置本测的IP
interface GigabitEthernet0/0/0
pppoe-server bind Virtual-Template 1 # 物理接口绑定虚拟模板
# PPPoe_Client(FW)相关配置
# 由于模拟器防火墙做PPPoE-Server会有bug,所以这里模拟客户端
interface Dialer1
link-protocol ppp # 设置链路封装协议
ppp chap user TEST
# 创建认证用户,协议为CHAP,要与服务端创建的用户名和密码匹配,否则认证不通过
ppp chap password cipher xxx
# 认证用户所使用的密码
mtu 1492 # 设置合适的MTU
ip address ppp-negotiate # 开启IP地址动态协商
dialer user TEST
dialer bundle 1
# 指定dialer用户和bundle编号
interface GigabitEthernet1/0/1
pppoe-client dial-bundle-number 1
# 此接口作为pppoe客户端,绑定dial端口
undo shutdown
firewall zone untrust
# 接口一定要加入相关的安全区域
add interface dialer 1
# PPPoE客户端成功获取到IP地址的情况:
[FW1]display pppoe-client session summary
2024-06-03 11:31:30.720
PPPoE Client Session:
ID Bundle Dialer Intf Client-MAC Server-MAC State
1 1 1 GE1/0/1 00e0fc8a4f3e 00e0fca83c77 PPPUP
Jun 3 2024 11:30:59 FW1 %%01IFNET/4/LINK_STATE(l)[1]:The line protocol
PPP on the interface Dialer1:0 has entered the UP state.
# 链路层协商LCP
Jun 3 2024 11:31:02 FW1 %%01IFNET/4/LINK_STATE(l)[2]:The line protocol
PPP IPCP on the interface Dialer1:0 has entered the UP state.
# 网络层协商NCP
# 查看PPPoE服务端为客户端分配IP的信息:
Jun 3 2024 19:30:59-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[1]:The line protocol PPP
on the interface Virtual-Template1:0 has entered the UP state.
[AR1]
Jun 3 2024 19:31:02-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[2]:The line protocol PPP
IPCP on the interface Virtual-Template1:0 has entered the UP state.
[AR1]display pppoe-server session all
SID Intf State OIntf RemMAC LocMAC
1 Virtual-Template1:0 UP GE0/0/0 00e0.fc8a.4f3e 00e0.fca8.3c77
# 已经成功分配
# 如果认证失败则会报相应的信息,如下所示:
[AR1]
Jun 3 2024 19:45:13-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[22]:The line
protocol PPP on the interface Virtual-Template1:0 has entered the UP state.
[AR1]
Jun 3 2024 19:45:13-08:00 AR1 %%01PPP/4/CHAPAUTHFAIL(l)[23]:On the
interface Virtual-Template1:0, PPP link was closed because CHAP authentication failed.
[AR1]
Jun 3 2024 19:45:13-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[24]:The
line protocol PPP on the interface Virtual-Template1:0 has entered the DOWN state.
再提一下,为什么PPPoE-Client的链路MTU要改成1492。因为宽带拨号使用的协议是PPPoE,而PPP数据帧占用8个字节,并且是封装在以太网中的。以太网中的MTU为1500B,那么就要做相应的减法,改成1492B。否则,IP分片设置不合理,可能会造成用户发送一个1495B的报文,如果设置的是原来的MTU1500,那么其实也是会对其进行分片的,分成1492+3B的两个分片。降低数据的传输效率。
二.常见的网络安全威胁
1.企业网络安全威胁来源
常见的企业网络安全部署架构如下:
- 外部威胁:DDoS攻击,病毒、木马、蠕虫等网络入侵,网络扫描,垃圾邮件,钓鱼邮件,针对Web服务器的攻击等
- 内部威胁:终端存在漏洞,员工行为不受控,信息安全违规操作,信息泄露,恶意员工,权限管理混乱,非法接入等
2.企业网络安全需求
- 高可靠性:从第三级等级保护(监督保护级)开始,安全通信网络部分中网络架构要求:应提供通信线路、关键网络设备和关键计算设备的硬件冗余,保证系统的可用性。
- 线路高可用、防火墙双机热备
- 区域隔离
- 防火墙通过将所连接的不同网络分隔在不同安全区域隔离内外网,而通过在防火墙上部署地址转换技术,可以在一定程度上隐藏内网IP地址,保护内部网络。
- 信息保密
- 使用VPN技术在Internet上构建安全可靠的传输隧道;对于出差员工,可以使用L2TP over IPSec,SSL VPN等方式安全地接入公司网络
- VPN技术,IPSec-VPN(分支之间安全的加密通信),SSL-VPN(出差办公人员安全的访问企业服务资源通信)
3.企业安全威胁种类
DDos攻击
DDoS攻击是指攻击者通过控制大量僵尸主机,向攻击目标发送大量攻击报文,导致被攻击目标所在网络的链路拥塞,系统资源耗尽,从而无法向正常用户提供服务
没有窃取主机信息的目的,就是单纯的发送攻击报文将目标网络中某个重要的服务器瘫痪。
根据攻击报文类型的不同,可以分为TCP Flood、UDP Flood、ICMP Flood、HTTP Flood和GRE Flood等。
- TCP-Flood:SYN-Flood、FIN/RST-Flood等,下面讲一下SYN-Flood的工作原理以及如何防御
-
SYN-Flood攻击是通过伪造一个源地址的SYN报文,发送给受害主机,受害主机回复SYN+ACK报文给这些地址后,不会收到ACK报文,导致受害主机保持了大量的半连接,直到超时。这些半连接可以耗尽主机资源,使受害主机无法建立正常TCP连接,从而达到攻击的目的。(TCP三次握手的缺陷,攻击者与目标服务器建立两次握手后,就不建了)
-
SYN-Flood攻击防御方式:可以在企业网络出口部署Anti-DDoS或者防火墙设备,对报文源进行真实性检查。在连续的一段时间内,防火墙收到的具有相同目的地址的SYN报文达到一定的阈值后,就会启动SYN报文源认证。防火墙伪造一个带有错误序列号的SYN-ACK报文给客户端,客户端如果是虚假源,那么不会对这个报文回应,认证失败,防火墙就会丢弃后续这个源地址的SYN报文。如果客户端是真实源,那么会响应一个RST报文,重新建立连接,防火墙判断认证成功,将此源地址加入白名单,放行SYN报文。
-
下面,再说下Anti-DDos对于SYN-Flood攻击的防范。主要分为首包丢弃、对虚假源和真实源的源认证技术
- 首包丢弃:Anti-DDos将攻击者发来的第一个SYN报文就直接丢弃,但是会记录SYN/源IP/目的IP三元组信息。如果是一个虚假源,那么不会重传此SYN报文,所以流量就只会到达Anti-DDOS设备,并不会到达后面的网络;如果是真实源就会重传SYN报文,然后Anti_DDos会将收到的SYN报文与此前记录的信息进行匹配,命中则认证通过。
- TCP-Ratio异常限速功能:基于源来统计除ACK以外的其他报文总和(SYN+SYN-ACK+FIN/RST)与ACK报文的比例,当这个比例超过“TCP-Ratio比例阈值”时,判定源IP地址异常,将除ACK以外的其他报文的速率总和限制在阈值内。 (大部分情况下,只要真实源和目的主机建立了TCP连接,那么后续应该是传输报文,只会出现ACK字段,不应该出现SYN字段,如果出现了过多的SYN字段,以至于超过了Ratio比例,那么就认为这个源主机是攻击者)
-
单包攻击
单包攻击的主要目的并不是像DDoS攻击那样,通过使网络拥塞,或消耗系统资源的方式进行攻击;而是通过发送有缺陷的报文,使主机或服务器在处理这类报文时系统崩溃,或发送特殊控制报文、扫描类报文探测网络结构,为真正的攻击做准备。
单包攻击主要分为:扫描型攻击、畸形报文攻击、特殊控制类报文攻击
-
扫描型攻击:运用ICMP报文探测目标地址,以确定哪些目标系统确实存活着并且连接在目标网络上;或攻击者对端口进行扫描探测,探寻被攻击对象目前开放的端口,从而确定攻击方式。常见的攻击方式有:IP-Scan。
- 地址扫描攻击:利用IP地址扫描工具来不断探测网络中存活的主机和开放的端口,为攻击做好准备。可以在防火墙中设置同一源IP每秒发往不同IP地址的ICMP报文数量阈值,如果攻击者发送的ICMP报文阈值超过了规定的数值,就将源IP加入黑名单,并丢弃报文。
-
畸形报文攻击:攻击者通过发送大量有缺陷的报文,从而造成主机或服务器在处理这些报文时系统崩溃。常见的攻击方式有:Smurf攻击、LAND攻击、Teardrop攻击
-
Smurf攻击:发送ICMP请求,该请求包的目标地址设置为受害网络的广播地址,源地址为服务器地址。该网络的所有主机都回应此ICMP请求,回应报文全部发往服务器,导致服务器不能正常提供服务。
-
LAND攻击:攻击者通过伪造一个TCP-SYN报文,将报文中的源IP和目的IP全部设置成被攻击者的IP,导致被攻击者收到此类报文后会创建一个指向自己的TCP空连接,消耗主机系统资源,解决方式就是在防火墙上开启畸形报文攻击探测。
-
-
特殊报文攻击:一种潜在的攻击行为,不具备直接的破坏行为,攻击者通过发送特殊控制报文探测网络结构,为后续发起真正的攻击做准备。典型的有超大ICMP报文控制攻击,IP报文控制攻击等。 常见的有ICMP-Dead攻击和ICMP不可达报文攻击。
- ICMP-Dead攻击:利用IP报文的最大长度65535B,发送一些超大的ICMP报文对系统进行攻击,使得某些主机在处理分片时发生错误,导致系统崩溃。
- ICMP不可达报文攻击:不同的系统对ICMP不可达报文的处理方式不同,有的系统在收到网络或主机不可达的ICMP报文后,对后续发往此目的地址的报文直接认为不可达,从而断开正常的业务连接。攻击者利用这一点,伪造不可达CMP报文,切断受害者与目的地的连接,造成攻击。
用户行为不受控(准入认证)
企业可以通过部署准入认证规范用户上网的权限,避免用户在上网时浏览一些非正规内容,造成安全威胁。对于华为设备,可以通过iMaster-NCE管控用户的访问权限,还可以通过防火墙的内容过滤功能管控用户的上网行为。内容安全过滤可以通过URL过滤、DNS过滤、文件内容过滤、邮件过滤、应用行为管理来控制。
上网权限管控方案有如下:
- 部署NAC用户身份认证,对于有线终端就部署802.1X认证,无线终端可以部署Portal认证,哑终端部署MAC认证。
- 创建专门的访客无线网络对企业外部访客使用,与企业内网进行隔离,消除安全风险。
外部网络入侵
外部网络入侵可能包括病毒、木马、SQL注入、DDos攻击等方式。
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过破坏SQL语句的原始逻辑,进而执行攻击者所希望的操作。SQL注入漏洞属于高危型Web漏洞。
主要解决方法:部署IPS入侵防御检测设备,抵挡来自互联网的威胁,一般部署在网络出口处。IPS设备具备入侵防御功能模块,该模块通过将流经防火墙/IPS设备的流量与加载的签名库做对比并根据危险程度进行相应处理,签名库是签名的集合。而签名是用来描述网络中存在的入侵行为的特征及需要对其采取的措施。
三. 防火墙状态检测机制和ASPF
实验拓扑(和前面的一致,基于此拓扑延伸ASPF的知识):
基于上述拓扑,继续进行配置。要求FW上开启源NAT地址转换技术,将内网主机的IP地址映射成公网地址,以供访问Internet。其次,在Server上配置HTTP和FTP服务,在FW上配置目的 NAT地址映射,使得Internet用户可以通过公网地址来访问服务,并且在FW上做映射,将公网地址来转换成私网地址以便完成访问。
3.1 理论知识补充
-
状态检测机制
防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整个数据流来对待。
例如,在上图中,源主机和服务器建立TCP三次握手连接。源主机第一次发送SYN报文,到达防火墙时,防火墙就会产生会话表项,来预测服务器回应的报文,服务器应该回应的是SYN+ACK报文,所以对于此类报文就可以认证通过,与主机进行后续的握手连接。
但是,在报文来回路径不一致的组网环境中,防火墙可能只会收到通信过程中的后续报文。在这种情况下,为了保证业务正常,就需要关闭防火墙的状态检测功能。当关闭状态检测功能后,可以通过后续报文建立会话,保证业务的正常运行。(因为来回路径不一致,会导致回包的报文永远无法命中防火墙的会话表项,然后也没有对应的安全策略)
-
会话表项
会话表是用来记录TCP、UDP、ICMP等协议连接状态的表项,是防火墙转发报文的重要依据。防火墙只对首包或者少量报文进行检测就确定一条连接的状态,设备在转发报文时,都需要查看会话表项,来查看所属的连接。会话表项的基本五元组信息是:协议、源IP、目的IP地址,源端口和目的端口号。防火墙为各种协议设定了会话老化机制。当一条会话在老化时间内没有被任何报文匹配,则会被从会话表中删除。
-
ASPF技术
应用层协议根据占用的端口数量可以分为单通道应用层协议与多通道应用层协议。
单通道应用层协议:通信过程中只需占用一个端口的协议。例如: Telnet只需占用23端口,HTTP只需占用80端口;
多通道应用层协议:通信过程中需占用两个或两个以上端口的协议。例如:FTP被动模式下需要占用21号端口以及一个随机端口。
传统包过滤防火墙无法匹配多通道协议应用数据,而ASPF协议可以完成针对应用层的包过滤。通过检测协商报文的应用层携带的地址和端口信息,自动生成相应的Server-map表,当数据通道的首包经过防火墙时,防火墙根据Server-map生成一条session,用于放行后续数据通道的报文,相当于自动创建了一条精细的安全策略。所以说,当防火墙创建的Server-Map表项被命中时,就不会受安全策略的控制!
如上图所示,在Trust区域和DMZ区域开启了基于FTP协议的ASPF功能后,如果客户端使用的是主动模式。那么当客户端与服务端的21号端口建立完了控制连接后,客户端会发送一个Port命令来告知服务端使用20号端口连接到自己的端口,此时防火墙就会生成一个Server-Map表项,提前预测服务器访问客户端的流量。如上图所示,服务器与客户端建立数据连接所使用的目的端口是2097,而这正好在之前客户端发送Port命令时已经让防火墙生成了一个Server-Map表项。当Server-Map表项被命中时,也就不需要再查看安全策略了。
-
(重要!!!)总结,防火墙对收到的报文处理过程如下所示:
- 防火墙收到报文先检查是否命中会话表;
- 如果没有命中则检查是否命中Server-map表;命中Server-map表的报文不受安全策略控制;
- 防火墙最后为命中Server-map表的数据创建会话表。
- 如果既没有命中会话表,也没有命中Server-Map表,则只能在查看安全策略了,如果没有对应的安全策略,那么默认就使用拒绝一切流量通过的安全策略。
3.2 源NAT&&静态目的NAT
# 1.源NAT地址转换配置
[FW]
ip route-static 0.0.0.0 0.0.0.0 Dialer1 # 首先配置默认路由指向运营商
security-policy
rule name User_to_Internet
source-zone trust
destination-zone local
destination-zone untrust
# 配置安全访问策略,放行trust到untrust的流量
source-address 10.0.10.0 mask 255.255.255.0
action permit
nat-policy
rule name USER_NAT
source-zone trust
destination-zone untrust
source-address 10.0.10.0 mask 255.255.255.0 # 防火墙上配置源NAT地址转换策略,其形式为easy-ip
action source-nat easy-ip
# 内网用户访问Internet测试
<FW1>display security-policy rule all
2024-06-06 15:20:37.490
Total:4
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
2 User_to_Internet enable permit 5 # 流量能够命中安全策略
<FW1>display firewall session table verbose source-zone trust protocol icmp # 查看会话表项关于icmp流量的信息
2024-06-06 15:22:24.150
Current Total Sessions : 3
icmp VPN: public --> public ID: c387f0abeab6a48c126661d42e # 会话协议
Zone: trust --> untrust TTL: 00:00:20 Left: 00:00:18
Recv Interface: GigabitEthernet1/0/0.1
Interface: Dialer1 NextHop: 114.114.114.114 MAC: 0000-0000-0000
<--packets: 1 bytes: 60 --> packets: 1 bytes: 60
10.0.10.11:13012[155.1.121.254:2059] --> 114.114.114.114:2048 PolicyName: User_to_Internet # 源目地址
# 记录的会话表项,此会话表项预测了对端(公网)回应给本地时应发送的数据包,比如在ICMP流量中,回包的源目IP会发生颠倒
# 2.目的NAT策略配置,使得internet用户能够通过公网地址来访问内部服务器
[FW]
# 1.自定义的服务,主要用来绑定HTTP和FTP服务的
ip service-set DMZ type object 16
service 0 protocol tcp source-port 0 to 65535 destination-port 80
service 1 protocol tcp source-port 0 to 65535 destination-port 21
# 2.创建目的NAT地址池
destination-nat address-group Server 0 # 目的NAT地址池,此公网地址给Internet用户访问内部服务
section 10.0.100.1 10.0.100.1
# 3.配置目的NAT地址转换策略
nat-policy
rule name Server_NAT
source-zone untrust
destination-address 155.1.121.100 mask 255.255.255.255
service DMZ
action destination-nat static address-to-address address-group Server
rule name Server_NAT
source-zone untrust
destination-address 155.1.121.100 mask 255.255.255.255
service protocol tcp destination-port 8081 # 公网用户访问8081端口
action destination-nat static port-to-port address-group Server 80 # 转换成私网IP地址10.0.100.1的80端口
# 附加配置方案:可以配置端口到端口的服务转换,只开放对应的端口服务
#4. FW上配置一条去往提供给外部用户访问内部服务的公网地址的静态路由,出接口指向NULL0,避免产生路由环路
# (内部服务器故障时无法完成地址转换,如果internet用户再访问此地址时,就会匹配防火墙的默认路由)
ip route-static 155.1.121.100 255.255.255.255 NULL0
# 5.做NAT时,如果有DNS和FTP,那么此时需要在NAT设备上开启AGL NAT 功能,此时NAT除了可以转换三层IP地址信息,也可以转换应用层里的地址信息
# 主要是解决因多通道应用协议(FTP被动模式)因后续使用的端口无法匹配防火墙的会话表项造成数据包被丢弃的问题
firewall interzone dmz untrust
detect ftp
# Internet用户测试访问FTP服务和HTTP服务
[FW1]display security-policy rule all
2024-06-06 15:44:20.100
Total:4
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
1 Local_to_Any enable permit 11
2 User_to_Internet enable permit 15
3 Server_to_Internet enable permit 1 # 能够命中安全策略
[FW1]display firewall session table verbose source-zone untrust protocol tcp # FTP流量产生的会话表项
2024-06-06 15:45:03.930
Current Total Sessions : 1
ftp VPN: public --> public ID: c487f0abeab6de821fd6661d94a # 协议为FTP
Zone: untrust --> dmz TTL: 00:20:00 Left: 00:19:20
Recv Interface: Dialer1
Interface: GigabitEthernet1/0/0.2 NextHop: 10.0.100.1 MAC: 5489-98fb-44fb
<--packets: 9 bytes: 679 --> packets: 11 bytes: 490
122.1.12.1:2052 +-> 155.1.121.100:21[10.0.100.1:21] PolicyName: Server_to_Internet
# 此处可以看到公网用户122.1.12.1访问155.1.121.100时,FW进行了地址转换,转换成内网服务器的10.0.100.1
TCP State: established
http VPN: public --> public ID: c487f0abeab50502bd26661d9e5 # HTTP流量产生的会话表项
Zone: untrust --> dmz TTL: 00:00:10 Left: 00:00:02
Recv Interface: Dialer1
Interface: GigabitEthernet1/0/0.2 NextHop: 10.0.100.1 MAC: 5489-98fb-44fb
<--packets: 4 bytes: 465 --> packets: 6 bytes: 414
122.1.12.1:2054 --> 155.1.121.100:80[10.0.100.1:80] PolicyName: Server_to_Internet
# 此处也进行了目的地址转换
TCP State: close
# 上述的FTP协议,客户端无论是主动模式还是被动模式,都可以访问服务器,原因就得益于防火墙默认开启了ASPF功能,它可以临时生成一个Server-Map表项,
# 当有流量继续进来时,虽然没有命中会话表项,但是会继续查看Server-Map表项。
[FW1]display firewall server-map # FTP被动模式下FW生成的Server-Map表项
2024-06-06 16:00:05.240
Current Total Server-map : 1
Type: ASPF, 122.1.12.1 -> 155.1.121.100:2050[10.0.100.1:2050], Zone:---
# 这里防火墙提前预测了外网Internet用户需要使用目的端口2050来与服务器建立数据连接
Protocol: tcp(Appro: ftp-data), Left-Time:00:00:14
Vpn: public -> public
3.3 动态目的NAT的实现
动态目的NAT相比静态,只不过是转换后的地址不存在一种固定的映射关系。(静态目的NAT即一个目的地址对应一个内部地址;动态目的NAT即一个目的地址对应多个内部地址)
如上图所示,在FW上配置动态目的NAT,以实现内网用户可以使用某个公网IP(155.1.121.101)访问内部服务器,对应的内部服务器有两台,IP分别是10.0.100.200/201;它们都提供一样的服务,形成负载均衡的形式。
# 1.配置目的NAT地址池
[FW1]
destination-nat address-group DNAT 1
section 10.0.100.200 10.0.100.201 # 目的NAT地址池中的地址存放的是转换后的地址
# 2.配置安全策略,放行Trust-DMZ区域的流量
security-policy
rule name trust_to_dmz
source-zone trust
destination-zone dmz
source-address 10.0.10.0 mask 255.255.255.0
destination-address 10.0.100.0 mask 255.255.255.0 # 访问内部服务器(转换后的地址)
action permit
# 3.配置目的动态NAT策略,实现用户访问某个公网IP地址时,其提供转换的地址有多个
[FW1]display nat-policy rule name Dynamic_NAT
2024-06-11 12:57:31.570
(25 times matched)
rule name Dynamic_NAT
source-zone trust
source-address 10.0.10.0 mask 255.255.255.0
destination-address 155.1.121.101 mask 255.255.255.255 # 转换前提供用户访问的地址
action destination-nat address-group DNAT # 开启目的NAT,转换后的地址使用目的地址池
# 注意:在NAT策略视图中配置目的NAT行为时,不要加上目的区域
# 4.现象验证
# Trust区域内部PC1主机访问151.1.121.101,查看是否是对应的两台服务器提供的访问
[FW1]display firewall session table
2024-06-11 12:51:19.830
Current Total Sessions : 5
icmp VPN: public --> public 10.0.10.11:16456 --> 155.1.121.101:2048[10.0.100.200:2048]
icmp VPN: public --> public 10.0.10.11:17224 --> 155.1.121.101:2048[10.0.100.201:2048]
icmp VPN: public --> public 10.0.10.11:16712 --> 155.1.121.101:2048[10.0.100.201:2048] # 成功使用地址池中的地址进行转换
icmp VPN: public --> public 10.0.10.11:17480 --> 155.1.121.101:2048[10.0.100.200:2048]
icmp VPN: public --> public 10.0.10.11:16968 --> 155.1.121.101:2048[10.0.100.200:2048]
# Trust区域HTTP客户端访问HTTP服务时,查看是否有对应的两台服务器提供服务
[FW1]display firewall session table
2024-06-11 12:53:42.550
Current Total Sessions : 3
netbios-name VPN: default --> default 10.0.0.10:137 --> 10.0.0.255:137
http VPN: public --> public 10.0.10.21:2052 --> 155.1.121.101:80[10.0.100.200:80]
http VPN: public --> public 10.0.10.21:2051 --> 155.1.121.101:80[10.0.100.201:80] # 成功使用地址池中的地址进行转换
3.4 双向NAT的实现
双向NAT即是在转换过程中同时转换报文的源IP地址和目的IP地址,在某些应用场景中会使用到。如上图动态NAT的实现中,假设DMZ区域的服务器没有配置网关,那么Trust内部区域的IP地址在使用公网IP-151.1.121.101访问内部服务器时,内部服务器在进行回包时,对应的目的IP为公网IP,但是跟自己不是一个网段,又没有配置网关,所以会丢包。
此时,可以通过双向NAT,在内部主机通过公网IP访问内部服务器时,报文经过防火墙时既转换源IP(转成内部服务器网段的IP);又转成目的IP。
# 配置双向NAT的策略,内网主机使用公网IP访问内部服务器时,转换源地址为内部服务器对应的网段接口IP
[FW1]display nat-policy rule name Two_way
2024-06-11 13:22:49.820
(5 times matched)
rule name Two_way
source-zone trust
source-address 10.0.10.0 mask 255.255.255.0
destination-address 155.1.121.101 mask 255.255.255.255
action source-nat easy-ip # 源IP转换,此处是根据安全策略识别
action destination-nat address-group DNAT # 目的IP转换,转换成内部服务器IP
# 现象严重:内部服务器没有配置网关,但通过双向NAT也可以实现内部用户通过公网IP访问内部服务器
[FW1]display firewall session table
2024-06-11 13:22:15.510
Current Total Sessions : 5
icmp VPN: public --> public 10.0.10.11:32591[10.0.100.254:2049] --> 155.1.121.101:2048[10.0.100.201:2048]
icmp VPN: public --> public 10.0.10.11:32847[10.0.100.254:2049] --> 155.1.121.101:2048[10.0.100.200:2048]
icmp VPN: public --> public 10.0.10.11:31823[10.0.100.254:2048] --> 155.1.121.101:2048[10.0.100.201:2048]
icmp VPN: public --> public 10.0.10.11:33103[10.0.100.254:2050] --> 155.1.121.101:2048[10.0.100.201:2048]
icmp VPN: public --> public 10.0.10.11:32335[10.0.100.254:2048] --> 155.1.121.101:2048[10.0.100.200:2048]
3.5 NAT-ALG功能
ASPF和ALG功能实现较为相似,都是对应用层协议的相关信息进行处理,来达到特殊的目的。下面说说两者的区别
- ASPF:通过对应用层协议的报文分析,根据应用层中的IP和端口创建Server-Map表;然后为其开放相应的包过滤规则。
- ALG:应用级网关,主要是完成应用层数据中携带的IP地址及端口号的转换。
在上述拓扑中,AR1(公网路由器)上在添加一个公网的服务器,配置完安全策略和源NAT地址转换策略后,如果使用FTP被动服务,那么是没有什么问题的。但是若在关闭ALG功能的情况下,再使用FTP主动模式去连接,此时就会发生问题。
因为FTP主动模式下,当完成第一信道-控制连接建立完毕后;第二信道-数据通道,是客户机向服务器发送一个PORT报文,由服务器接收并计算出客户端的端口号,然后服务器使用20号端口连接计算出的客户机的随机端口。但是由于没有ALG功能,NAT无法实现对应用层的数据进行转换,所以目的IP是PC的私网IP,而公网路由器又没有对应的路由信息,所以会直接丢弃。
如上图所示,服务器是通过自己的20号端口与PC进行建立数据连接的,但是目的IP为PC的私网IP地址,因为没有路由,所以就发生了丢包现象。
[FW1]firewall detect ftp
firewall interzone trust untrust
detect ftp
# 开启ALG功能后,主动模式就会正常,因为ALG能够对应用层中携带的IP进行转换
3.6 配置NAT-Server时的一些参数意义
NAT Server也称静态映射,是一种转换报文目的IP地址的方式,它提供了公网地址和私网地址的映射关系,实现外部网络用户通过公网地址访问私网内部服务器的需求。
配置目的NAT映射时,有两个常用的可选参数,分别是unr-route和no-reverse。
-
unr-route:表示下发UNR路由,防止路由环路。与nat-disable同时配置时,不影响unr-route表项的创建。
- 当防火墙配置的NAT-Server所映射的公网IP与公网物理接口对应的IP地址一致时,不需要配置黑洞路由
- 当防火墙配置的NAT-Server所映射的公网IP与公网物理接口对应的IP地址在同一个物理网段时,建议配置黑洞路由(因为防火墙进行地址转换后还会再查询路由表)
- 当防火墙配置的NAT-Server所映射的公网IP与公网物理接口对应的IP地址不在同一个物理网段时,必须配置黑洞路由
-
no-reverse:表示不创建反向server map,如果不配置就表示正反向server map都创建。举例:假设配置一个Untrust-DMZ的NAT-Server,那么防火墙会创建两个方向的Server-Map表项,一个是Untrust-DMZ的;另一个是DMZ-Untrust的;但是实际上的网络是不需要让DMZ区域访问Internet的,所以可以开启
no-reverse
功能来关闭反向的Server-Map。
-
# 配置举例 <sysname> system-view [sysname] nat server for_web protocol tcp global 10.110.10.10 8080 inside 192.168.10.10 www no-reverse unr-route # 表示将NAT-Server的映射公网IP设置成10.110.10.10-8080端口,内部地址192.168.10.10的HTTP服务,并且关闭反向Server-Map和开启防止路由黑洞问题
四.防火墙内置负载均衡服务
背景:FW作为安全网关可部署在服务器集群的网络入口。企业园区内网的用户和服务器处于同一网络内的不同区域,FW通过安全策略控制用户对服务器集群的访问。分支机构的用户需要通过Internet网络访问服务器,FW为其提供安全接入机制,从而充分利用服务器资源提供远程服务。服务器按照服务类型的不同被分成多个组,FW将用户的流量发送给相应的服务器组,并通过服务器负载均衡功能指定具体处理业务的服务器。
服务器负载均衡按照逐流的方式进行流量分配,每一条流量到达FW后,FW就会按照配置的负载均衡算法,对其进行一次处理。下面介绍常见的服务器负载均衡架构
在上图中,客户端Client 1发出的服务请求需经过FW负载均衡处理后,再转发至服务器集群中的某台服务器上。
上图中标识的R1~Rx是一组提供相同服务的实服务器,它们组成实服务器组grp1。客户端Client 1的服务请求最终是由grp1中的一台实服务器来处理的。
为了便于管理并保证实服务器的安全,实服务器组grp1在逻辑上抽象为一台高性能、高可靠性的虚拟服务器vs1。对于客户端Client 1来说,他访问的是虚拟服务器,而并不知道实际处理业务的是实服务器。
4.1 服务器负载均衡所使用的技术
- HTTP调度策略:根据HTTP协议首部字段来制定调度策略,字段包括URL、Referer、Host、cookie。根据HTTP调度策略即可调度新的实服务器组来处理业务流量。
- 负载均衡算法:决定了FW如何分配业务流量到服务器上,选择合适的负载均衡算法可以获得理想的负载均衡效果(简单轮询/加权轮询/最小连接/源IP-HASH)
- 简单轮询算法:将客户端的业务流量依次分配到各个服务器上,并不会考虑每个服务器上的实际负载。
- 加权轮询算法:将客户端的业务流量按照一定权重比依次分配到各个服务器上。比如可以配置服务器权重比为2:1:1:1;经过一端时间后,服务器的累计连接数量比例也会达到此数值
- 最小连接算法:将客户端的业务流量分配到并发连接数最小的服务器上。并发连接数即服务器对应的实时连接数,会话新建或老化都会影响并发连接数的大小。
- 源IP Hash算法:将客户端的IP地址进行Hash运算,得到Hash Index值。FW根据Hash Index值与Hash列表中服务器的对应关系,分配流量至服务器。(有点随机性)
- 会话保持:将同一客户端一定时间内的业务流量都保持在同一个实际服务器上,在此期间不要负载均衡到其他的实际服务器上。使用场景如下:
- 第一个场景是客户端需要与服务器进行多次交互,才能完成一次特定操作
- 第二个场景是服务器上保存了用户的相关业务信息,为了方便用户本次或下次使用,可以令此服务器处理该用户的所有请求。
- 在这两个场景中需要保证同一客户端的业务流量都被分配到同一个服务器上,如果交互过程中更换了处理业务的服务器,则客户端无法成功完成特定操作,需要重新进行请求。
4.2 简单负载均衡-实验模拟
依然使用上面的拓扑图进行扩充
如上图所示,LSW1上的两台服务器作为一个服务器组,这两个服务器提供相同的HTTP服务,合并成一个虚拟服务器IP为155.1.121.110,公网用户访问此内网服务时,使用虚拟服务器的IP访问,并且在防火墙上通过简单负载均衡-轮询的方式对Internet用户的流量进行负载处理,减轻单台服务器的性能压力。
[FW1]security-policy # 安全策略配置
rule name Internet_to_Server
description Internet_to_Server_Test_SLB
source-zone untrust
destination-zone dmz
destination-address 155.1.121.110 mask 255.255.255.255
service protocol tcp source-port 0 to 65535 destination-port 8081
action permit
# 负载均衡简单配置
sa
#
location
#
slb # 启用负载均衡服务
persistence 0 Session_Keeping # 开启会话保持
type source-ip
group 0 HTTP_Group # 创建实际服务器组
metric roundrobin
health-check type tcp
rserver 0 rip 10.0.100.200 port 80 # 具体的实际服务器
rserver 1 rip 10.0.100.201 port 80
action optimize
vserver 0 HTTP_Server
vip 0 155.1.121.110 # 映射的虚拟服务器
protocol tcp
vport 8081
group HTTP_Group
persistence Session_Keeping
[FW1]display firewall session table
2024-06-17 08:15:57.070
Current Total Sessions : 6
http VPN: public --> public 122.1.12.1:2055 --> 155.1.121.110:8081[10.0.100.200:80]
# 第一台主机访问内网的HTTP服务,使用155.1.121.110公网IP,到达防火墙时,由配置的负载均衡转换表完成地址转换,交给实际服务器-10.0.100.200处理
[FW1]display firewall session table
2024-06-17 08:17:48.700
Current Total Sessions : 8
http VPN: public --> public 122.1.12.2:2056 --> 155.1.121.110:8081[10.0.100.201:80]
# 第二台主机访问内网的HTTP服务,使用155.1.121.110公网IP,到达防火墙时,由配置的负载均衡转换表完成地址转换,交给实际服务器-10.0.100.201处理
# 通过以上配置,实现了服务器组的简单轮询负载均衡
<FW1>display slb vserver # 查看虚拟服务器的信息
2024-06-17 08:24:19.530
Virtual Server Information(Total 1)
---------------------------------------------------------------------------------------------
Virtual Server Name : HTTP_Server
Virtual Server ID : 0
Virtual Server IP : 155.1.121.110
Protocol : tcp
Virtual Server Port : 8081
Http X-forward Enable : Disable
Virtual Server Max-conn : --
Persistence Name/ID(Type): Session_Keeping/0(source-ip)
Group Name : HTTP_Group
Group ID : 0
---------------------------------------------------------------------------------------------
<FW1>display slb group # 查看实际服务器组的信息
2024-06-17 08:24:21.260
Group Information(Total 1)
------------------------------------------------------------------------------------------------------------
Group Name : HTTP_Group
Group ID : 0
Metric : roundrobin
Source-nat Type : NA
Health Check Type : tcp
Real Server Number : 2
RserverID IP Address Weight Max-connection Status
0 10.0.100.200 1 - Active
1 10.0.100.201 1 - Active
------------------------------------------------------------------------------------------------------------
如上图所示,在防火墙的Web界面中可以看到用户在进行访问时,HTTP的流量被均摊到多台服务器上,(模拟器支持效果有限)