Juniper SRX防火墙配置教程:JUNOS基础到NAT与策略 - 夜莺博客

Juniper SRX防火墙配置教程:JUNOS基础到NAT与策略

SRX 是 Juniper 基于 JUNOS 操作系统的安全产品系列,JUNOS 集成了路由、交换、安全与丰富的网络服务,采用模块化架构和层次化配置结构。本教程面向熟悉 ScreenOS 或 Cisco 防火墙的工程师,对照讲解 SRX 的 JUNOS 配置方法:初始安装、安全策略、NAT、IPSEC VPN 以及常规维护命令。

JUNOS 操作系统与层次化配置结构

JUNOS 基于 FreeBSD 内核,CLI 分为操作(operational)模式和配置(configure)模式。操作模式用于查看状态、路由与会话表;执行 config 或 edit 进入配置模式。配置通过 set 语句完成,delete 删除配置,修改后必须 commit 生效:

user@SRX> configure
[edit]
user@SRX# set system host-name SRX1
user@SRX# commit

可用 load factory-default 恢复出厂配置;deactivate security nat / activate security nat 可临时禁用/启用配置。

SRX 初始安装与远程管理

user@SRX# set system root-authentication plain-text-password
user@SRX# set system services ssh
user@SRX# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/24
user@SRX# set system name-server 8.8.8.8
user@SRX# commit

安全策略 Policy 配置

SRX 安全功能全部在 security 层级下配置:Zone、Policy、Address-book、NAT、IPsec、Screen、IDP。基础策略三步:定义 Zone、将接口加入 Zone、配置 from/to 策略:

user@SRX# set security zones security-zone trust interfaces ge-0/0/0.0
user@SRX# set security zones security-zone untrust interfaces ge-0/0/1.0
user@SRX# set security policies from-zone trust to-zone untrust policy PERMIT-ALL match source-address any destination-address any application any
user@SRX# set security policies from-zone trust to-zone untrust policy PERMIT-ALL then permit

安全策略进阶:地址簿、应用与日志

基础策略用 any 匹配就能跑通,但生产环境的策略应当精确到地址簿条目和应用集,并且必须打开会话日志,否则故障排查时只能得到"流量不通"这一句话,拿不到任何证据。地址簿按 Zone 定义,策略中引用名称而不是裸地址,这样服务器换 IP 只需要改一处:

user@SRX# set security address-book global address WEB-SRV 10.0.0.10/32
user@SRX# set security address-book global address DB-SRV 10.0.0.20/32
user@SRX# set applications application-set WEB-APPS application junos-http
user@SRX# set applications application-set WEB-APPS application junos-https
user@SRX# set security policies from-zone trust to-zone untrust policy WEB-OUT match source-address WEB-SRV
user@SRX# set security policies from-zone trust to-zone untrust policy WEB-OUT match destination-address any
user@SRX# set security policies from-zone trust to-zone untrust policy WEB-OUT match application WEB-APPS
user@SRX# set security policies from-zone trust to-zone untrust policy WEB-OUT then permit
user@SRX# set security policies from-zone trust to-zone untrust policy WEB-OUT then log session-init
user@SRX# set security policies from-zone trust to-zone untrust policy WEB-OUT then log session-close
user@SRX# commit

策略自上而下匹配,第一条命中即生效,因此专有策略必须排在 any-any 之前。需要调整顺序时用 insert,而不是删除重建:

user@SRX# insert security policies from-zone trust to-zone untrust policy WEB-OUT before policy PERMIT-ALL

JUNOS 默认策略是拒绝且不记录日志,很多"设备坏了"的工单最后都停在默认拒绝上。经验做法是保留一条带 session-init 日志的显式拒绝策略放在末尾,或在排查期间临时开启 flow traceoptions(见后文)。另外策略支持时间段调度(then permit application-services ... 与 scheduler-name),可以用于只允许上班时间访问的运维通道。

NAT 配置

SRX 支持接口 NAT、地址池源 NAT、目的 NAT 与静态 NAT:

! Interface based NAT(出接口 NAT)
user@SRX# set security nat source rule-set OUT from zone trust
user@SRX# set security nat source rule-set OUT to zone untrust
user@SRX# set security nat source rule-set OUT rule R1 match source-address 0.0.0.0/0
user@SRX# set security nat source rule-set OUT rule R1 then source-nat interface

! Pool based Source NAT
user@SRX# set security nat source pool POOL1 address 203.0.113.10/32
user@SRX# set security nat source rule-set OUT rule R1 then source-nat pool POOL1

! Static NAT(一对一)
user@SRX# set security nat static rule-set DMZ from zone untrust
user@SRX# set security nat static rule-set DMZ rule S1 match destination-address 203.0.113.20/32
user@SRX# set security nat static rule-set DMZ rule S1 then static-nat prefix 10.0.0.20/32

Screen 安全防护(防扫描与防洪水)

Screen 是 SRX 自带的抗攻击功能,作用在接口或 Zone 上,与安全策略互相独立、先于策略生效。它覆盖 SYN Flood、ICMP 洪水、LAND 攻击、ping of death、IP 分片攻击、源地址欺骗等常见类型:

user@SRX# set security screen ids-option UNTRUST-SCREEN icmp ping-of-death
user@SRX# set security screen ids-option UNTRUST-SCREEN icmp land
user@SRX# set security screen ids-option UNTRUST-SCREEN icmp ip-sweep threshold 5000
user@SRX# set security screen ids-option UNTRUST-SCREEN tcp syn-flood alarm-threshold 1000
user@SRX# set security screen ids-option UNTRUST-SCREEN tcp syn-flood attack-threshold 1500
user@SRX# set security screen ids-option UNTRUST-SCREEN tcp land
user@SRX# set security zones security-zone untrust screen UNTRUST-SCREEN
user@SRX# commit

阈值必须按实际流量标定:设得过低会误伤正常的突发连接(例如早上集中上班的登录请求),设得过高则形同虚设。开启后可以用 show security screen statistics zone untrust 观察各项触发计数,用 clear security screen statistics zone untrust 清零后重新观察。注意 alarm-threshold 只告警,attack-threshold 才会真正丢弃报文,调试阶段建议先只设告警。

NAT 的匹配顺序与 proxy-arp

SRX 在处理一个报文时先做目的 NAT,再做源 NAT,两类规则各自在 rule-set 内自上而下匹配,第一条命中即生效,因此 rule-set 的排列顺序和 rule 的顺序都要提前规划。show security nat source rule all 可以查看最终生效的规则顺序,这是排查"NAT 没生效"的第一步。

使用地址池 NAT 时,出口网段的上下游设备必须能够把地址池的地址解析到 SRX 上,否则同网段的路由器会认为这些地址属于自己,回程流量会被抢走。SRX 提供 proxy-arp 解决这个问题:

user@SRX# set security nat source pool POOL1 address 203.0.113.10/32
user@SRX# set security nat source pool POOL1 address 203.0.113.11/32
user@SRX# set security nat proxy-arp interface ge-0/0/1.0 address 203.0.113.10 to 203.0.113.11

另一个常见需求是让外部主动访问内部服务,这需要静态 NAT(一对一)或目的 NAT(端口映射)。静态 NAT 的匹配地址和映射地址一一对应,目的 NAT 则允许把公网地址的某个端口映射到内网主机的另一个端口:

! 目的 NAT:公网 203.0.113.20:8080 → 内网 10.0.0.20:80
user@SRX# set security nat destination pool DPOOL1 address 10.0.0.20/32
user@SRX# set security nat destination pool DPOOL1 address 10.0.0.20/32 port 80
user@SRX# set security nat destination rule-set DMZ from zone untrust
user@SRX# set security nat destination rule-set DMZ rule D1 match destination-address 203.0.113.20/32
user@SRX# set security nat destination rule-set DMZ rule D1 match destination-port 8080
user@SRX# set security nat destination rule-set DMZ rule D1 then destination-nat pool DPOOL1

要注意策略中使用的地址是 NAT 之后的地址:目的 NAT 之后策略匹配内网地址,源 NAT 之前策略匹配内网地址。VPN 流量如果不需要做 NAT,必须用 then source-nat off 的规则显式关闭,否则会出现隧道内源地址被改写、对端无法识别的情况:

user@SRX# set security nat source rule-set OUT rule NO-NAT match source-address 10.10.0.0/16
user@SRX# set security nat source rule-set OUT rule NO-NAT match destination-address 192.168.0.0/16
user@SRX# set security nat source rule-set OUT rule NO-NAT then source-nat off

IPSEC VPN 与 JSRP 高可用

IPsec VPN 在 security ipsec 与 security ike 层级配置(proposal、policy、gateway、vpn);JSRP(chassis cluster)用于双机热备,配置 set chassis cluster 并指定集群口与冗余组。

IPSEC VPN 完整配置示例

IPsec 的配置分为四个层级:IKE 提议(phase 1 参数)、IKE 策略、IKE 网关(对端地址与出接口)、IPsec 提议与 IPsec 策略(phase 2 参数),最后绑定到隧道接口。基于路由的 VPN 更易维护,推荐把隧道绑定到 st0 单元接口,再在隧道接口上跑静态路由或动态路由协议:

user@SRX# set security ike proposal IKE-P1 authentication-method pre-shared-keys
user@SRX# set security ike proposal IKE-P1 dh-group group14
user@SRX# set security ike proposal IKE-P1 authentication-algorithm sha-256
user@SRX# set security ike proposal IKE-P1 encryption-algorithm aes-256-cbc
user@SRX# set security ike proposal IKE-P1 lifetime-seconds 28800
user@SRX# set security ike policy IKE-POL mode main
user@SRX# set security ike policy IKE-POL proposals IKE-P1
user@SRX# set security ike policy IKE-POL pre-shared-key ascii-text "SharedSecret123"
user@SRX# set security ike gateway GW1 ike-policy IKE-POL
user@SRX# set security ike gateway GW1 address 198.51.100.2
user@SRX# set security ike gateway GW1 external-interface ge-0/0/1.0
user@SRX# set security ike gateway GW1 version v2-only
user@SRX# set security ike gateway GW1 local-identity inet 198.51.100.1
user@SRX# set security ike gateway GW1 remote-identity inet 198.51.100.2
user@SRX# set security ipsec proposal IPSEC-P2 protocol esp
user@SRX# set security ipsec proposal IPSEC-P2 authentication-algorithm hmac-sha-256-128
user@SRX# set security ipsec proposal IPSEC-P2 encryption-algorithm aes-256-cbc
user@SRX# set security ipsec proposal IPSEC-P2 lifetime-seconds 3600
user@SRX# set security ipsec policy IPSEC-POL proposals IPSEC-P2
user@SRX# set security ipsec vpn VPN1 ike gateway GW1
user@SRX# set security ipsec vpn VPN1 ike ipsec-policy IPSEC-POL
user@SRX# set security ipsec vpn VPN1 bind-interface st0.0
user@SRX# set security ipsec vpn VPN1 establish-tunnels immediately
user@SRX# set interfaces st0 unit 0 family inet address 10.255.255.1/30
user@SRX# set security zones security-zone VPN interfaces st0.0
user@SRX# set security policies from-zone trust to-zone VPN policy TO-VPN match source-address any destination-address any application any
user@SRX# set security policies from-zone trust to-zone VPN policy TO-VPN then permit
user@SRX# set security policies from-zone VPN to-zone trust policy FROM-VPN match source-address any destination-address any application any
user@SRX# set security policies from-zone VPN to-zone trust policy FROM-VPN then permit
user@SRX# commit

四对参数必须与对端完全一致:加密算法、认证算法、DH 组和预共享密钥。IKE 阶段不通时用 show log kmd 与 show security ike security-associations 判断卡在 phase 1 还是 phase 2,具体报文的排查思路与 IPsec IKEv2 SA_INIT 与 IKE_AUTH 排障 一致。

机箱群集(JSRP)高可用配置

双机热备用 chassis cluster 实现,两台 SRX 通过控制链路和业务链路组成一个逻辑设备,对外共享 reth 接口的 IP 地址。冗余组(redundancy-group)决定哪台设备为主,接口监控(interface-monitor)决定何时切换:

user@SRX# set chassis cluster cluster-id 1 node 0 reboot
! 以下配置在两台设备上执行,node 编号不同
user@SRX# set chassis cluster redundancy-group 0 node 0 priority 200
user@SRX# set chassis cluster redundancy-group 0 node 1 priority 100
user@SRX# set chassis cluster redundancy-group 1 node 0 priority 200
user@SRX# set chassis cluster redundancy-group 1 node 1 priority 100
user@SRX# set chassis cluster redundancy-group 1 preempt
user@SRX# set chassis cluster redundancy-group 1 interface-monitor ge-0/0/1 weight 255
user@SRX# set chassis cluster redundancy-group 1 interface-monitor ge-0/0/2 weight 255
user@SRX# set interfaces ge-0/0/5 gigether-options redundant-parent reth0
user@SRX# set interfaces ge-0/0/10 gigether-options redundant-parent reth0
user@SRX# set interfaces reth0 redundant-ether-options redundancy-group 1
user@SRX# set interfaces reth0 unit 0 family inet address 192.168.1.1/24
user@SRX# commit

用 show chassis cluster status 确认每个冗余组的主备状态,用 show chassis cluster interfaces 查看 reth 接口的冗余状态。需要手工切换时用 request chassis cluster failover redundancy-group 1 node 1,注意 RG0 承载控制面,不要随意切换。机箱群集的完整参数(控制链路、fabric 链路、双控制链路)参考 Juniper SRX 机箱群集配置详解。

常用监控维护命令

user@SRX> show security flow session
user@SRX> show security policies
user@SRX> show security nat source rule-set OUT
user@SRX> show chassis routing-engine
user@SRX> show log messages | match RT_FLOW

日常运维:备份、升级与日志

每次变更前后都要留一份配置备份。SRX 提供救急配置(rescue configuration)和手工保存两种方式,前者类似 Cisco 的 startup-config,可以在设备起不来时通过 loader 恢复:

user@SRX> request system configuration rescue save
user@SRX> show system configuration rescue
user@SRX# save /var/tmp/srx1-config.conf
user@SRX> file copy /config/juniper.conf.gz /var/tmp/juniper-backup.conf.gz
user@SRX> file list /var/tmp/

版本升级前先确认存储空间和当前版本,升级包用 request system software add 安装,重启后核对两个分区:

user@SRX> show version | match "Junos:"
user@SRX> show system storage
user@SRX> request system software add /var/tmp/junos-srx.tgz no-copy reboot
user@SRX> request system snapshot slice alternate
user@SRX> show system alarms

日志和报文捕获是排障的主力。会话日志默认写入 messages 文件,用 RT_FLOW 关键字过滤;抓包用 monitor traffic,注意它只在操作模式下实时输出,适合确认报文有没有到达或离开设备:

user@SRX> show log messages | match RT_FLOW
user@SRX> monitor traffic interface ge-0/0/1.0 no-resolve size 1500
user@SRX> monitor traffic interface ge-0/0/0.0 matching "tcp port 443" write-file /var/tmp/cap.pcap

常见故障排查步骤

SRX 是状态化防火墙,"通"与"不通"的判定依赖会话表。排障顺序应当是:先确认会话是否建立,再确认策略是否命中,最后才怀疑路由或链路。下面几条命令足以覆盖绝大多数工单:

user@SRX> show security flow session source-prefix 10.0.0.10
user@SRX> show security flow session destination-port 443
user@SRX> show security match-policies from-zone trust to-zone untrust source-ip 10.0.0.10 destination-ip 8.8.8.8 source-port 40000 destination-port 443 protocol tcp
user@SRX> show security policies hit-count
user@SRX> show security nat source rule all
user@SRX> show security ike security-associations
user@SRX> show security ipsec security-associations

show security match-policies 是最有价值的一条命令:给出五元组之后,它直接告诉你会命中哪条策略、或者根本没有策略可匹配,省去逐条比对地址簿的时间。会话存在但流量不通时,检查 NAT 之后的地址是否被策略允许;会话不存在时,检查是否存在更靠前的拒绝策略或 Screen 丢弃。

当策略判断仍然不明确时,临时开启 flow traceoptions,把怀疑的五元组过滤出来写日志,观察完毕立刻关闭,避免影响设备性能:

user@SRX# set security flow traceoptions file flow.log size 10m
user@SRX# set security flow traceoptions file files 3
user@SRX# set security flow traceoptions flag basic-datapath
user@SRX# set security flow traceoptions packet-filter F1 source-prefix 10.0.0.10/32
user@SRX# set security flow traceoptions packet-filter F1 destination-prefix 8.8.8.8/32
user@SRX# commit
user@SRX> show log flow.log | last 50
! 排查结束后
user@SRX# delete security flow traceoptions
user@SRX# commit

最后,密码丢失、账号被锁或配置被误删时不要直接重装系统,Junos 密码恢复指南 描述的 loader 流程可以在保留配置的前提下恢复访问。如果是新设备开箱,建议先看 SRX300 系列初始化配置教程 和 SRX 防火墙配置教程(从零开始),把基础接口和远程管理配好之后再引入策略与 VPN。

相关文章:Juniper SRX 防火墙配置教程(从零开始)、Juniper SRX 机箱群集配置详解、Junos 密码恢复指南、Juniper SRX 用户认证配置 以及 SRX 基于路由的站点到站点 IPsec VPN。

原文链接:http://aiyiweb.com/firewall/3