当前位置:   article > 正文

strongSwan:ipsec.conf – IPsec 的配置和连接

ipsec.conf

配置文件描述

可选的ipsec.conf文件指定了strongSwan IPsec子系统的大多数配置和控制信息。 主要的例外是身份验证的机密;见ipsec.secrets(5)。其内容不是安全敏感的。

该文件是一个文本文件,由一个或多个部分组成。空格后跟“#”后跟任何到行末尾是注释,而被忽略,空行不包含在部分内。

包含include和文件名的行(由空格分隔)将替换为该文件的内容。 如果文件名不是完整路径名,则认为它与包含包含文件的目录相关。 这种包含可以嵌套。 可能只提供一个文件名,它可能不包含空格,但它可能包含shell通配符(参见sh(1));例如:

	include ipsec.*.conf

        包含工具的目的主要是为了使连接或连接集的信息与主配置文件分开。这允许更改这些连接描述,将其复制到所涉及的其他安全网关等,而不必经常从配置文件中提取它们然后将它们插回到配置文件中。还要注意,还允许将“单个逻辑部分”(例如连接描述)分成“几个实际部分”的参数(如下所述)。

部分如下形式的一行开头:

	**type name**

其中type表示后面的部分类型,name是一个任意名称,用于区分该部分与相同类型的部分。 以空格开头的所有后续非空行都是该部分的一部分。 合并具有相同名称的相同类型的部分。

部分内的行通常是形式

	**parameter=value**

注意前面的强制空格)。在“=”的两侧可以有空白区域。参数名称特定于部分类型。

空值表示参数的系统默认值(如果有的话),即它大致相当于完全省略参数行。这可能有助于清除从%default部分继承的设置或通过参数(参见下文)。value可以包含单个空格(额外的空格减少到一个空格)。要保留写入的空格,请将整个值括在双引号(”)中;在这样的值中,双引号本身可以通过在它们前面添加”\“字符进行转义。双引号字符串可以跨越多行,通过用”\“字符结束行。(后续的行不必以空格开头,因为它将被保留)。此外,以下控制字符可以用双引号字符串编码:\n, \r, \t, \b, \f。

数值被指定为“整数”(数字序列)或“小数”(数字序列可选地后跟“.”和另一个数字序列)。

目前有一个参数可用于任何类型的部分:

	**also** 该参数的值是部分名;该部分的参数由当前部分继承。当前节中的参数始终覆盖继承的参数,即also跟在它们后面。指定的部分必须存在,且必须具有相同的部分类型;在当前部分之前或之后定义都可以,则不会。允许嵌套,并且单个部分中可能存在多个also(引用部分中的参数将按照这些参数的顺序继承和覆盖)。

名称为%default的节指定相同类型的节的默认值。这其中的所有参数都由该类型的所有其他部分继承。

目前有三种类型的部分:

  • config部分指定IPsec的一般配置信息;
  • conn部分指定IPsec连接;
  • ca部分指定证书颁发机构的特殊属性。

CONFIG 部分

目前,IPsec软件已知的唯一config部分是名为setup的config部分,即config setup,其中包含软件启动时使用的信息。在config setup部分中当前接受的参数名称为:

cachecrls = yes | no
如果启用,通过HTTP或LDAP获取的证书吊销列表(CRL)将在/etc/ipsec.d/crls/中缓存,在从证书颁发机构的公钥派生的唯一文件名下。

charondebug = <debug list>
应该记录多少charon调试输出。可以指定包含type/level对的逗号分隔列表,例如:dmn 3,ike 1,net -1。可接受的type值有:dmn,mgr,ike,chd,job,cfg,knl,net,asn,enc,lib,esp,tls,tnc,imc,imv,pts;可接受的level由:-1,0,1,2,3,4(silent, audit, control, controlmore, raw, private)。 默认情况下,所有type的level都设置为1。 有关更多灵活性,请参阅strongswan.conf(5)中的「LOGGER CONFIGURATION」部分。

strictcrlpolicy = yes | ifuri | no
定义是否必须有新的CRL才能使基于RSA签名的对等身份验证成功。IKEv2另外识别ifuri,如果至少定义了一个CRL URI则为yes,如果没有知道URI则为no。

uniqueids = yes | no | never | replace | keep
特定参与者ID是否应该保持唯一,任何新的IKE_SA使用被认为替换使用该ID的所有旧ID的ID;可接受的值是yes(默认值),no,never。 参与者ID通常是唯一的,因此使用相同ID的新IKE_SA几乎总是用于替换旧ID。 no和never之间的区别在于,如果选项为no,守护程序将在接收INITIAL_CONTACT通知时替换旧的IKE_SAs,但如果从未配置,则将忽略这些通知。 守护进程还接受与yes相同的值replace,并且值保持拒绝新的IKE_SA设置并保持先前建立的副本。

CONN 部分

conn部分包含连接规范,定义使用IPsec进行的网络连接。给定的name是任意的,用于标识连接。 这是一个简单的例子:

  1. conn snt
  2. left=192.168.0.1
  3. leftsubnet=10.1.0.0/16
  4. right=192.168.0.2
  5. rightsubnet=10.1.0.0/16
  6. keyingtries=%forever
  7. auto=add

关于术语的说明:有两种通信方式:用户IP数据包的传输;用于键控,密钥更新和一般控制的网关到网关协商。控制连接的路径在IKEv1中称为“ISAKMP SA”,在IKEv2协议中称为“IKE SA”。正在协商的内核级数据路径称为“IPsec SA”或“Child SA”。 strongSwan之前使用了两个独立的键控守护进程,pluto和charon。本手册不再讨论pluto选项,而只讨论自StrongSwan 5.0同时支持IKEv1和IKEv2的charon。

为了避免对配置文件进行微不足道的编辑以适应连接中涉及的每个系统,连接规范是按照左右参与者的方式编写的,而不是根据本地和远程方式编写的。哪个参与者被认为是左或右是任意的;对于每个连接描述,尝试确定本地端点是否应该充当左端点或右端点。这是通过将为两个端点定义的IP地址与分配给本地网络接口的IP地址进行匹配来完成的。如果找到匹配,则匹配的角色(左或右)将被视为本地角色。如果在启动期间未找到匹配项,则将左侧视为本地匹配项。这允许在两端使用相同的连接规范。有些情况下没有对称性;一个很好的约定是左侧用于本地侧,右侧用于远侧(第一个字母是一个很好的助记符)。

许多参数涉及一个参与者或另一个参与者;这里仅列出左边的那些,但是名称以left开头的每个参数都有一个right对应物,其描述相同,但左右颠倒。

除非标记为“(必需)”,否则参数是可选的。

CONN 参数

除非另有说明,否则对于工作连接,通常两端必须完全同意这些参数的值。

also = <name>
引入conn部分<name>

aaa_identity = <id>
定义IKEv2 EAP身份验证期间使用的AAA后端的标识。 如果EAP客户端使用验证服务器标识的方法(例如EAP-TLS),但它与IKEv2网关标识不匹配,则这是必需的。

aggressive = yes | no
是否使用IKEv1 Aggressive或Main Mode(默认值)。

ah = <cipher suites>
用于连接的以逗号分隔的AH算法列表,例如,sha1-sha256-modp1024。 符号是完整性[-dhgroup]。 对于IKEv2,可以在单个提议中包含相同类型的多个算法(由-分隔)。IKEv1仅包含提案中的第一个算法。 只能使用ah或esp关键字,不支持AH+ESP包。

没有默认的AH密码套件,因为默认使用ESP。守护程序将其广泛的默认提议添加到配置的值。 要将其限制为已配置的提议,可以在末尾添加感叹号(!!)。

如果指定了dh-group,则设置CHILD_SA/Quick模式并且重新加密包括单独的Diffie-Hellman交换(有关详细信息,请参阅esp关键字)。

auth = <value>
由pluto IKEv1守护程序使用,它来为ESP加密数据包使用AH完整性保护,但在charon中不支持。关键字ah指定用于AH的完整性保护的算法,但没有加密。不支持AH + ESP捆绑包。

authby = pubkey | rsasig | ecdsasig | psk | secret | never | xauthpsk | xauthrsasig
这两个安全网关应该如何相互验证;可接受的值是:

  1. * **psk, secret**,用于预共享密钥;
  2. * **pubkey**,(默认)公钥签名;
  3. * **rsasig**,RSA数字签名;
  4. * **ecdsasig**,椭圆曲线DSA签名;
  5. * **never**,如果永远不会尝试或接受协商,则可以使用never(对于仅有分流的conn非常有用)。
  6. * **xauthpsk, xauthrsasig**,IKEv1还支持xauthpsk和xauthrsasig值,除了基于”共享机密“或”数字RSA签名“的IKEv1主模式之外,它还将启用扩展认证(XAUTH)。

数字签名在各方面都优于共享机密。

不推荐使用此参数,因为两个对等方不需要就IKEv2中的身份验证方法达成一致。 请改用leftauth参数来定义身份验证方法。

auto = ignore | add | route | start
在IPsec启动时,应该自动完成哪些操作(如果有的话);当前接受的值是add,route,start,ignore(默认值):

  1. * **add**,加载连接而不启动它。
  2. * **route**,加载连接并安装内核陷阱。 如果在leftsubnet和rightsubnet之间检测到流量,则建立连接。
  3. * **start**,加载连接并立即启动。
  4. * **ignore**,忽略连接。这等于从配置文件中删除连接。仅在本地相关,其他目的不需要就此达成一致。

closeaction = none | clear | hold | restart
定义远程对等方意外关闭CHILD_SA时要采取的操作(有关值的含义,请参阅dpdaction)。 如果对等方使用reauthentication或uniquids检查,则不应使用closeaction,因为这些事件可能在不需要时触发定义的操作。

compress = yes | no
是否建议在连接上进行IPComp压缩内容(链路级压缩对加密数据不起作用,因此要有效,必须在加密前进行压缩);可接受的值是yes和no(默认值)。 值为yes会导致守护程序同时提出压缩和解压缩,并且更喜欢压缩。值为no会阻止守护程序提出或接受压缩。

dpdaction = none | clear | hold | restart
控制”死亡对等检测协议“(DPD,RFC 3706)的使用,其中周期性地发送R_U_THERE通知消息(IKEv1)或空的INFORMATIONAL消息(IKEv2)以检查IPsec对等体的活跃性。值clear,hold,restart都会激活DPD并确定要在超时时执行的操作。使用clear,在连接后关闭,不再采取进一步措施。 hold会安装陷阱策略,该策略将捕获匹配的流量并尝试按需重新协商连接。restart将立即触发尝试重新协商连接。默认值为none,禁用活动发送DPD消息。

dpddelay = 30s | <time>
定义R_U_THERE messages/INFORMATIONAL交换发送给对等体的周期时间间隔。仅在未收到其他流量时才会发送这些流量。在IKEv2中,值0不发送任何其他INFORMATIONAL消息,仅使用标准消息(例如重定密消息)来检测死亡对等体。

dpdtimeout = 150s | <time>
定义超时间隔,之后在不活动的情况下删除与对等体的所有连接。 这仅适用于IKEv1,在IKEv2中应用默认重传超时,因为每个交换用于检测死对等体。

inactivity = <time>
定义超时间隔,如果CHILD_SA未发送或接收任何流量,则关闭CHILD_SA。 在CHILD_SA重新加密期间重置不活动计数器。 这意味着不活动超时必须小于重新加密间隔才能产生任何效果。

eap_identity = <id>
定义客户端用于回复EAP身份请求的身份。如果在EAP服务器上定义,则定义的标识将在EAP身份验证期间用作对等标识。特殊值%identity使用EAP Identity方法向客户端询问EAP身份。 如果未定义,则IKEv2标识将用作EAP标识。

esp = <cipher suites>
用于连接的以逗号分隔的ESP加密/认证算法列表,例如,aes128-sha256。符号是加密完整性[-dhgroup] [-esnmode]。对于IKEv2,可以在单个提议中包含相同类型的多个算法(由-分隔)。 IKEv1仅包含提案中的第一个算法。只能使用ah或esp关键字,不支持AH+ESP包。

默认为aes128-sha256。守护程序将其广泛的默认提议添加到此默认值或配置的值。要将其限制为已配置的提议,可以在末尾添加感叹号(!)。

注意:作为响应者,守护程序默认选择同级也支持的第一个已配置的提议。这可以通过strongswan.conf(5)更改为选择由对等方发送的第一个可接受的提议。为了限制响应者只接受特定的密码套件,可以使用严格的标志(!,感叹号),例如:aes256-sha512-modp4096!

如果指定了dh-group,则CHILD_SA/Quick模式重新加密和初始协商将使用指定的组进行单独的Diffie-Hellman交换。但是,对于IKEv2,使用IKE_SA隐式创建的CHILD_SA的键将始终从IKE_SA的密钥材料派生。因此,此处指定的任何DH组仅在稍后重新生成CHILD_SA或使用单独的CREATE_CHILD_SA交换创建时才适用。因此,建立SA时可能不会立即注意到建议不匹配,但可能会在以后导致重新生成失败。

对于esnmode的有效值是esn和noesn。指定两者协商对等体的扩展序列号支持,默认为noesn。

forceencaps = yes | no
即使没有检测到NAT情况,也强制对ESP数据包进行UDP封装。 这可能有助于克服限制性防火墙。 为了强制对等体封装数据包,NAT检测有效负载是伪造的。

fragmentation = yes | accept | force | no
是否使用IKE分片(根据RFC 7383的专有IKEv1扩展或IKEv2分段)。 可接受的值是yes(默认值),accept,force,no。 如果设置为yes,并且对等体支持它,则超大IKE消息将以片段形式发送。 如果设置为accept,则会向对等方通知对碎片的支持,但守护程序不会以碎片形式发送自己的消息。 如果设置为force(仅支持IKEv1),则初始IKE消息将在必要时进行分段。 最后,将该选项设置为no将禁用宣布对此功能的支持。

请注意,无论此选项的值如何(即使设置为no),始终接受对等方发送的碎片化IKE消息。

ike = <cipher suites>
要使用的以逗号分隔的IKE/ISAKMP SA加密/认证算法列表,例如,aes128-sha256-modp3072。 表示法是encryption-integrity[-prf]-dhgroup。 如果没有给出PRF,则定义的完整性算法用于PRF。 prf关键字与完整性算法相同,但具有prf前缀(例如prfsha1,prfsha256,prfaesxcbc)。

在IKEv2中,可以包括多个算法和提议,例如aes128-aes256-sha1-modp3072-modp2048,3des-sha1-md5-modp1024。

默认为aes128-sha256-modp3072。 守护程序将其广泛的默认提议添加到此默认值或配置的值。 要将其限制为已配置的提议,可以在末尾添加感叹号(!)。

注意:作为响应者,守护程序接受从对等方收到的第一个支持的提议。 为了限制响应者只接受特定的密码套件,可以使用严格的标志(!,感叹号),例如:aes256-sha512-modp4096!

ikedscp = 000000 | <DSCP field>
差分服务字段代码点,用于设置从此连接发送的传出IKE数据包。 该值是一个六位二进制编码字符串,用于定义要设置的Codepoint,如RFC 2474中所定义。

ikelifetime = 3h | <time>
连接的密钥信道(ISAKMP或IKE SA)在重新协商之前应该持续多长时间。 另见下面的EXPIRY/REKEY。

installpolicy = yes | no
决定是否由charon守护程序为给定连接在内核中安装了IPsec策略。 和平合作,例如 使用想要控制内核策略的Mobile IPv6守护程序mip6d。 可接受的值是yes(默认值)和no。

keyexchange = ike | ikev1 | ikev2
应该使用哪个密钥交换协议来启动连接。 标有ike的连接在启动时使用IKEv2,但在响应时接受任何协议版本。

keyingtries = 3 | <number> | %forever
在放弃之前,应该进行多少次尝试(整数或永远不变)来协商连接,或替换连接(默认3)。值%forever意味着“永不放弃”。 仅在本地相关,其他目的不需要就此达成一致。

type = tunnel | transport | transport_proxy | passthrough | drop
连接的类型;当前接受的值:

  1. * **tunnel**(默认值),表示主机到主机,主机到子网,子网到子网的隧道;
  2. * **transport**,表示主机到主机的传输方式;
  3. * **transport_proxy**,表示特殊的Mobile IPv6传输代理模式;
  4. * **passthrough**,表示根本不应该进行IPsec处理;
  5. * **drop**,表示应丢弃数据包。

strongswan官网icon-default.png?t=M4ADhttps://www.strongswan.org/

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号