IPSEC_PLUTO
NAME
ipsec_pluto - ipsec whack: IKE管理接口
SYNOPSIS
ipsec
pluto [--help] [--version] [--optionsfrom filename] [--nofork] [--stderrlog] [--use-auto] [--use-klips] [--use-mast] [--use-netkey] [--use-nostack]
[--uniqueids] [--nat_traversal] [--virtual_private network_list] [--keep_alive delay_sec] [--force_keepalive] [--force_busy] [--disable_port_floating]
[--nocrsend] [--strictcrlpolicy] [--crlcheckinterval] [--ocspuri] [--interface interfacename] [--listen ipaddr] [--ikeport portnumber] [--ctlbase path]
[--secretsfile secrets-file] [--adns pathname] [--nhelpers number] [--lwdnsq pathname] [--perpeerlog] [--perpeerlogbase dirname] [--ipsecdir dirname]
[--coredir dirname] [--noretransmits]
ipsec
whack [--help] [--version]
ipsec whack [--debug-none] [--debug-all] [--debug-raw] [--debug-crypt] [--debug-parsing] [--debug-emitting] [--debug-control] [--debug-lifecycle] [--debug-klips]
[--debug-pfkey] [--debug-nat-t] [--debug-dpd] [--debug-dns] [--debug-oppo] [--debug-oppoinfo] [--debug-whackwatch] [--debug-private]
ipsec whack --name connection-name [[--ipv4] | [--ipv6]] [[--tunnelipv4] | [--tunnelipv6]]
[--id identity] [--host ip-address] [--cert path] [--ca distinguished name] [--groups access control groups] [--sendcert yes | forced | always | ifasked | no | never]
[--certtype number] [--ikeport portnumber] [--nexthop ip-address] [[--client subnet] | [--clientwithin subnet]] [--clientprotoport protocol/port] [--srcip ip-address]
[--xauthserver] [--xauthclient] [--modecfgserver] [--modecfgclient] [--modecfgdns1] [--modecfgdns2] [--modecfgwins1] [--modecfgwins2] [--dnskeyondemand] [--updown updown]
--to
[--id identity] [--host ip-address] [--cert path] [--ca distinguished name] [--groups access control groups] [--sendcert yes | always | ifasked | no | never]
[--certtype number] [--ikeport port-number] [--nexthop ip-address] [--client subnet] [--clientwithin subnet] [--clientprotoport protocol/port] [--srcip ip-address]
[--xauthserver] [--xauthclient] [--modecfgserver] [--modecfgclient] [--modecfgdns1 ip-address] [--modecfgdns2 ip-address] [--modecfgwins1 ip-address]
[--modecfgwins2 ip-address] [--dnskeyondemand] [--updown updown]
[--tunnel] [--psk] [--rsasig] [--encrypt] [--authenticate] [--compress] [--pfs] [--pfsgroup [modp1024] | [modp1536] | [modp2048] | [modp3072] | [modp4096] | [modp6144] | [modp8192]]
[--tunnel] [--psk] [--rsasig] [--encrypt] [--authenticate] [--compress] [--pfs] [--pfsgroup [modp1024] | [modp1536] | [modp2048] | [modp3072] | [modp4096] | [modp6144] | [modp8192]]
[--disablearrivalcheck] [--ikelifetime seconds] [--ipseclifetime seconds] [--rekeymargin seconds] [--rekeyfuzz percentage] [--keyingtries count] [--esp esp-algos] [--dontrekey] [--aggrmode]
[--modecfgpull] [[--dpddelay seconds] | [--dpdtimeout seconds]] [--dpdaction [clear] | [hold] | [restart]] [--forceencaps]
[[--initiateontraffic] | [--pass] | [--drop] | [--reject]] [[--failnone] | [--failpass] | [--faildrop] | [--failreject]] [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack --keyid id [--addkey] [--pubkeyrsa key] [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack --myid id
ipsec whack --listen | --unlisten [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack --route | --unroute --name connection-name [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack --initiate | --terminate --name connection-name [--xauthuser user] [--xauthpass pass] [--asynchronous] [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack [[--tunnelipv4] | [--tunnelipv6]] --oppohere ip-address --oppothere ip-address
ipsec whack --crash [ipaddress]
ipsec whack --whackrecord [filename]
ipsec whack --whackstoprecord
ipsec whack --name connection-name --delete [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack --deletestate state-number [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack [--name connection-name] [--debug-none] [--debug-all] [--debug-raw] [--debug-crypt] [--debug-parsing] [--debug-emitting] [--debug-control]
[--debug-controlmore] [--debug-lifecycle] [--debug-klips] [--debug-pfkey] [--debug-dns] [--debug-dpd] [--debug-natt] [--debug-oppo] [--debug-oppoinfo]
[--debug-whackwatch] [--debug-private] [--impair-delay-adns-key-answer] [--impair-delay-adns-txt-answer] [--impair-bust-mi2] [--impair-bust-mr2] [--impair-sa-fail]
[--impair-die-oninfo] [--impair-jacob-two-two]
ipsec whack [--utc] [--listall] [--listpubkeys] [--listcerts] [--listcacerts] [--listacerts] [--listaacerts] [--listocspcerts] [--listgroups] [--listcrls] [--listocsp]
ipsec whack [--utc] [--rereadsecrets] [--rereadall] [--rereadcacerts] [--rereadacerts] [--rereadaacerts] [--rereadocspcerts] [--rereadcrls]
ipsec whack --purgeocsp
ipsec whack --listevents
ipsec whack --status [--ctlbase path] [--optionsfrom filename] [--label string]
ipsec whack --shutdown [--ctlbase path] [--optionsfrom filename] [--label string]
DESCRIPTION
pluto
IKE管理进程;
whack
是
pluto
辅助程序。
pluto
用于自动建立IPsec共享安全联盟(SA)。
pluto
简化了很多手动密钥协商。
ipsec_auto
(8)提供了更多方便接口。
IKE's Job
安全联盟(SA)指定了网络2端之间通信所需要的信息和处理方式,其中包括了封装、认证、加密、压缩。
SA协商涉及到安全、方便、可信、效率等因素的权衡,这些策略问题一般由系统管理员使用IKE设置。
IKE分为2个阶段,每一个阶段产生一个SA。第一阶段进行协商ISAKMP SA,ISAKMP SA用于保护2个IKE之间的通信。IKE第一阶段可以用主模式(Main Mode)或野蛮模式(Aggressive Mode)完成。
以后的协商都是在 ISAKMP SA 保持下进行。第二阶段进行协商IPsec SA,称为快速模式(Quick Mode)
Pluto
pluto是实现IKE的网络程序。目前,它支持XAUTH、ModeConfig、PDP(Dead Peer Detection)、OE(Opportunistic Encryption)、NAT-T。
pluto使用共享密钥或RSA签名对协商双方进行身份认证,其中RSA签名可以来自DNS(SEC)、配置文件、X509证书。
pluto在下面2种情况会启动SA协商:使用
whack程序进行手动开启;
KLIPS处理OE(Opportunistic Encryption)数据包处理。
当
pluto关闭时,它将关闭所有SA。
Before Running Pluto
pluto要求一个IPsec协议栈
pluto支持多线路通道。
pluto根据配置文件查找所有配置好的接口。
Running Pluto
pluto必须以超级管理员身份进行,监听UDP 500端口,如果NAT-T开启则监听UDP 4500端口。
pluto支持不同的协议栈。
--use-auto,表示
pluto自动选择协议栈。也可以手动指定
--use-klips、--use-mast、--use-bsdkame、--use-nostack。
Using Whack
whack被用于发送命令给一个运行中的
pluto。
whack使用UNIX域socket与
pluto通信(缺省 /var/pluto.ctl)
whack包含了复杂的命令参数。帮助格式用于显示帮助或版本信息;连接格式告诉
pluto一个连接描述;公钥格式通知
pluto RSA公钥。删除格式SA中与其对应的连接;
监听格式通知
pluto启动或关闭IKE;路由格式通知
pluto建立连接路由;初始化格式通知
pluto进行SA协商;终止格式通知
pluto删除所有SA;状态格式显示
pluto内部状态;
调试格式通知
pluto改变日志输出;退出格式通知
pluto退出并删除所有SA。
大多数的选项只对一种格式有效,下面3个选项可用于所有格式:
--ctlbase pathpath.ctl 用于UNIX域socket与pluto通信
--optionsfrom filename把文件内容做为参数输入
--label string为所有错误消息添加指定字符串
帮助格式:
--help显示使用手册信息
--version显示 whack版本信息
连接格式描述了
pluto连接时使用到的信息。
pluto需要一些信息决定哪些连接应该进行协商,哪些信息不应该进行协商;当
pluto是应答者(可以看到服务端)时,它需要信息
决定是否要建立连接。
--name connection-name设置连接名字连接拓扑是对称的,如下client_subnet<-->host:ikeport<-->nexthop<-->nexthop<-->host:ikeport<-->client_subnet
--id id端点的ID。目前,ID可以是IP地址、域名、user@FQND、X509的DN、关键词 %myid。
--host ip-address, --host %any, --host %opportunistic端点IP地址(通常为公网接口地址)。如果 pluto是IKE应答者(可以看到服务端),应答一个未知IP时,那么应该使用 %any;如果pluto随机初始化连接,那么应该使用 %opportunistic
--cert filenameX509证书名字。此证书只能是公钥证书,不可以为PKCS#12证书文件。
--ca distinguished nameCA证书的DN名字。
--groups access control groups访问控制组
--sendcert yes|forced|always|ifasked|no|never设置是否发送X509证书。缺省使用 ifasked,当 pluto为响应者时。
--certtype numberX509证书类型数字
--ikeport port-number设置IKE监听的UDP端口,缺省为500。
--nexthop ip-address当 pluto建立一个IPsec SA时,它同时会执行一条路由命令。
--client subnetIPsec传输目的子网。格式为 address/mask
--clientwithin subnet不再使用此选项
--clientprotoport protocol/port指定连接中传输的协议和端口(过滤器作用),格式为 protocol/port。
--srcip ip-address主机源IP
--xauthserverxauth服务端
--xauthclientxauth客户端
--xauthuserxauth认证用户名。此选项通常在使用 ipsec auto --up conn 时被传送
--xauthpassxauth认证口令。此选项通常在使用 ipsec auto --up conn 时被传送
--modecfgserverMode Config服务端
--modecfgclientMode Config客户端
--modecfgdns1第一个传给Mode Config服务端的DNS服务端IP地址
--modecfgnds2第二个传给Mode Config服务端的DNS服务端IP地址
--modecfgwins1第一个传给Mode Config服务端的WINS服务端IP地址
--modecfgwins2第二个传给Mode Config服务端的WINS服务端IP地址
--dnskeyondemandXXXX
--updown updown设置 pluto启动或关闭时执行的shell命令。
--toXXXX
连接也可以对密钥更新和密钥安全进行了描述
--pskIKE双方使用预共享密钥,此认证要求双方使用相同的密钥。
--rsasigIKE双方使用RSA签名认证,此认证要求双方分别有自己的私钥和对方的公钥。
--encrypt所有的IPsec SA都使用加密(non-null ESP)
--authenticate所有的IPsec SA都使用认证(AH)。
--compress所有的IPsec SA将使用IPCOMP(压缩)
--tunnelIPsec SA将使用隧道模式
--ipv4使用IPv4
--ipv6使用IPv6
--tunnelipv4XXXX
--tunnelipv6XXXX
--pfsPerfect Forward Secrecy - 新密钥所需要的材料由IPsec SA产生,而不是由ISAMKP SA产生。
--pfsgroup modp-groupDH使用。目前参数为: modp1024(DHgroup 2)、 modp1536(DHgroup 5)、 modp2048(DHgroup 14)、 modp3072(DHgroup 15)、 modp3096(DHgroup 16)、 modp6144(DHgroup 17)、 modp8192(DHgroup 18)
--disablearrivalcheck如果是隧道连接,那么通过此隧道的数据包允许是任何源和目的地址
--esp esp-algosIKE第二阶段的ESP算法,参数格式请看 ipsec_spi(8)
--aggrmodeISAKMP(IKE第一阶段)使用野蛮模式。
--modecfgpull从对端接收Mode Config信息
--dpddelay secondsPDP(RFC 3706 对端死亡探测)时隔时间(单位为秒,缺省为30秒)
--timeout seconds保活包超时时间(单位为秒,缺省为120秒)。当保活包超时或没有数据通信后,将被认为对端死亡,同时会删除SA
--dpdaction action当DPD认为一个对端死亡时,将执行的动作。参数为 hold(缺省为 hold)表示eroute将进行 %hold状态; clear表示删除eroute和SA; restart通过用于永久隧道。
--forceencaps强制使用 RFC-3948进行封装(ESP in UDP port 4500 packets),设置此参数必须打开 --nat_traversal 参数
如果
--encrypt、
--authenticate、
--compress、
--pfs 都没有被设置,那么连接将只进行第一阶段 ISAKMP SA 建立。
除了使用
--initiate 选项来初始化一条隧道外,隧道还可以加载其它策略:
--initiateontraffic只初始化连接。???
--pass允许使用明文通信,直到隧道被初始化完成
--drop丢弃明文通信
--reject丢弃明文通信,同时发送ICMP
pluto支持的X509证书相关选项:
--utc以UTC格式显示所有时间
--listall列出 pluto内部所有X509证书信息
--listpubkeys列出所有成功加载的公钥
--listcerts列出当前加载的X509证书
--checkpubkeys列出当前加载的过期X509证书
--listcacerts列出当前加载的CA证书
--listacerts列出当加载的X509属性证书
--listaacerts
--ocspcerts列出所有通过OCSP获取的X509证书
--listgroups
--listcrls列出所有加载的CRL证书
相应选项
--rereadsecrets,
--rereadall,
--rereadcacerts,
--rereadacerts,
--rereadaacerts,
--rereadocspcerts,
--rereadcrls,
--purgeocsp 重读信息,清除所有在线获取的信息。
多大数的应用要求灵活的策略,当前策略被硬编码在源文件spdb.c中。ISAKMP SA可以使用MODP1024和MODP1536; AES或3DES加密;SHA1-96和MD5-96认证。IPsec SA的ESP可以使用AES或3DES和
MD5-96或SHA1-96;AH可以使用MD5-96或SHA-96。IPCOMP压缩通过不使用。
--ikelifetime secondspluto允许一个ISAKMP SA存活的时间。缺省为3600秒(1小时),最大为86400秒(1天)。 pluto将拒绝超过最大值的设置。
--ipseclifetime secondspluto允许一个IPsec SA存活的时间。缺省为28800秒(8小时),最大为86400秒(1天)。 pluto将拒绝超过最大值的设置。
--rekeymargin secondsSA过期前多长时间 pluto将进行重协商。此选项将发生在 pluto是发起者(客户端)的情况下。缺省为540秒(9分钟)
--rekeyfuzz percentageXXXX
--keyingtries countpluto协商SA的尝试次数。当 count为0时表示从不放弃协商,缺省为3次。
--dontrekeyXXXX
--delete
--delete, --name connection-name删除指定名字的连接,同时删除此连接对应的SA和路由
--deletestate state-number根据指定序列数字删除连接
whack的路由格式通知
pluto建立连接路由。
--route, --name connection-nameXXXX
--unroute, --name connection-nameXXXX
初始化格式
--initiate, --name connection-name, --asynchronous
尝试初始化格式,一般且于debug调试
--tunnelipv4, --tunnelipv6, --oppohere ip-address, --oppothere ip-addresspluto将尝试初始化连接, whack将显示此处理过程