Juniper SRX 防火墙配置教程:从零开始的完整指南 - 夜莺博客

Juniper SRX 防火墙配置教程:从零开始的完整指南

Juniper SRX 防火墙基于 Junos OS,安全策略(Security Policy)与区域(Zone)的模型和思科 ASA/华为 USG 的思路完全不同,初次上手的人往往在"策略为什么不通"上卡很久。本文用中文把 SRX 最核心的配置流程讲透:从初始登录、划分安全区域,到写安全策略、做源 NAT 和目的 NAT,每一步都给出真实可用的 Junos 命令和验证方法,照着配置就能把一台全新的 SRX 变成一台能上线的出口防火墙。

全文按"能上线"的顺序组织:先让设备能被管理,再让接口有身份、策略能放行、NAT 能转换,最后用三条命令把 90% 的排障问题定位到具体环节。文末还有一张与思科 ASA、华为 USG 的概念对照表,从别的厂商转过来的人可以先看那张表建立映射。

第一步:初始配置(管理地址、root 密码与基础参数)

root@% cli
root@# set system root-authentication plain-text-password
New password: ********
root@# set system host-name SRX-EDGE
root@# set system name-server 223.5.5.5
root@# set system time-zone Asia/Shanghai
root@# set system ntp server 10.0.0.10
root@# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/24
root@# set interfaces ge-0/0/1 unit 0 family inet address 10.0.0.1/24
root@# commit

SRX 出厂时 root 账号需要先设置密码,commit 提交后配置才生效——这是 Junos 与 IOS 最大的区别:所有修改都在 candidate 配置里,必须 commit。没 commit 之前,show configuration 看得到你敲的命令,但设备行为一点没变,这也是"命令没错但不生效"最常见的原因。

顺手把时区和 NTP 一起配好。SRX 的会话日志、策略命中时间、证书校验全部依赖系统时钟,时钟漂移会让日志时间对不上,排障时先怀疑时钟是值得养成的习惯。如果你想让 SRX 通过 DHCP 获取外网地址,把 family inet address 换成 family inet dhcp 即可。管理访问方面,出厂状态下的管理口没有任何安全区域归属,需要显式把它划进一个区域并放行管理协议,见下一节。

刚上手的设备建议先用一根网线直连 ge-0/0/0,把 192.168.1.1/24 配成管理地址,确认 Web/SSH 都能进,再往机架上装。

第二步:划分安全区域(Zone)

root@# set security zones security-zone trust interfaces ge-0/0/0.0
root@# set security zones security-zone untrust interfaces ge-0/0/1.0
root@# set security zones security-zone trust host-inbound-traffic system-services ping
root@# set security zones security-zone trust host-inbound-traffic system-services ssh
root@# commit

区域是 SRX 策略的基础:默认情况下区域之间流量全部拒绝,只有显式策略才能放行。trust 放内网,untrust 放外网。

host-inbound-traffic 这几行是新手最容易漏的一步,它和"安全策略"是两套完全独立的机制:安全策略管的是穿过(transit)防火墙的流量,host-inbound-traffic 管的是"送达到 SRX 自己"的流量,比如 ping、SSH、HTTPS 管理页、DHCP 客户端、IKE。所以会出现"内网 ping 不通网关,但内网能上网"这种看起来矛盾的现场——策略放行了穿越流量,却没放行到本机的 ICMP。

一个接口只能属于一个安全区域,子接口可以属于不同区域(ge-0/0/1.100 与 ge-0/0/1.200 分属不同 zone 是常见做法)。如果接口同时要承载多个网段的策略隔离,用 VLAN 子接口划分区域比堆更多策略更清晰。配置完成后用 show security zones 核对每个接口的归属。

第三步:配置安全策略(Security Policy)

root@# set security policies from-zone trust to-zone untrust policy PERMIT-OUT match source-address any
root@# set security policies from-zone trust to-zone untrust policy PERMIT-OUT match destination-address any
root@# set security policies from-zone trust to-zone untrust policy PERMIT-OUT match application any
root@# set security policies from-zone trust to-zone untrust policy PERMIT-OUT then permit
root@# set security policies from-zone trust to-zone untrust policy PERMIT-OUT then log session-init
root@# commit

策略五要素:from-zone、to-zone、源地址、目的地址、应用。只写源/目的而漏掉 application,是策略不通的第一大原因。写完后用 show security policies 检查。

比"记住五要素"更实用的是理解策略的匹配顺序。SRX 只匹配方向:从 trust 到 untrust 的策略不会对回程流量生效,回程由会话表自动放行(有会话才放行,这是状态防火墙的定义)。策略从上到下匹配,第一条命中的策略决定动作,所以"拒绝某些内网主机上网"这类需求必须把具体拒绝写在大范围放行之前,否则永远匹配不到。

上线初期建议给放行策略加上 then log session-init,需要统计的加 then count:前者在会话建立时写一条日志,后者让策略带上命中计数器,两者都是排障时最直接的证据。等策略稳定后可以把日志降级为 session-close,或者只保留关键策略的日志,避免日志量压垮 syslog 服务器。

更精细的放行靠地址簿(address-book)。先把对象定义成名字,策略里引用名字,以后 IP 变化只改一处:

root@# set security address-book global address WEB-SRV 10.0.0.10/32
root@# set security address-book global address-set SERVERS address WEB-SRV
root@# set applications application APP-8080 protocol tcp destination-port 8080-8080
root@# set security policies from-zone untrust to-zone trust policy PERMIT-WEB match destination-address WEB-SRV
root@# set security policies from-zone untrust to-zone trust policy PERMIT-WEB match application APP-8080
root@# set security policies from-zone untrust to-zone trust policy PERMIT-WEB then permit

注意这里最后一个策略的方向是 untrust → trust:从外网主动访问内网服务器,必须在"外 → 内"方向上显式放行,同时配合下面的目的 NAT 把公网地址转换成内网地址。很多"端口映射做了但不通"的案例,就是只做了 NAT,忘了这条反向策略。

第四步:配置源 NAT(上网必备)

root@# set security nat source rule-set OUTBOUND from zone trust
root@# set security nat source rule-set OUTBOUND to zone untrust
root@# set security nat source rule-set OUTBOUND rule SNAT-1 match source-address 192.168.0.0/16
root@# set security nat source rule-set OUTBOUND rule SNAT-1 then source-nat interface
root@# commit

source-nat interface 表示用出接口地址做 PAT(端口复用),内网 192.168.0.0/16 的流量出去后都变成出口公网地址,这是小型出口最常见的方式。

如果出口有固定的公网地址池,或者需要对不同网段做不同出口,把 then source-nat interface 换成地址池:

root@# set security nat source pool SNAT-ADDR address 203.0.113.5/32
root@# set security nat source rule-set OUTBOUND rule SNAT-2 match source-address 192.168.30.0/24
root@# set security nat source rule-set OUTBOUND rule SNAT-2 then source-nat pool SNAT-ADDR

规则集内的规则按序号(rule 后面的顺序)从上到下匹配,第一条命中即生效,和策略一样。所以"某网段走 A 出口、其余走 B 出口"的写法是:具体网段的规则编号在前,any 的兜底规则在后。规则集还支持用 from zone / to zone 限定生效方向,把方向写清楚能避免内网互访被意外 NAT 掉——内网互访如果被源 NAT 成出口地址,回包就找不到原地址,表现为"跨网段能 ping 通但访问共享目录失败"这类稀奇古怪的故障。检查命令是 show security nat source summary,能看到每个规则集的命中计数。

第五步:配置目的 NAT(对外发布服务器)

root@# set security nat destination pool WEB-POOL address 10.0.0.10 port 80
root@# set security nat destination rule-set INBOUND from zone untrust
root@# set security nat destination rule-set INBOUND rule WEB-80 match destination-address 203.0.113.5
root@# set security nat destination rule-set INBOUND rule WEB-80 match destination-port 80
root@# set security nat destination rule-set INBOUND rule WEB-80 then destination-nat pool WEB-POOL

目的 NAT 把公网地址+端口映射到内网服务器,就是常说的端口映射。两个容易漏的配套动作:一是上面提到的反向安全策略(untrust → trust,目的地是服务器地址,应用是 80/443);二是 ARP 响应。较老版本的 Junos(15.1X49 之前)需要手动配置 proxy-arp,新版本会自动为 NAT 地址做 ARP 应答:

root@# set security nat proxy-arp interface ge-0/0/1.0 address 203.0.113.5

判断是否需要这一步的方法很直接:从外网 ping 或 curl 这个公网地址,如果用 monitor traffic interface ge-0/0/1 一个包都看不到,说明报文根本没到 SRX,问题在上游路由或 ARP,不在 NAT;如果能看到入向报文但没有回包,才回到策略和 NAT 规则集里查。

第六步:静态路由与默认路由

root@# set routing-options static route 0.0.0.0/0 next-hop 10.0.0.254
root@# set routing-options static route 192.168.2.0/24 next-hop 192.168.1.254
root@# commit

默认路由指向运营商网关,让内网能出去;内网其他网段的回程路由指向核心交换机的 SVI,让外网的回包能回来。SRX 是路由器,有回程路由这条基本要求经常被忽略:NAT 做对了、策略放行了,但内网另一个网段访问不通外网,原因就是 SRX 上没有那个网段的路由。

show route 看路由表,show route 0.0.0.0/0 看默认路由的下一跳和优先级,show route forwarding-table 看实际转发表。接口状态异常时先 show interfaces ge-0/0/1 terse 确认 up/up,物理层没起来的话,后面所有配置都是空谈。

第七步:验证与排障

show security zones
show security policies
show security policies hit-count
show security nat source summary
show security nat destination summary
show security flow session
show security flow session summary
clear security flow session all
monitor traffic interface ge-0/0/1

流量不通时按这个顺序查:先看 show security flow session summary 有没有会话,再看策略命中计数,最后用 monitor traffic 抓包确认报文是否到达接口。三个命令能解决 90% 的 SRX 排障问题。

把这套顺序展开成一个可以照着走的判断链,比记命令更有用:

  • 第一步,看会话。show security flow session destination-prefix 8.8.8.8/32 有没有会话?有会话说明策略和 NAT 都通过了,问题在转发或上游,去看路由和接口。没会话说明报文根本没过防火墙,往下走。
  • 第二步,看策略命中。show security policies hit-count 里那条相关策略的计数有没有涨?不涨说明流量没匹配到这条策略,检查区域归属(show security zones)和策略五要素尤其是 application。
  • 第三步,看 NAT。show security nat source summary 的命中计数,以及规则顺序是不是被前面的 any 规则截胡了。
  • 第四步,看报文到了没有。monitor traffic interface ge-0/0/1 抓包,能看到入向报文说明上游正常,问题在 SRX 内部;看不到说明问题在 SRX 之外。
  • 第五步,清会话重试。改完策略或 NAT 后旧会话可能还在,clear security flow session all 之后重新发起一次,能排除"配置已改但会话是旧的"这种假故障。

常见坑位提醒

  • 忘记 commit:Junos 不改不生效,所有配置必须 commit。可以用 commit check 先做语法校验,rollback 1 回到上一个版本。
  • 管理口 ge-0/0/0 默认属于什么 zone?出厂无 zone,需要手动加入 trust 并放行管理协议,否则配好 IP 也连不上。
  • 策略放行后仍不通:检查 NAT 规则集顺序、检查会话表是否有旧会话(clear security flow session)。
  • host-inbound-traffic 没放行:ping 不通网关、SSH 进不去、DHCP 拿不到地址,都属于这一类,和穿越策略无关。
  • 反向策略缺失:从外网访问内网服务器,需要 untrust → trust 的策略,很多人只做了 trust → untrust。
  • 代理 ARP 版本差异:老版本需要手动配 proxy-arp,新版本自动处理,照文档配错方向会表现为"外网 ping 不到公网地址"。
  • 回程路由缺失:内网多网段场景下,SRX 上必须有多网段的路由,否则表现为单方向不通。
  • 接口引用写成接口名而不是 .0 单元:安全区域里引用的是 ge-0/0/0.0,写错会被 commit 拒绝或区域里看不到接口。

概念对照:SRX、ASA 与 USG

  • 区域:SRX 用 security-zone;思科 ASA 用 nameif + security-level(用级别高低表达信任度);华为 USG 同样用 security-zone。
  • 策略:SRX 是 from-zone/to-zone 五要素策略;ASA 是 access-list 加 access-group;USG 是 security-policy。
  • 默认行为:SRX 区域间默认拒绝,必须显式放行;ASA 传统上高安全级别到低安全级别默认允许;USG 默认拒绝。
  • NAT:SRX 用 security nat source/destination rule-set;ASA 8.4 以后用 nat (inside,outside) 的对象式写法;USG 用 nat-policy。
  • 保存:SRX 是 commit(立即生效,没有单独的保存动作);ASA 与 USG 需要显式保存配置。

从 ASA 或 USG 转过来的人最需要转变的一点是:SRX 没有"高安全级别自动放行"的隐含规则,所有放行都是显式的、带方向的,看起来麻烦,但排障时路径更清楚——通了就是有策略命中,不通就是没有。

相关阅读:Juniper SRX Firewall Configuration: 14-Step Guide(英文版)、Juniper SRX security policy configuration guide、Juniper SRX300 初始化配置教程、Juniper SRX 用户认证配置。需要更细粒度的过滤时看 Junos 防火墙过滤器 terms 与动作;接口报错含义可以查 Junos show interfaces extensive 错误字段解释;做站点到站点 VPN 时,Cisco ASA 站点到站点 IPsec VPN 配置可以做概念对照。

原文链接:https://www.juniper.net/documentation/us/en/software/srx/index.html