This is the manual for GNU Gatekeeper 5.5.
An English manual for your version is in your GnuGk download archive.

Chapters: Contents · Introduction · Installation · Getting started · Basic Config · Routed Mode & Proxy · Routing · RAS Config · Authentication · Accounting · Neighbors · Per Endpoint Config · Advanced Config · Monitoring · Advanced Topics

Download GnuGk    Get support

The GNU Gatekeeper Manual Chapter 8

8. 认证配置

config文件中的以下部分可用于配置身份验证。

8.1 配置开始 [Gatekeeper::Auth]

本部分定义了 GnuGk的身份验证机制/模块。 定义要使用的模块后,必须为每个模块添加相应的配置部分。

写法:

authrule=actions

 <authrule> := SimplePasswordAuth | AliasAuth | FileIPAuth | PrefixAuth | RadAuth | RadAliasAuth | SQLAuth | SQLAliasAuth | SQLPasswordAuth | H350PasswordAuth | LDAPPasswordAuth | LDAPAliasAuth | LuaAuth | LuaPasswordAuth | HttpPasswordAuth | GeoIPAUth | TwoAliasAuth | CapacityControl | ...
 <actions>  := <control>[;<ras>|<q931>,<ras>|<q931>,...]
 <control>  := optional | required | sufficient | alternative
 <ras>      := GRQ | RRQ | URQ | ARQ | BRQ | DRQ | LRQ | IRQ | RAI
 <q931>     := Setup | SetupUnreg | Connect | CallProceeding | Alerting | Information | ReleaseComplete | Facility | Progress | Empty | Status | StatusEnquiry | SetupAck | Notify    

规则可能会导致以下三个代码之一:正常,失败,下一步。

  • ok - 该模块对请求进行了身份验证。
  • fail - 身份验证失败,应被拒绝。
  • next - 规则无法确定请求。
There are also three ways to control a rule:
  • optional - 若规则无法确定或接受请求,则将其传递到下一个规则。否则,处理将停止并且该请求将被拒绝。
  • required - 请求应由此模块验证,否则将被拒绝。经过身份验证的请求将被传递到下一个规则。
  • sufficient - 若请求已通过验证,则该请求被接受,否则将被拒绝。也就是说,规则决定了请求的结果。没有规则应该放在足够的规则之后,因它不会生效。
  • alternative - 与 sufficient 规则类似,不同之处在于,如果模块无法确定结果,则将请求传递给下一个模块。

当前支持的模块:(大多数仅支持RAS或Q.931操作的子集) Currently supported modules: (most only support a subset of the RAS or Q.931 actions)

  • SimplePasswordAuth/SQLPasswordAuth/H350PasswordAuth/LuaPasswordAuth/HttpPasswordAuth

    该模块检查RAS消息的令牌或cryptoTokens字段。令牌应至少包含generalID和密码。对于cryptoToken, 支持由简单MD5哈希的cryptoEPPwdHash令牌和由HMAC-SHA1-96哈希的nestedcryptoToken令牌。 对于由CAT散列的令牌(Cisco访问令牌),支持明文用户名/密码。从 [SimplePasswordAuth]节 或用于SimplePasswordAuthSQLPasswordAuth模块的SQL数据库中读取ID和密码。 使用 LuaPasswordAuth,可使用Lua脚本来查找密码,而 HttpPasswordAuth则可以从HTTP服务器(例如,从REST服务)获取密码。

    对于H.350.2身份验证(H350PasswordAuth), 必须完成 [GkH350::Settings]连接信息。的 [H350PasswordAuth]部分是可选的。

  • AliasAuth/SQLAliasAuth

    该模块只能用于认证RegistrationRequest (RRQ)。具有给定别名的端点的IP应该匹配指定的模式。 对于AliasAuth模式,在 [RasSrv::RRQAuth]部分中定义。对于SQLAliasAuth,从 [SQLAliasAuth]部分中定义的SQL数据库中检索模式。

  • FileIPAuth

    该模块提供了一种基于呼叫者的IP或网络来限制对网守访问的简单方法。

  • PrefixAuth

    具有给定前缀的请求的IP或别名必须与指定的模式匹配。有关详细信息,请参见 [PrefixAuth]部分。 该模块可授权AdmissionRequest (ARQ),LocationRequest (LRQ),Setup和SetupUnreg。

  • RadAuth

    提供基于H.235用户名/密码安全方案的身份验证。通过远程RADIUS服务器对RRQ,ARQ和Q.931 Setup进行身份验证。 它将从RRQ,ARQ或Setup数据包内携带的CAT(思科访问令牌)令牌中提取的用户名和密码发送到RADIUS服务器。 若端点不支持CAT,或者不需要基于单独分配的用户名/密码的身份验证方案,那么该模块将不合适(可以检查该RadAliasAuth模块)。 有关详细信息,请参见 [RadAuth]部分。

  • RadAliasAuth

    提供基于端点别名和/或远程RADIUS服务器的呼叫信令IP地址的身份验证。它在RAS消息中不需要任何H.235令牌, 因此与相比,它可以在更广泛的系统上使用RadAuth。RRQ,ARQ和Q.931 Setup消息可以使用此模块进行身份验证。 有关详细信息,请参见 [RadAliasAuth]部分。

  • SQLAuth

    一个强大的模块,用于认证和授权RRQ,ARQ,LRQ和Setup消息。它可以根据各种参数执行检查,例如呼叫者的号码,目的地号码,用户名等。 它还支持强制呼叫持续时间限制,号码重写,呼叫路由,别名验证和分配。有关更多详细信息,请参见 [SQLAuth]部分。

  • LDAPPasswordAuth

    该模块将在LDAP模式中查找被叫别名,搜索H323ID和TelephoneNumber属性,并检查H235Password属性中的密码是否与H.235加密令牌匹配。

    LDAP服务器在 GkLDAP::Settings部分中配置,且属性匹配在 GkLDAP::LDAPAttributeNames部分中定义。

  • LDAPAliasAuth

    该模块将在LDAP模式中查找被叫别名,搜索H323ID和TelephoneNumber属性,并检查IP是否与IPAddress属性匹配。

    LDAP服务器在 GkLDAP::Settings部分中配置, 并且属性匹配在 GkLDAP::LDAPAttributeNames 部分中定义。

  • LuaAuth

    该模块利用用户定义的LUA脚本执行身份验证。这些脚本在 LuaAuth部分中配置。

  • GeoIPAuth

    该模块通过查看IP来检查消息来自哪个国家。该模块在 GeoIPAuth部分中配置。

  • TwoAliasAuth

    此模块检查端点是否具有2个匹配的别名。这是一个非常弱的身份验证,仅在没有其他可能的情况下才使用。该模块在 TwoAliasAuth部分中配置。

    该模块可以授权RegistrationRequest (RRQ),Setup和SetupUnreg。

  • CapacityControl

    灵活的模块,可以配置各种条件,以控制入站呼叫量。重要说明:它必须与CapacityControl 计费模块一起使用。有关更多详细信息,请参见 [CapacityControl] 部分。

还可以配置规则以仅检查特定的RAS消息。以下示例配置SimplePasswordAuth为检查RRQ和ARQ的可选规则。 若未检查RRQ(不包含令牌或cryptoTokens字段),则通过对其进行检查AliasAuth。默认为检查所有受支持的请求。

例 1:

SimplePasswordAuth=alternative;RRQ,ARQ
AliasAuth=sufficient;RRQ

下面的示例使用RadAliasAuth模块对所有呼叫进行身份验证,并检查信令Setup消息的详细信息。

例 2:

RadAliasAuth=required;Setup
default=allow

本示例通过用户名/密码(RadAuth)或别名/IP(RadAliasAuth)检查端点注册(RRQ)和允许呼叫(ARQ)。 此外,若呼叫来自未注册的端点(因此未执行RRQ或ARQ身份验证),则会使用RadAliasAuth进行Setup消息身份验证(SetupUnreg)。

例 3:

RadAuth=alternative;RRQ,ARQ
RadAliasAuth=alternative;RRQ,ARQ,SetupUnreg
default=reject

8.2 [FileIPAuth]

本节定义了允许访问网守资源的IP地址/网络列表。可以指定允许的前缀列表以及IP地址。 支持的网守::验证事件有:GRQ, RRQ, ARQ, LRQ, Setup and SetupUnreg

单个条目的格式为:

IP=[allow | reject | onlyTLS][;prefix[,prefix...]]

其中IP是单个IP​​地址,网络地址(A.B.C.D/M.M.M.M or A.B.C.D/LENGTH格式或IPv6格式)或字符串'any''*' 与任何地址匹配的地址。 访问列表也可以使用include指令从外部文件加载。在身份验证期间,网络掩码长度定义了每个条目的优先级,因此规则192.168.1.1=allow优先于192.168.1.0/24=reject。

'onlyTLS' 等同于'allow'呼叫是通过 TLS安全连接'reject'传入的,并且意味着未加密的呼叫。

除了端点的IP外,还可指定端点可以呼叫的前缀列表。仅在ARQ和Setup消息上检查目标前缀。

例 #1:

[Gatekeeper::Auth]
FileIPAuth=required;RRQ,ARQ,LRQ,Setup

[FileIPAuth]
192.168.1.240=reject
192.168.1.0/24=allow
192.168.2.0/255.255.255.0=allow;48,49,44
2a01:4f8:61:2243::2=allow
2a01:4f8:61:2243::10/128=allow
2a01:4f8:61:2243::/64=allow
any=reject

例 #2:

将IP规则列表放入另一个文件。

[Gatekeeper::Auth]
FileIPAuth=required;Setup

[FileIPAuth]
include=/etc/gnugk/accesslist.ini

(EOF)

Contents of /etc/gnugk/accesslist.ini:

[FileIPAuth]
192.168.1.1=allow
192.168.1.100=allow
any=reject

例 #3:

允许来自本地网络的所有连接,但要求对其他所有内容进行TLS加密和身份验证。

[Gatekeeper::Auth]
FileIPAuth=required;Setup

[FileIPAuth]
192.168.1.0/24=allow
any=onlyTLS

8.3 [H235]

本部分包含适用于所有使用H.235.1密码的身份验证策略的设置。

使用H.235身份验证时,网守和所有端点配置正确的时间(例如使用NTP)非常重要。 若它们的变化超过定义的宽限期(请参阅下文),则将拒绝有效令牌!

  • UseEndpointIdentifier=0
    默认: 1

    使用端点标识符作为RemoteID。 呼叫Innovaphone r6端点时,必须将其关闭。使用Innovaphone r11可能已打开。

  • RequireGeneralID=1
    默认: 0

    H.235v3规范要求端点在H.235.1令牌内发送GeneralID。一些端点供应商不包括GeneralID,例如,AudioCodes和Innovaphone。

  • FullQ931Checking=1
    默认: 0

    H.235v3规范要求使用H.235.1令牌保护所有Q.931信令消息(Setup, Alerting, Connect等)。 这是好的做法,但并非所有供应商都实施。(AudioCodes和Innovaphone都可以。)

  • CheckSendersID=0
    默认: 1

    检查令牌中的SendersID是否匹配其别名或endpointID。此开关替换[... PasswordAuth]节中的CheckID=switch。

  • VerifyRandomNumber=0
    默认: 1

    禁用检查端点是否针对同一时间戳多次发送相同的随机数。 Innovaphone r6- r11有时会发送带有高位的32位随机数,这些随机数都被H323Plus解码为-1,从而导致检查失败。这可能是PTLib ASN解码器中的错误。

  • TimestampGracePeriod=60
    默认: 7210

    端点和网守之间H.235.1令牌内部时间戳的可接受差异(以秒为单位)。

    默认值为2小时10秒,以适应时钟设置错误且在不同时区的端点。

    建议使用NTP同步所有设备中的时钟,并相应缩短此宽限期。

例 #1

非常宽松的H.235配置,允许在供应商实现中进行多种更改。

[H235]
UseEndpointIdentifier=0
RequireGeneralID=0
FullQ931Checking=0
CheckSendersID=0
VerifyRandomNumber=0
TimestampGracePeriod=7210

例 #2

非常安全的H.235配置,检查ITU定义的所有地方。

[H235]
UseEndpointIdentifier=1
RequireGeneralID=1
FullQ931Checking=1
CheckSendersID=1
VerifyRandomNumber=1
TimestampGracePeriod=60

8.4 [SimplePasswordAuth]

本节定义SimplePasswordAuth模块使用的用户名和密码对。使用该addpasswd程序对所有密码进行加密。

用法:

addpasswd config section userid password

例:

addpasswd config.ini SimplePasswordAuth frank secret

选项:

  • KeyFilled=123
    默认: 0

    在密码加密/解密过程中用作填充字节的默认值。

  • CheckID=1
    默认: 0

    不推荐使用:请使用[H235]部分中的CheckSendersID= switch。

    检查别名是否与令牌中的ID相匹配。某些端点将单独的名称用于其别名和身份验证。若所有端点都将其别名用作令牌中的ID,则可以通过检查安全性来加强安全性。

    此开关适用于所有密码认证的RAS令牌。

  • PasswordTimeout=120
    默认: -1

    该模块SimplePasswordAuth将缓存经过身份认证的密码。 此字段以秒为单位定义高速缓存超时值。 0表示永不缓存密码,而负值表示缓存永不过期。

  • DisableAlgorithm=MD5,H.235.1,CAT
    默认: N/A

    在GRQ/GCF协商中禁用H.235认证算法,否则将使用GnuGk支持的所有算法。 若端点未经协商使用了禁用的算法,则仍将使用该算法。 此开关可用于避免与供应商实现不兼容。

8.5 [SQLPasswordAuth]

使用存储在SQL数据库中的密码对启用H.235的端点进行身份认证。 本节定义要使用的SQL驱动程序,SQL数据库连接参数以及用于检索密码的查询。

使用 公共数据库配置选项来定义此模块的数据库连接。

  • CacheTimeout=120
    默认: 0

    该字段定义将从数据库检索的对(别名;密码)对缓存的时间。缓存超时值以秒为单位。 0表示不缓存密码,而负值表示缓存永不过期(仅reload命令将刷新缓存)。

  • Query=SELECT ...
    默认: N/A

    定义用于从数据库检索H.235密码的SQL查询。查询已参数化-这意为在执行每个查询之前都要进行参数替换。 参数占位符由%1, %2, ...字符串表示。指定%%将百分号字符插入数字到字符串中(如%%1), 指定%{1}以允许在%{1}123之类的复杂表达式内扩展。为SQLPasswordAuth两个参数定义了:

    • %1 - 查询别名的实际密码
    • %2 - GK标识符

    示例查询字符串:

    SELECT h235password FROM users WHERE alias = '%1' AND active
    SELECT h235password FROM users WHERE alias = '%1' AND gk = '%2'
    

8.6 [H350PasswordAuth]

  • PasswordTimeout=120
    默认: -1

    该模块SimplePasswordAuth将缓存经过身份验证的密码。此字段以秒为单位定义高速缓存超时值。 0表示永不缓存密码,而负值表示缓存永不过期。

8.7 [RasSrv::RRQAuth]

指定AliasAuth模块对RRQ接收的操作(确认或拒绝)。在此部分中查找要注册的端点的第一个别名(主要是H323ID)。 若找到参数,则该值将作为规则应用。规则由以"&"分隔的条件组成。在满足所有条件的情况下接受注册。 若端点使用H.460.18,则身份验证规则中的端口将被忽略。

写法:

<authrules> :=  empty  |  <authrule> "&" <authrules>

  <authrule>  := <authtype> ":" <authparams>
  <authtype>  := "sigaddr" | "sigip"
  <autparams> := [!&]*

的符号和含义<authparams>取决于 <authtype>: The notation and meaning of <authparams> depends on <authtype>:

  • sigaddr - 扩展的正则表达式,必须与请求信号地址的``PrintOn(ostream)''表示形式匹配

    例子:

    sigaddr:.*ipAddress .* ip = .* c0 a8 e2 a5 .*port = 1720.*
    

  • sigip - `sigaddr'的特殊形式。写信令IP地址。若省略端口,则假定为1720

    示例:

    sigip:192.168.242.165:1720
    sigip:[2a01:4f8:61:2243::2]:1720
    sigip:2a01:4f8:61:2243::2
    

  • allow - 始终接受别名
  • deny - 始终拒绝别名.

例子:

[RasSrv::RRQAuth]
; The endpoint with alias 'cwhuang' must register from 10.0.1.10:1720
cwhuang=sigip:10.0.1.10:1720
; The endpoint with alias 'gw1' must register from 10.0.1.0/24
gw1=sigaddr:.*ipAddress .* ip = .* 0a 00 01 .*port = 1720.*
; The endpoint with alias 'gw2' must register from [2a01:4f8:61:2243::2]:1720
gw2=sigip:[2a01:4f8:61:2243::2]:1720

8.8 [SQLAliasAuth]

使用存储在SQL数据库中的规则对端点进行身份验证(这些规则符合 [RasSrv::RRQAuth]部分中定义的格式)。 本部分定义了要使用的SQL驱动程序,SQL数据库连接参数以及用于检索模式的查询。

使用 公共数据库配置选项来定义此模块的数据库连接。

  • CacheTimeout=120
    默认: 0

    此字段定义将从数据库检索的对(别名;身份)对缓存的时间。缓存超时值以秒为单位。 0表示不缓存规则,而负值表示缓存永不过期(仅reload命令将刷新缓存)。

  • Query=SELECT ...
    默认: N/A

    定义用于从数据库检索别名规则的SQL查询。查询已参数化-这意味着在执行每个查询之前都要进行参数替换。参数占位符由%1, %2, ...字符串表示。 指定%%将百分号字符插入数字到字符串中(例如%%1),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。 为SQLAliasAuth两个参数定义了:

    • %1 - 规则查询实际别名
    • %2 - GK标识符

    示例查询字符串:

    SELECT authrule FROM users WHERE alias = '%1' AND active
    SELECT 'sigip:' || host(ip) || port FROM users WHERE alias = '%1'
    

8.9 [SQLAuth]

使用SQL数据库对端点/呼叫进行身份验证和授权。提供了对ARQ,LRQ和Setup事件的支持。

使用 公共数据库配置选项来定义此模块的数据库连接。

  • RegQuery=SELECT ...
    默认: N/A

    定义用于执行端点注册的身份验证和授权的SQL查询。查询已参数化-这意味着在执行每个查询之前都要进行参数替换。 定义了以下参数:

    • %g -GK标识符
    • %{gkip} - -已收到请求的GK的IP
    • %u - 与端点关联的用户名(通常是H.323 ID)
    • %{Calling-Station-Id} - 与端点相关的E.164
    • %{callerip} - 呼叫者/注册者的IP(已收到注册请求的地址-NAT端点的NAT IP)
    • %{aliases} - 端点别名的逗号分隔列表
    • %{additive-rrq} -是否为增加rrq (0 = false, 1 = true)

    若查询不返回任何行,则结果是不确定的,这基本上意味着required规则失败,而可选规则则“尝试下一个”。 否则,将检查第一个结果行以确定身份验证请求的结果并获取其他信息:

    1. 第一列转换为布尔值(1,T,TRUE,allow,y,yes为true),并且是认证结果(接受/拒绝)。
    2. 若注册成功通过身份认证,则会检查其余的列:
      1. 若存在名为的列'aliases',请用这些新别名替换原始端点别名
      2. 若存在名为的列'billingmode',请设置与端点关联的计费方式(0 - 租赁方, <>0 - 借方)
      3. 若存在名为的列'creditamount',请设置与端点关联的帐户余额(任意字符串)

    查询字符串示例:

    SELECT 1, 0 AS billingmode, '12.00 USD' AS creditamount
    SELECT NOT disabled, assignaliases AS aliases, balance FROM users WHERE h323id = '%u'
    SELECT * FROM get_registration_auth('%g', '%u', '%{callerip}', '%{aliases}') AS result(accept, aliases, billingmode, creditamount)
    

  • NbQuery=SELECT ...
    默认: N/A

    定义用于对邻域发送的位置请求执行身份验证和授权的SQL查询。 查询已参数化-这意味着在执行每个查询之前都要进行参数替换。定义了以下参数:

    • %g - GK标识符
    • %{gkip} - 已收到请求GK的IP
    • %{nbid - 来自配置的邻域标识符
    • %{nbip} - 邻域IP(收到请求的地方)
    • %{Calling-Station-Id} - 来电号码(若有)
    • %{src-info} - sourceInfo LRQ字段的内容(若有)
    • %{Called-Station-Id} - 目的地号码
    • %{dest-info} - destinationInfo LRQ字段的内容
    • %{bandwidth} - 请求的带宽(若存在于LRQ中)

    若查询不返回任何行,则结果是不确定的,这基本上意味着required规则失败,而可选规则则“尝试下一个”。 否则,将检查第一个结果行以确定身份验证结果并获取其他信息:

    1. 第一列转换为布尔值(1, T, TRUE, allow, y, yes 为 true),并且是认证结果(接受/拒绝)。
    2. 若请求通过身份验证成功,则会检查其余的列:
      1. 若存在名为的列'destination', 请使用这些新别名填充原始的destinationInfo字段-这可能会影响在auth步骤之后做出的路由决策。

    查询字符串示例:

    SELECT active FROM neighbors WHERE name = '%{nbid}' AND ip = '%{nbip}' UNION SELECT 0
    

  • CallQuery=SELECT ...
    默认: N/A

    定义用于执行呼叫(ARQ 和 Setup)的身份验证和授权的SQL查询。查询已参数化-这意味着在执行每个查询之前都要进行参数替换。 定义了以下参数:

    • %g - GK的标识符
    • %{gkip} -已收到请求GK的IP
    • %u - 与呼叫者相关的用户名
    • %{callerip} - -呼叫者的IP(已收到请求的地址-NAT端点的NAT IP)
    • %{Calling-Station-Id} - 来电号码(若有)
    • %{Called-Station-Id} - 目的地号码
    • %{Dialed-Number} - -原始目的地号码(重写之前)
    • %{CallId} - H.323呼叫标识符(16个十六进制8位数字)
    • %{SrcInfo} - Setup中的ARQ或sourceAddress的srcInfo字段
    • %{Vendor} - productId 和 versionId
    • %{bandwidth} - 请求的带宽(若存在于ARQ中)
    • %{answer} - 1, 若请求是应答ARQ
    • %{arq} - 1, 代表ARQ触发查询,0代表Setup触发查询
    • %{from-registered} - 来自注册端点的1个呼叫,其他呼叫0个
    • %{from-neighbor} - 来自邻域网守的1个呼叫,其他呼叫0个

    若查询不返回任何行,则结果是不确定的,这基本上意味着required 规则失败,而可选规则则“尝试下一个”。 否则,将检查第一个结果行以确定身份验证结果并获取其他信息:

    1. 第一列转换为布尔值(1, T, TRUE, allow, y, yes 为 true)并且是认证结果(接受/拒绝呼叫)。
    2. 若请求通过身份验证成功,则会检查其余的列:
      1. 若存在的列名为 'billingmode', 请设置与端点关联的计费方式(0 - 租赁方, <>0 - 借方)
      2. 若存在的列名为 'creditamount', 请设置与端点关联的帐户余额(这是一个任意字符串)
      3. 若存在的列名为 'credittime', 请使用其整数值设置通话时间限制
      4. 若存在的列名为 'redirectnumber', 请用该列替换原始目的地号码。 可输入多个数字(对应于多个'redirectip'条目),以分号分隔。 还可通过在改写的号码后附加'='来指定出站号码(发送到端点网关)(like 485811001001=1234485811001001)
      5. 若存在的列名为 'redirectip', 则将呼叫强制发送到指定的IP(若激活了故障转移,则可以将多个目标之间用分号分隔,将用于故障转移)。
      6. 若存在的列名为 'proxy', 则强制网守为该呼叫启用/禁用(取决于'proxy'列的值)RTP代理
      7. 若存在的列名为 'clientauthid', 则网守会将这个ID存储在其呼叫记录中,并在所有记录事件中将其发送回去。这必须是一个最大为64位的无符号整数(如,MySQL中的'bigint unsigned')。
    3. 若请求被拒绝,则检查其余的列:
      1. 若存在的列名为 'q931cause', 请在“释放完成”中将Q.931原因设置为此值。
      2. 若存在的列名为 'clientauthid', 则网守会将这个ID存储在其呼叫记录中,并在所有记录事件中将其发送回去。这必须是一个最大为64位的无符号整数(如,MySQL中的'bigint unsigned')。

    查询字符串示例:

    SELECT 1, 360 AS credittime, 0 AS proxy
    SELECT * FROM auth_call('%g', '%u', '%{Calling-Station-Id}', '%{callerip}', '%{Called-Station-Id}') AS result(accept, credittime)
    SELECT 1, '1234' AS redirectnumber, '192.168.1.1' AS redirectip
    

8.10 [PrefixAuth]

本部分定义PrefixAuth模块的身份验证规则。可使用此模块授权ARQ,LRQ和Setup。

首先,依据接收到的请求的 destinationInfo字段选择最特定的前缀。然后,根据具有最特定网络掩码的匹配规则,接受或拒绝请求。 若找不到匹配的前缀,并且default指定了选项,则根据该请求接受或拒绝请求。否则,将根据模块要求将其拒绝或传递给下一个身份验证模块。

Format:

prefix=authrule[|authrule|...]

写法:

<authrule> :=  <result> <authrule>

  <result>    := deny | allow
  <authrule>  := [!]ip:<iprule> | [!]ipv4:<iprule> | [!]ipv6:<iprule> | [!]alias:<aliasrule>

<iprule>可以在指定的十进制点符号或CIDR表示或IPv6符号,<aliasrule> 在正则表达式来表示。若`!'标志位于规则之前,则含义相反。 与IP号码规则ip:, ipv4:, ipv6:所有的行为相同。 不同的前缀仅用于文档说明以及与旧版本GnuGk的兼容性。

例子:

555=deny ipv4:10.0.0.0/27|allow ipv4:0/0
5555=allow ipv4:192.168.1.1|deny ipv4:192.168.1.0/255.255.255.0
86=deny !ipv4:172.16.0.0/24
09=deny alias:^188884.*
99=deny ipv6:2021:4ad0:ff00:99a::/64
ALL=allow ipv4:0/0|allow ipv6:::/0

在此配置中,除了来网络10.0.0.0/27端点外,所有端点都可以呼叫前缀555(5555除外)。 192.168.1.0/24中的端点不允许呼叫前缀5555,除了192.168.1.1。 不允许来自网络的端点呼叫前缀86,除了192.168.1.0/24以外,不允许以别名别名188884开头的端点呼叫前缀09。 不允许将2021:4ad0:ff00:99a::/64的IPv6端点呼叫前缀99。所有其他情况被允许。

8.11 [RadAuth]

本部分定义了基于RRQ,ARQ RAS请求和Q.931 Setup消息中存在的H.235 CAT(Cisco访问令牌)来启用RADIUS身份认证的配置。

  • Servers=SERVER1[:AUTH_PORT[:ACCT_PORT[:SECRET]]];SERVER2[:AUTH_PORT[:ACCT_PORT[:SECRET]]];...
    默认: N/A

    用于身份认证的RADIUS服务器。该列表可以包含任意数量的服务器。服务器的顺序很重要,因为RADIUS模块将按给定顺序查询服务器。 若未提供端口信息,DefaultAuthPort将使用端口号from。 若未设置密码,SharedSecret 则采用默认的共享密钥。服务器名称可以是IP地址或DNS名称。IPv6地址必须始终写在方括号中。

    Sample Servers lines:

    Servers=192.168.1.1
    Servers=192.168.1.1:1645
    Servers=192.168.1.1:1645:1646:secret1
    Servers=radius1.mycompany.com:1812
    Servers=radius1.mycompany.com;radius2.mycompany.com
    Servers=radius1.mycompany.com:1812:1813:secret1;radius2.mycompany.com:1812:1813:secret2
    Servers=[2501:4f3:61:2143::2]
    Servers=[2501:4f3:61:2143::2]:1645
    Servers=[2501:4f3:61:2143::2]:1645:1646
    Servers=[2501:4f3:61:2143::2]:1645:1646:secret1
    Servers=[2501:4f3:61:2143::2]:1645:1646:secret1;[2501:4f3:61:2143::3]:1645:1646:secret2

  • LocalInterface=IP_OR_FQDN
    默认: N/A

    GnuGk应该用来与RADIUS服务器通信的特定本地网络接口。此参数在NAT机器上很有用,以限制将某些网络接口用于RADIUS通信。 默认情况下,此值为空,并允许RADIUS请求在任何(最合适的)网络接口上发送。若不确定,最好不要设置此选项。

  • RadiusPortRange=10000-11000
    默认: N/A

    默认情况下,GnuGk根据操作系统的指定动态分配端口。若要限制应使用的端口,请配置此参数。

  • DefaultAuthPort=PORT_NO
    默认: 1812

    用于RADIUS身份验证请求(访问请求数据包)的默认端口号。可以被Servers属性覆盖。

  • SharedSecret=SECRET
    默认: N/A (empty string)

    用于将此GnuGk(NAS客户端)认证到RADIUS服务器的密钥。它应该是加密强度很高的密码。 若未在Servers配置选项中设置特定于服务器的机密,则使用此默认值。 若EncryptAllPasswords已启用,或者KeyFilled在本节中定义了变量,则密码采用加密形式,应使用addpasswd实用程序创建。

  • RequestTimeout=TIMEOUT_MS
    默认: 2000 (milliseconds)

    RADIUS服务器响应GnuGk发送的请求的超时(毫秒)。若在此时间段内未收到响应,则查询下一个RADIUS服务器。

  • IdCacheTimeout=TIMEOUT_MS
    默认: 9000 (milliseconds)

    RADIUS请求8位标识符的超时(毫秒)是唯一的。若整个8位标识符范围在此期间内都用尽,则RADIUS模块将分配一个新的客户端套接字(UDP套接字)。 以下这个例子为例:我们大约有60个RRQ/sec- 4秒的8位标识符范围已用尽-分配了新的套接字-在接下来的4秒后,第二个8位标识符范围已用尽-分配了第三个套接字-在池1中的第9个第二个标识符再次可用之后。

    通常,若超时时间太长,则会消耗太多资源。若超时时间太短,则RADIUS服务器可能会将传入的数据包当作重复数据包,因此将其丢弃。

  • SocketDeleteTimeout=TIMEOUT_MS
    默认: 60000 (milliseconds) - 60 s

    关闭未使用的RADIUS套接字的超时。 它与IdCacheTimeout-在网守负载较重时创建的,用于服务传入请求的其他套接字在空闲期间关闭使用。

  • RequestRetransmissions=NUMBER
    默认: 2

    单个RADIUS请求发送到每个已配置的RADIUS服务器的次数(若未收到响应)。1表示一次传输尝试,没有重传,2表示单次重传,...。实际的重传方法由RoundRobinServers属性定义。

  • RoundRobinServers=BOOLEAN
    默认: 1

    RADIUS请求重传方法。

    若设置为1,则以以下方式发送RADIUS请求(直到收到响应)

    Server #1 Attempt #1, Server #2 Attempt #1, ..., Server #N Attempt #1
    ...
    Server #1 Attempt #RequestRetransmissions, ..., Server #1 Attempt #RequestRetransmissions
    

    若设置为0,则保留以下顺序:

    Server #1 Attempt #1, ..., Server #1 Attempt #RequestRetransmissions
    ...
    Server #N Attempt #1, ..., Server #N Attempt #RequestRetransmissions
    

  • AppendCiscoAttributes=BOOLEAN
    默认: 0

    若设置,则在RADIUS请求中包括Cisco Vendor Specific RADIUS属性 (h323-conf-id,h323-call-origin,h323-call-type)。

  • IncludeTerminalAliases=BOOLEAN
    默认: 1

    若设置,则将发送Cisco VSA'h323-ivr-out'属性以及端点正在注册的别名列表(RRQ.m_terminalAlias)。 提供此属性是为了对允许端点注册的别名列表提供更好的控制。 该属性的格式为:

            Cisco-AV-Pair = "h323-ivr-out=terminal-alias:" alias [,alias] [;]
    例子:
            Cisco-AV-Pair = "h323-ivr-out=terminal-alias:helpdesk,support,77771;"
    

  • UseDialedNumber=BOOLEAN
    默认: 0

    在原始号码(由用户拨打)UseDialedNumber=1和改写的号码之一之间选择被叫站ID号类型UseDialedNumber=0

[RadAuth] Access-Request Radius Attributes

对于RRQs, Access-Request数据包中包括以下RADIUS属性:

  • User-Name

    H225_RegistrationRequest.tokens[CAT].m_generalID

  • CHAP-Password

    H225_RegistrationRequest.tokens[CAT].m_random + H225_RegistrationRequest.tokens[CAT].m_challenge

  • CHAP-Challenge

    H225_RegistrationRequest.tokens[CAT].m_timeStamp

  • NAS-IP-Address

    GnuGk Home或通过'LocalInterface'配置参数设置的特定本地网络接口

  • NAS-Identifier

    GnuGk名称

  • NAS-Port-Type

    虚拟的(GnuGk没有物理端口的概念)

  • Framed-IP-Address

    注册端点信令通道的IP地址

  • Service-Type

    登录用户

  • (optional) VSA: VendorId=Cisco, Cisco-AVPair, h323-ivr-out

    端点注册时使用的别名列表(仅当设置了IncludeTerminalAliases配置选项时)

    注意:h323-ivr-out内部的别名列表采用以下格式:
    h323-ivr-out="h323-ivr-out=terminal-alias:alias1,alias2,...,aliasN;"
    h323-ivr-out属性可以(将来)在单个Access-Request中多次实例化,并且还可能包含“terminal-alias”,因此RADIUS服务器在处理此属性时应该足够灵活。

对于ARQ和Setup消息,Access-Request数据包中包含以下RADIUS属性:

  • User-Name

    ARQ.tokens[CAT].m_generalID

  • CHAP-Password

    ARQ.tokens[CAT].m_random + ARQ.tokens[CAT].m_challenge

  • CHAP-Challenge

    ARQ.tokens[CAT].m_timeStamp

  • NAS-IP-Address

    GnuGk Home或通过'LocalInterface'配置参数设置的特定本地网络接口

  • NAS-Identifier

    GnuGk名称

  • NAS-Port-Type

    虚拟的(GnuGk没有物理端口的概念)

  • Framed-IP-Address

    注册端点信令通道的IP地址

  • Service-Type

    登录用户(用于来自始发端点的ARQ)或呼叫检查(用于应答端点的ARQ)

  • Calling-Station-Id

    主叫方号码(若有)

  • Called-Station-Id

    被叫方号码

  • (optional) VSA: VendorId=Cisco, h323-conf-id

    来自ARQ的H.323会议ID

  • (optional) VSA: VendorId=Cisco, h323-call-type

    呼叫类型(固定值:"h323-call-type=VoIP")

  • (optional) VSA: VendorId=Cisco, h323-call-origin

    呼叫来源("answer","originate")

  • (optional) VSA: VendorId=Cisco, h323-gw-id

    与NAS-Identifier相同

[RadAuth] Access-Accept Radius Attributes

对于RRQs,在Access-Accept数据包中识别以下RADIUS属性:

  • VSA: VendorId=Cisco, h323-return-code

    如果存在但不为0,则拒绝该请求。提供此检查是为了允许与某些计费系统不兼容,该系统会发送带有非零h323返回码的Access-Accept来拒绝呼叫,而不是Access-Reject。 该属性可以采用h323-return-code =“1”或h323-return-code =“h323-return-code = 1”的形式。请注意,返回码是字符串,而不是整数。

  • VSA: VendorId=Cisco, h323-billing-model

    此帐户的结算方式。可以是0(贷方),1或2(借方)。若端点可以理解H.225.0 CallCreditServiceControl消息,则此信息用于构建消息。

  • VSA: VendorId=Cisco, h323-credit-amount

    代表当前用户帐户余额的字符串。若端点可以理解H.225.0 CallCreditServiceControl消息,则此信息用于构建消息。

  • VSA: VendorId=Cisco, Cisco-AVPair, h323-ivr-in

    若存在,将扫描'terminal-alias'变量,该变量可以包含应分配给正在注册的端点的别名列表。与该列表不匹配的所有RRQ别名都将被删除。 还支持'disable-codec'变量,以禁止此呼叫使用某些编解码器。'proxy'变量可以包含'yes' 或 'no',以启用/禁用此呼叫的代理模式。这些属性的格式为:

    Cisco-AVPair = "h323-ivr-in=variable:value;[variable:value;]"

    其中“变量”可以是“端点别名”:

    Cisco-AVPair = "h323-ivr-in=terminal-alias:alias1[,alias2,...];"

    例 1:

    RRQ {
            m_terminalAlias = { "myalias", "1234" }
    }
    
    if RADIUS server returns the following h323-ivr-in:
    
    Access-Accept {
            Cisco-AVPair = "h323-ivr-in=terminal-alias:anotheralias,6789;"
    }
    
    the endpoint will get registered with aliases "anotheralias" and "6789".
    Also RCF will contain:
    
    RCF {
            m_terminalAlias = { "anotheralias", "6789" }
    }
    

    例 2 (将E164添加到现有别名):

    RRQ {
            m_terminalAlias = { "it_s_me" }
    }
    
    if RADIUS server returns the following h323-ivr-in:
    
    Access-Accept {
            Cisco-AVPair = "h323-ivr-in=terminal-alias:it_s_me,48586259732;"
    }
    
    RCF will contain:
    
    RCF {
            m_terminalAlias = { "it_s_me", "48586259732" }
    }
    

    例 3 (禁用G.711和G.729编解码器):

    Access-Accept {
            Cisco-AVPair = "h323-ivr-in=codec-disable:g711Ulaw64k;g729;g711Alaw64k;g729AnnexA;"
    }
    

    例 4 (启用代理模式):

    Access-Accept {
            Cisco-AVPair = "h323-ivr-in=proxy:yes"
    }
    

对于ARQ,在Access-Accept数据包中识别以下RADIUS属性:

  • VSA: VendorId=Cisco, h323-return-code

    若存在但不为0,则拒绝该请求。提供此检查是为了允许与某些计费系统不兼容,该系统会发送带有非零h323返回码的Access-Accept来拒绝呼叫,而不是Access-Reject。 该属性可以采用h323-return-code="1" 或 h323-return-code="h323-return-code=1"的形式。请注意,返回码是字符串,而不是整数。

  • VSA: VendorId=Cisco, h323-billing-model

    此帐户的结算方式。可以是0(租赁方),1或2(借方)。若端点可以理解H.225.0 CallCreditServiceControl消息,则此信息用于构建消息。

  • VSA: VendorId=Cisco, h323-credit-amount

    代表当前用户帐户余额的字符串。若端点可以理解H.225.0 CallCreditServiceControl消息,则此信息用于构建消息。

  • VSA: VendorId=Cisco, h323-credit-time

    若存在,它将强制执行最长呼叫持续时间(以秒为单位)。该属性可以采用h323-credit-time="120" 或 h323-credit-time="h323-credit-time=120"的形式。 请注意,返回码是字符串,而不是整数。

  • Session-Timeout

    若存在,它将强制执行最长呼叫持续时间(以秒为单位)。这是整数类型的标准RADIUS属性。

  • VSA: VendorId=Cisco, h323-redirect-ip-address

    若存在,则将呼叫发送到此属性中存在的IP地址。可以将多个目的地用分号隔开。

  • VSA: VendorId=Cisco, h323-redirect-number

    若存在,则将被叫电台ID改写为该号码。可以将多个数字用分号隔开。 对于每个号码,还可以通过在其后面附加一个'='来指定出站号码(发送到端点网关)。

注意:若同时存在Session-Timeout 和 h323-credit-time,则使用较小的值。

注意:若指定了多种故障转移机制,如在H323重定向数倍数and在H323重定向IP地址的多个IP地址,也不能保证第一个数字被用于第一IP和第二IP的第2个数字。 通常是这种情况,但是例如,当容量限制禁用一个IP时,关联将改变。

8.12 [RadAliasAuth]

本节定义配置设置,这些配置设置可基于RRQ RAS,ARQ RAS 或 Q.931 Setup请求中存在的端点别名和/或IP地址来启用RADIUS身份验证。 此身份验证方案对于在网守注册的端点(ARQ, RRQ)和从未注册的端点进行的呼叫(Setup)都非常有用。

  • Servers=SERVER1[:AUTH_PORT[:ACCT_PORT[:SECRET]]];SERVER2[:AUTH_PORT[:ACCT_PORT[:SECRET]]];...
    默认: N/A

    用于RAS的RADIUS服务器请求身份验证。该列表可以包含任意数量的服务器。服务器的顺序很重要,因为RADIUS模块将按给定顺序查询服务器。 若未指定端口信息,DefaultAuthPort 将使用端口号from。若未设置密码,SharedSecret 则使用默认的共享密钥。服务器可以是IP地址或DNS名称。

    例子:

    Servers=192.168.3.1:1645;192.168.3.2:1812:1813:mysecret;radius.mycompany.com

  • LocalInterface=IP_OR_FQDN
    默认: N/A

    GnuGk应该用来与RADIUS服务器通信的特定本地网络接口。此参数在NAT机器上很有用,以限制用于RADIUS通信的网络接口的数量。 默认情况下,此值为空,并允许RADIUS请求在任何(最合适的)网络接口上发送。若不确定自己在做什么,最好不要设置此选项。

  • RadiusPortRange=10000-11000
    默认: N/A

    缺省情况下(若未设置此选项),RADIUS客户端根据操作系统的指定动态分配端口。若要限制RADIUS客户端仅使用特定范围内的端口,请设置此参数。

  • DefaultAuthPort=PORT_NO
    默认: 1812

    若未被Servers属性覆盖,则用于RADIUS身份验证请求(访问请求数据包)的默认端口号。

  • SharedSecret=SECRET
    默认: N/A (empty string)

    用于将此GnuGk(NAS客户端)认证到RADIUS服务器的密钥。它应该是加密强度很高的密码。若未在中设置服务器特定的机密,则这是使用的默认值Servers。 若EncryptAllPasswords已启用,或者KeyFilled在本节中定义了变量,则密码采用加密形式,应使用addpasswd实用程序创建。

  • RequestTimeout=TIMEOUT_MS
    默认: 2000 (milliseconds)

    RADIUS服务器响应GnuGk发送的请求的超时(毫秒)。若在此时间段内未收到响应,则查询下一个RADIUS服务器。

  • IdCacheTimeout=TIMEOUT_MS
    默认: 9000 (milliseconds)

    RADIUS请求8位标识符的超时(毫秒)是唯一的。若在此期间内所有8位标识符范围均已用尽,则RADIUS模块将分配新的客户端套接字(UDP套接字)。 以下例:我们大约有60个RRQ/sec- 4秒8位标识符范围已用尽-分配了新的套接字-接下来的4秒后, 第二个8位标识符范围已用尽-分配了第三个套接字-在池1中的第9个标识符再次可用之后......。通常, 超时时间太长-消耗过多的资源,超时时间太短-RADIUS服务器可能会将传入的数据包视为重复的数据包,因此将其丢弃。

  • SocketDeleteTimeout=TIMEOUT_MS
    默认: 60000 (milliseconds) - 60 s

    关闭未使用的RADIUS套接字的超时。它与IdCacheTimeout - 在网守负载较重时创建的用于服务传入请求的其他套接字在空闲期间关闭一起使用。

  • RequestRetransmissions=NUMBER
    默认: 2

    单个RADIUS请求发送到每个已配置的RADIUS服务器的次数(若未收到响应)。1表示无重传,2表示单重传,...实际的重传方法由RoundRobinServers属性定义。

  • RoundRobinServers=BOOLEAN
    默认: 1

    RADIUS请求重传方法。

    若设置为1,则以以下方式发送RADIUS请求(直到收到响应):

    Server #1 Attempt #1, Server #2 Attempt #1, ..., Server #N Attempt #1
    ...
    Server #1 Attempt #RequestRetransmissions, ..., Server #1 Attempt #RequestRetransmissions
    

    若设置为0,则保留以下顺序:

    Server #1 Attempt #1, ..., Server #1 Attempt #RequestRetransmissions
    ...
    Server #N Attempt #1, ..., Server #N Attempt #RequestRetransmissions
    

  • AppendCiscoAttributes=BOOLEAN
    默认: 1

    若设置,则在RADIUS请求中包括Cisco Vendor Specific RADIUS属性(h323-conf-id,h323-call-origin,h323-call-type)。

  • IncludeTerminalAliases=BOOLEAN
    默认: 1

    若设置,则将发送Cisco VSA'h323-ivr-out'属性以及端点正在注册的别名列表(RRQ.m_terminalAlias)。 提供此属性是为了对允许端点注册的别名列表提供更好的控制。 该属性的格式为:

            Cisco-AV-Pair = "h323-ivr-out=terminal-alias:" alias [,alias] [;]
    例子:
            Cisco-AV-Pair = "h323-ivr-out=terminal-alias:helpdesk,support,77771;"
    

  • EmptyUsername
    默认: N/A

    若设置了此参数,则在呼叫未提供身份验证用户名的情况下使用该值。

  • FixedUsername
    默认: N/A

    若设置了此参数,它将覆盖传出RADIUS请求的“用户名RADIUS”属性值。这意味着每个访问请求都将按照user进行身份验证FixedUsername

  • FixedPassword
    默认: N/A

    若未设置,则用户密码是用户名的副本。例如,若User-Name为'john',则User-Password也将设置为'john'。 设置此参数将覆盖此行为,并且User-Password属性将始终设置为的值FixedPassword。 若EncryptAllPasswords已启用,或者KeyFilled在本节中定义了变量,则密码采用加密形式,应使用addpasswd实用程序创建。

    例 1:

    (Neither FixedUsername nor FixedPassword set)
    
    所有端点将使用其别名作为用户名和密码进行身份验证。就如,端点'EP1'将使用用户名'EP1'和密码'EP1'进行身份验证。

    例 2:

    (FixedUsername not set)
    FixedPassword=ppp
    
    所有端点将使用其别名和密码'ppp'进行身份验证。

    例 3:

    FixedUsername=ppp
    FixedPassword=ppp
    
    将使用用户名'ppp'和密码'ppp'对所有端点进行身份验证。

  • UseDialedNumber=BOOLEAN
    默认: 0

    在原始号码(由用户拨打)UseDialedNumber=1和改写的号码之一之间选择被叫站ID号类型UseDialedNumber=0

[RadAliasAuth] Access-Request Radius Attributes

对于RRQ,将发送与RadAuth相同的属性,但用户名/密码属性(CHAP-密码,CHAP-挑战,用户名)除外:

  • User-Name

    RRQ的端点别名或FixedUsername配置参数的值。若不存在别名,则使用IP地址

  • User-Password

    与用户名相同或FixedPassword配置参数的值

对于ARQ和Setup消息,将发送与RadAuth相同的属性,但用户名/密码属性(CHAP-Password, CHAP-Challenge, User-Name)除外

  • User-Name

    端点别名或FixedUsername配置参数的值

  • User-Password

    与用户名相同或FixedPassword配置参数的值

[RadAliasAuth] Access-Accept Radius Attributes

可以识别与RadAuth模块完全相同的属性。

8.13 [CapacityControl]

本节包含一组规则,用于根据各种条件控制入站呼叫量。为了使该模块正常工作,必须启用CapacityControl身份验证和计费模块,如下所示:

[Gatekeeper::Auth]
CapacityControl=required;Setup
 
[Gatekeeper::Acct]
CapacityControl=required;start,stop

容量规则可以与呼叫者的IP,呼叫者的H.323 ID和/或呼叫者的号码(CLI)匹配-按指定的顺序。 另外,可以通过指定被叫号码模式来缩小匹配范围。 该模块通过保存每个入站路由(规则)的当前呼叫量列表来工作-通过将CapacityControl计费模块配置为从匹配的路由添加/删除活动的呼叫来完成。 该CapacityControl认证模块检查规则和接受/拒绝基于电流/最大呼叫量用于匹配接收的路由的呼叫。

入站路由规则的格式:

[ip:CALLER_IP|h323id:CALLER_H323ID|cli:CALLER_NUMBER]=[CALLED NUMBER REGEX PATTERN] MAX_CAPACITY

ip:, h323id: and cli:前缀定义规则类型。入站呼叫将通过呼叫者的IP,H.323ID或CLI进行匹配。 可选的CALLED NUMBER REGEX PATTERN 是一个正则表达式,被叫号码应匹配以应用此规则。MAX_CAPACITY是此路由的最大活动呼叫数。

规则按以下顺序匹配::

  • IP规则
  • H.323ID规则
  • CLI规则

使用第一个匹配类别中最长的匹配。

例 1:

[CapacityControl]
ip:192.168.1.0/24=30
ip:any=120

这些规则表明,192.168.1.0/24子网最多可以发送30个并发呼叫,而所有其他IP最多可以发送120个并发呼叫。

例 2:

[CapacityControl]
%r1% cli:1001=30
%r2% cli:1001=^48(50|51) 5

这些规则限制了使用CLI 1001的呼叫者最多可以将5个呼叫发送到4850/4851目的地,将最多30个呼叫发送到其他目的地。 %r1% 和 %r2% 是特殊的构造,以允许cli:1001多次拥有相同的配置密钥。

8.14 [GkH350::Settings]

本节定义了LDAP服务器和要使用的标准H.350目录操作参数。

  • ServerName=127.0.0.1
    默认: 127.0.0.1

    LDAP服务器IP地址。

  • ServerPort=389
    默认: 389

    LDAP服务器的TCP端口(通常为389)。

  • StartTLS=1
    默认: 0

    使用StartTLS加密LDAP连接。

  • SearchBaseDN=ou=commObjects,dc=gnugk,dc=org
    默认: N/A

    服务器的H.350目录结构的入口点。仅在此根节点下进行搜索。

  • BindUserDN=cn=admin,dc=gnugk,dc=org
    默认: N/A

    网守用来绑定到LDAP服务器的专有名称。若要匿名访问LDAP服务器,请保留为空。

  • BindUserPW=secret
    默认: N/A

    若指定BindUserDN,则在此处指定用于绑定的相应密码。若EncryptAllPasswords已启用,或者KeyFilled在本节中定义了变量, 则密码采用加密形式,应使用addpasswd实用程序创建。

  • BindAuthMode=simple
    默认: simple

    绑定身份验证方法的选择是simple,sasl,kerberos

  • ServiceControl=1
    默认: 0

    使用RRQ/RCF服务控制字段来建议H.350目录的端点和searchDN用于白页查找。

  • AssignedAliases=1
    默认: 0

    使用H.350.1通知端点其分配的别名。

  • GatekeeperDiscovery=1
    默认: 0

    使用H.350.1在GRQ/GCF上解析分配给网守的注册端点(h323IdentityGKDomain)。

8.15 [GkLDAP::Settings]

本部分定义了LDAP身份验证模块(LDAPAliasAuth和LDAPPasswordAuth)和LDAP路由策略('ldap')的LDAP服务器和连接参数。

  • ServerName=127.0.0.1
    默认: 127.0.0.1

    LDAP服务器IP地址。

  • ServerPort=389
    默认: 389

    LDAP服务器的TCP端口(通常为389)。

  • StartTLS=1
    默认: 0

    使用StartTLS加密LDAP连接。

  • SearchBaseDN=ou=commObjects,dc=gnugk,dc=org
    默认: N/A

    服务器目录结构的入口点。仅在此根节点下进行搜索。

  • BindUserDN=cn=admin,dc=gnugk,dc=org
    默认: N/A

    网守用来绑定到LDAP服务器的专有名称。若要匿名访问LDAP服务器,请保留为空。

  • BindUserPW=secret
    默认: N/A

    若指定BindUserDN,则在此处指定用于绑定的相应密码。若EncryptAllPasswords已启用,或者KeyFilled在本节中定义了变量, 则密码采用加密形式,应使用addpasswd实用程序创建。

  • BindAuthMode=simple
    默认: simple

    绑定身份验证方法的选择是simple,sasl,kerberos

例子:

[GkLDAP::Settings]
ServerName=192.168.1.1
BindAuthMode=simple
SearchBaseDN=dc=gnugk,dc=org
BindUserDN=cn=admin,dc=gnugk,dc=org
BindUserPW=secret

8.16 [GkLDAP::LDAPAttributes]

通过此部分,可以将LDAP属性GnuGk查询映射到对应的LDAP模式。

  • CallDestination=H323IP
    默认: voIPIpAddress

    LDAP实体的呼叫应路由到的IP。

  • H323ID=mail
    默认: mail

    LDAP实体的H.323别名。此属性用于在LDAP模式中查找被叫实体。

  • H235PassWord=secret
    默认: none

    在LDAPPasswordAuth中使用的密码属性。

  • IPAddress=voIPIpAddress
    默认: voIPIpAddress

    LDAP实体的H.323 IP。此属性用于在LDAP模式中查找被叫实体。

  • TelephoneNo=telephoneNumber
    默认: telephoneNumber

    LDAP实体的电话号码。此属性用于在LDAP模式中查找被叫实体。

例子:

[GkLDAP::LDAPAttributeNames]
IPAddress=voIPIpAddress
H235PassWord=plaintextPassword
H323ID=sn
TelephonNo=telephoneNumber
CallDestination=roomNumber

8.17 [LuaAuth]

本部分配置用于LUA身份验证的脚本。

有关在GNUGK Lua脚本的一般信息,请参见章 LUA脚本

  • RegistrationScript=script
    默认: N/A

    用于RRQ的LUA脚本。简短的脚本可以直接放入配置文件中。对于更长的脚本,请使用RegistrationScriptFile=。

  • RegistrationScriptFile=/path/to/script
    默认: N/A

    用于RRQ的LUA脚本。

  • CallScript=script
    默认: N/A

    用于ARQs和Setups的LUA脚本。 简短的脚本可以直接放入配置文件中。对于更长的脚本,请使用CallScriptFile=。

  • CallScriptFile=/path/to/script
    默认: N/A

    用于ARQ和设置的LUA脚本。

注册身份验证脚本可以使用以下变量

  • username - 与呼叫者相关的用户名
  • callingStationId - 来电号码(若有)
  • callerIP - 呼叫者的IP(已从-NAT端点的NAT IP收到请求)
  • aliases - 注册中的别名列表
  • messageType - "RRQ" 始终注册
  • message - 完整的RRQ消息为多行文本块

Call authentication scripts can use the following variables

  • messageType - "ARQ" 或 "Setup"
  • message - 完整的ARQ或Setup消息为多行文本块
  • source - 呼叫端点的信令IP
  • calledAlias - 被叫别名
  • calledIP - 被叫IP
  • callingStationId - 来电号码(若有)
  • caller - 来自ARQ的呼叫端点的srcInfo或来自Setup中callingStationId的srcInfo
  • callid - 通话ID
  • srcInfo - Setup中的ARQ或sourceAddress的srcInfo字段
  • vendor - productId 和 versionId

脚本必须将认证结果存储在变量 result中。可能的值为"OK","OK", "FAIL" and "NEXT";其他所有内容都将被视为"FAIL"。

例子:

[LuaAuth]
; only let use "boss" register
RegistrationScript=if (username == "boss") then result = "OK" else result = "FAIL" end
; call authentication is in a script file
CallScriptFile=/path/to/callauth.lua

8.18 [LuaPasswordAuth]

本部分配置用于LUA密码身份验证的脚本。

有关在GNUGK Lua脚本的一般信息,请参见章 LUA脚本

  • Script=script
    默认: N/A

    用于查找用户密码的LUA脚本。简短的脚本可以直接放入配置文件中。对于更长的脚本,请使用ScriptFile=。

  • ScriptFile=/path/to/script
    用于查找用户密码的LUA脚本
  • PasswordTimeout=120
    默认: -1

    该模块将缓存请求的密码。此字段以秒为单位定义高速缓存超时值。 0表示永不缓存密码,而负值表示缓存永不过期。

该脚本可以使用以下变量

  • alias - 要认证的用户的别名
  • gk - 正在运行的GK的名称

该脚本必须将用户的密码存储aliaspassword的变量中,以便进一步处理。

8.19 [HttpPasswordAuth]

本节定义了从HTTP服务器获取密码信息的流程。

  • URL=http://example.com/passwords
    默认: N/A

    从中获取密码的URL。可使用下面指定的参数来参数化URL。当前,GnuGk期望响应中使用明文密码。

  • Body=user=%u
    默认: empty

    用于POST请求的HTTP正文。可使用下面指定的参数来参数化URL。

  • Method=GET
    默认: POST

    要使用的HTTP方法。当前支持GET和POST。

  • ResultRegex=[0-9]+
    默认: .*

    从HTTP响应中提取密码的正则表达式。

  • DeleteRegex=5544
    默认: N/A

    要使用的正则表达式会从提取的密码中删除其他模式。可选的。

  • ErrorRegex=error
    默认: ^$

    若HTTP响应与此正则表达式匹配,则将其视为无效。

  • PasswordTimeout=120
    默认: -1

    该模块将缓存请求的密码。此字段以秒为单位定义高速缓存超时值。 0表示永不缓存密码,而负值表示缓存永不过期。

HttpPasswordAuth这些参数定义:

  • %u - 查询密码的实际别名
  • %g - GK标识符(名称
  • %{message} - 处理身份验证的消息(如RRQ,ARQ等)
  • %{caller-ip} - 主叫方的IP
  • %{called-ip} - GnuGk的IP收到此呼叫接口(仅适用于 RRQ and Setup)
  • %{caller-vendor} - 呼叫者的产品名称和版本(仅适用于 RRQ and Setup)
  • %{caller-product-name} - 呼叫者的产品名称(仅适用于 RRQ and Setup)
  • %{caller-product-version} - 呼叫者的产品版本(仅适用于 RRQ and Setup)
  • %{env1} - 环境变量GNUGK_ENV1的内容
  • ...
  • %{env9} - 环境变量GNUGK_ENV9的内容

8.20 [GeoIPAuth]

本节配置GeoIP身份验证。

  • Database=/path/to/GeoIP.dat
    默认: N/A

    Maxmind GeoIP数据库的路径。可从 https://dev.maxmind.com/geoip/legacy/geolite/下载GeoIP数据库的最新副本。

  • AllowedCountries=US,CA,PRIVATE
    默认: N/A

    定义要接受来自哪些国家的邮件。特殊国家'PRIVATE'表示私有IP。

8.21 [TwoAliasAuth]

本节配置TwoAlias身份验证。它包含一个别名列表,其中包含第二个("secret")别名。若端点具有一对匹配的别名,则可以接受它们。

不要将所有这些信息都以明文形式传输,并且很容易被数据包捕获所拦截。这是一种极其脆弱的身份验证形式。

还要注意,Setup消息中的sourceAddress字段是可选的,并且许多端点未向网守注册时就不会发送它,因此即使它们具有匹配的别名,也会使身份验证失败。

例子:

[TwoAliasAuth]
100=SecretA
101=MoreSecretB
102=WhateverSecretC


Next Previous Contents

Chapters: Contents · Introduction · Installation · Getting started · Basic Config · Routed Mode & Proxy · Routing · RAS Config · Authentication · Accounting · Neighbors · Per Endpoint Config · Advanced Config · Monitoring · Advanced Topics



Last updated: 21. Jan 2025