Local-in 策略
Local-in 策略
Local-in Policy 介绍
普通的防火墙策略仅能针对穿越防火墙接口的流量生效,针对目标是 FortiGate 自身地址(且未穿越 FortiGate 接口)的流量是不起作用的。Local-in Policy 可以控制发送到 FortiGate 接口的入方向(未穿越 FortiGate 接口)流量。
重要
即使流量的目标是 FortiGate 自身接口的地址,但穿越了 FortiGate 的接口,就不算 Local-in 流量,可以被普通防火墙策略控制,例如穿越 FortiGate 的 WAN 接口访问设备的内网口的流量。
管理流量(如 HTTPS、PING、SSH 等)可以在接口中配置允许或拒绝。受信任的管理主机可以在管理员选项中配置,以限制可以访问管理服务的主机。Local-in Policy 可以自定义 Local-in 流量的源地址、目的地址、接口和服务。以控制以上功能无法控制的入方向本地流量:
- 可用于限制管理员访问或其他服务,例如 SSL VPN 服务,定义源地址或地址组来限制访问。例如,通过使用地理位置类型的地址,限制某个特定地理区域的 IP 访问 FortiGate。也可以将“Security Fabric → 外部连接器”中配置的“IP 地址威胁来源”用作源地址或目的地址。
- 可以使用虚拟补丁(Virtual Patch)来减少针对 FortiGate 的已知漏洞的攻击。漏洞规则会在指定接口上对本地入方向流量进行扫描,并丢弃所有匹配攻击特征的流量。关于虚拟补丁(Virtual Patch)的使用方法,请参考虚拟补丁章节。
Local-in Policy 配置
重要
- Local-in Policy 不像普通的防火墙策略,普通防火墙策略默认隐含策略的动作为 deny all,而 Local-in Policy 默认隐含策略的动作为 permit all。
- 在 FortiOS 7.4.6、7.6.1 及以后版本中,如果接口加入了 SD-WAN 区域,Local-in Policy 只能引用接口所属的 SD-WAN 区域,不能引用独立的接口;如果之前的版本已经配置了 Local-in Policy 并引用属于 SD-WAN 区域的某个成员接口,升级到 FortiOS 7.4.6、7.6.1 及以后版本后,需要重新配置 Local-in Policy 才能生效。
config firewall {local-in-policy | local-in-policy6}
edit <policy_number>
set intf <interface>
set srcaddr <source_address> [source_address] ...
set srcaddr-negate {enable | disable} //enable表示排除选择的源地址,默认为disable//
set dstaddr <destination_address> [destination_address] ...
set dstaddr-negate {enable | disable} //enable表示排除选择的目标地址,默认为disable//
set action {accept | deny}
set service <service_name> [service_name] ...
set schedule <schedule_name>
set virtual-patch {enable | disable}
set comments <string>
next
end配置步骤
举例 1
用户在公网口 port1 上开启了 SSL VPN 功能。发现某些异常 IP 地址段经常尝试登录 SSL VPN,但登录失败,并产生 SSL VPN 相关日志。用户想要禁止这些 IP 地址段尝试登录 SSL VPN,不要产生 SSL VPN 登录日志。
配置异常 IP 地址段的地址对象和地址组对象,例如尝试登录的异常源 IP 段为 117.53.1.0/24、27.1.5.0/24 和 113.25.0.0/16,并使用地址组引用。
config firewall address edit "117.53.1.0/24" set subnet 117.53.1.0 255.255.255.0 next edit "27.1.5.0/24" set subnet 27.1.5.0 255.255.255.0 next edit "113.25.0.0/16" set subnet 113.25.0.0 255.255.0.0 next end config firewall addrgrp edit "SSL_VPN_Deny_IP" set member "117.53.1.0/24" "27.1.5.0/24" "113.25.0.0/16" next end配置用户使用的 SSL VPN 端口的服务对象,例如用户配置的 SSL VPN 端口为 10443。
config firewall service custom edit "SSL_VPN_10443" set tcp-portrange 10443 next end配置 Local-in Policy 禁止这些异常 IP 访问 FortiGate 的 SSL VPN 服务。
config firewall local-in-policy edit 1 set intf "port1" set srcaddr "SSL_VPN_Deny_IP" set dstaddr "all" set action deny set service "SSL_VPN_10443" set schedule "always" next end使用 Debug Flow 查看限制网段发起的 SSL VPN 访问,流量被 Local-in Policy(ID 1)阻断,且不再触发 SSL VPN 日志生成。
id=65308 trace_id=12 func=print_pkt_detail line=5888 msg="vd-root:0 received a packet(proto=6, 117.53.1.37:16008->202.103.12.2:10443) tun_id=0.0.0.0 from port1. flag [S], seq 4019479492, ack 0, win 29200" id=65308 trace_id=12 func=init_ip_session_common line=6073 msg="allocate a new session-0000004e" id=65308 trace_id=12 func=__vf_ip_route_input_rcu line=1999 msg="find a route: flag=80000000 gw-0.0.0.0 via root" id=65308 trace_id=12 func=fw_local_in_handler line=618 msg="iprope_in_check() check failed on policy 1, drop"使用 Debug Flow 查看非限制网段的 IP 访问 SSL VPN 服务,可以正常访问 TCP 10443 端口。
id=65308 trace_id=39 func=print_pkt_detail line=5888 msg="vd-root:0 received a packet(proto=6, 202.103.12.1:16204->202.103.12.2:10443) tun_id=0.0.0.0 from port1. flag [S], seq 2461158975, ack 0, win 29200" id=65308 trace_id=39 func=init_ip_session_common line=6073 msg="allocate a new session-0000003d" id=65308 trace_id=39 func=__vf_ip_route_input_rcu line=1999 msg="find a route: flag=80000000 gw-0.0.0.0 via root" id=65308 trace_id=39 func=ip_session_confirm_final line=3111 msg="npu_state=0x0, hook=1" id=65308 trace_id=40 func=print_pkt_detail line=5888 msg="vd-root:0 received a packet(proto=6, 202.103.12.2:10443->202.103.12.1:16204) tun_id=0.0.0.0 from local. flag [S.], seq 1646480095, ack 2461158976, win 28960" id=65308 trace_id=40 func=resolve_ip_tuple_fast line=5976 msg="Find an existing session, id-0000003d, reply direction" ...查看相关 Local-in 会话。
session info: proto=6 proto_state=01 duration=2 expire=3597 timeout=3600 refresh_dir=both flags=00000000 socktype=3 sockport=0 av_idx=0 use=3 origin-shaper= reply-shaper= per_ip_shaper= class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=0/0 state=local may_dirty statistic(bytes/packets/allow_err): org=112/2/1 reply=60/1/1 tuples=2 tx speed(Bps/kbps): 50/0 rx speed(Bps/kbps): 27/0 orgin->sink: org pre->in, reply out->post dev=3->9/9->3 gwy=0.0.0.0/0.0.0.0 hook=pre dir=org act=noop 202.103.12.1:16208->202.103.12.2:10443(0.0.0.0:0) hook=post dir=reply act=noop 202.103.12.2:10443->202.103.12.1:16208(0.0.0.0:0) pos/(before,after) 0/(0,0), 0/(0,0) misc=0 policy_id=4294967295 pol_uuid_idx=0 auth_info=0 chk_client_info=0 vd=0 serial=00000042 tos=ff/ff app_list=0 app=0 url_cat=0 rpdb_link_id=00000000 ngfwid=n/a npu_state=00000000 no_ofld_reason: local
举例 2
用户在公网口 port1 上开启了 SSH 访问功能。发现经常有国外 IP 尝试通过 SSH 登录 FortiGate,但登录失败。用户想要禁止国外的 IP 访问 SSH,但允许国内 IP 访问 SSH。
配置基于地理位置的国内 IP 地址对象。
config firewall address edit "China" set type geography set country "CN" next end配置 Local-in Policy 允许国内 IP 的客户端访问 FortiGate 的 SSH 服务,但不允许其他 IP 访问 FortiGate 的 SSH 服务。
config firewall local-in-policy edit 1 set intf "port1" set srcaddr "China" set dstaddr "all" set action accept set service "SSH" set schedule "always" next edit 2 set intf "port1" set srcaddr "all" set dstaddr "all" set action deny set service "SSH" set schedule "always" next end使用 Debug Flow 查看国内 IP 的 SSH 访问,可以正常访问。
id=65308 trace_id=1 func=print_pkt_detail line=5888 msg="vd-root:0 received a packet(proto=6, 202.103.12.1:18768->202.103.12.2:22) tun_id=0.0.0.0 from port1. flag [S], seq 3436667351, ack 0, win 29200" id=65308 trace_id=1 func=init_ip_session_common line=6073 msg="allocate a new session-0000005a" id=65308 trace_id=1 func=__vf_ip_route_input_rcu line=1999 msg="find a route: flag=80000000 gw-0.0.0.0 via root" id=65308 trace_id=1 func=ip_session_confirm_final line=3111 msg="npu_state=0x0, hook=1" id=65308 trace_id=2 func=print_pkt_detail line=5888 msg="vd-root:0 received a packet(proto=6, 202.103.12.2:22->202.103.12.1:18768) tun_id=0.0.0.0 from local. flag [S.], seq 4214370010, ack 3436667352, win 28960" id=65308 trace_id=2 func=resolve_ip_tuple_fast line=5976 msg="Find an existing session, id-0000005a, reply direction" ...查看相关 Local-in 会话。
session info: proto=6 proto_state=01 duration=9 expire=3590 timeout=3600 refresh_dir=both flags=00000000 socktype=0 sockport=0 av_idx=0 use=3 origin-shaper= reply-shaper= per_ip_shaper= class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=0/0 state=local may_dirty statistic(bytes/packets/allow_err): org=164/3/1 reply=127/2/1 tuples=2 tx speed(Bps/kbps): 17/0 rx speed(Bps/kbps): 13/0 orgin->sink: org pre->in, reply out->post dev=3->9/9->3 gwy=0.0.0.0/0.0.0.0 hook=pre dir=org act=noop 202.103.12.1:18782->202.103.12.2:22(0.0.0.0:0) hook=post dir=reply act=noop 202.103.12.2:22->202.103.12.1:18782(0.0.0.0:0) pos/(before,after) 0/(0,0), 0/(0,0) misc=0 policy_id=1 pol_uuid_idx=15846 auth_info=0 chk_client_info=0 vd=0 serial=00000092 tos=ff/ff app_list=0 app=0 url_cat=0 rpdb_link_id=00000000 ngfwid=n/a npu_state=00000000 no_ofld_reason: local使用 Debug Flow 查看国外 IP 的 SSH 访问,流量被 Local-in Policy(ID 2)阻断。
id=65308 trace_id=1 func=print_pkt_detail line=5888 msg="vd-root:0 received a packet(proto=6, 35.1.2.3:10648->35.1.2.1:22) tun_id=0.0.0.0 from port1. flag [S], seq 891389291, ack 0, win 29200" id=65308 trace_id=1 func=init_ip_session_common line=6073 msg="allocate a new session-0000008c" id=65308 trace_id=1 func=__vf_ip_route_input_rcu line=1999 msg="find a route: flag=80000000 gw-0.0.0.0 via root" id=65308 trace_id=1 func=fw_local_in_handler line=618 msg="iprope_in_check() check failed on policy 2, drop"
举例 3
在 HA 环境下,用户开启并配置了 HA 独立管理口,需要在 HA 独立管理口下配置 Local-in Policy。
查看 FortiGate HA 的独立管理口配置,独立管理口为 internal1。
config system ha config ha-mgmt-interfaces edit 1 set interface "internal1" next end end在 internal1 上配置 Local-in Policy,入接口无法选择 HA 独立管理口 internal1。
FortiGate # config firewall local-in-policy FortiGate (local-in-policy) # edit 1 new entry '1' added FortiGate (1) # set intf ? <string> Please input string value. any Match any interface in the virtual domain. dmz interface fortilink interface internal interface internal4 interface internal5(to_FW2_90D_internal_12_13) interface l2t.root interface naf.root interface ssl.root(SSL VPN interface) interface to_Home_WAN1 interface to_Home_WAN2 interface wan1 interface wan2 interface在 HA 独立管理口上配置 Local-in Policy 时,需要开启
ha-mgmt-intf-only选项,配置为 enable 后,Local-in Policy 可以在 HA 独立管理口上正常下发。config firewall local-in-policy edit 1 set ha-mgmt-intf-only enable set intf "internal1" set srcaddr "Beijing_LAB_88" set dstaddr "all" set service "HTTPS" set schedule "always" next end
TTL Policy
通过配置 TTL Policy,可以阻止具有较高 TTL 的攻击流量。此功能与 Local-in Policy 一样仅用于本地入向流量,不适用于穿越 FortiGate 接口的流量,使用 srcintf 设置本地入向流量命中的接口(不能用于 HA 独立管理口)。
config firewall ttl-policy
edit <id>
set status {enable | disable}
set action {accept | deny}
set srcintf <interface>
set srcaddr <source_address> [source_address] ...
set service <service_name> [service_name] ...
set schedule <schedule_name>
set ttl <value/range>
next
end