IPsec 笔记

IPsec 目的是用来解决两个IP之间数据可靠,安全传输的问题。
这个问题可以拆分开为几个问题:

  1. 确保传输过来的数据是没有被篡改过的(data integrity)
  2. 确保数据是对方传过来的(data origin authentication)
  3. 数据不被其他人偷看(confidentiality)
    另外一个要避免中途有人截取了这些数据然后故意重传,即重放攻击(replay attacks),这个问题先不讨论
    为了解决上面这几个问题,我们先考虑下面几种情况:
  4. 数据被无意中修改
    假设我们使用知名的 md5 算法,把传输的数据算出一个哈希值,然后放在数据包的某个位置。收到数据后我们去算下其哈希是不是跟附带的哈希值一致,如果不一致则说明数据被改过了。如果有人恶意伪造数据,把哈希值也改了,这种技术就防止不了。
  5. 如何防止数据恶意被篡改
    要防止数据被恶意篡改,我们假设数据传输双方都知道一个密码,然后把密码和数据拼接起来,算出一个哈希值作为验证。由于第三方不知道密码,无法伪造,因此通过这种方式,我们就解决了上面三个问题中的前两个问题。
    在有密码的情况下,双方可以用加密算法来加密和解密,也就解决了第三个问题。

上面讲的是一个一个从技术理论角度来看 IPsec 的问题,而在实际上 IPsec 的应用中,往往会用到下面这些术语:

  1. 认证头(AH)
    认证头是干什么的呢?其实际上就是解决了上面的第一,第二个问题。
  2. 封装安全载荷(ESP)
    这个技术实际上是解决了上面的三个问题
    从表面来看,似乎后者是可以完全替代前者,但是实际上后者算的哈希值只包括了 IP 包承载的数据(payload),而前者把 IP 头的部分信息也算在里面了。两者可以选着用或者只用其中一种,视情况而定。
    上面这两个技术都需要密码和相关算法,其通过安全参数索引(SPI)这个字段来获得,那么想一下密码和算法这些信息保存在哪里?这就牵扯到另外一个技术,即安全关联(SA Security association),里面保存了密码以及相关算法信息。

讲到这里,其实还有问题,那就是前面提到的密码是怎么得到的,加密算法又是怎么协商的,常见的解决这个问题依赖 IKE([Internet Key Exchange) 这个组件,其通过协商,最终会生成安全关联。目前 IKE最新版本是 IKEv2。
IKE 交互过程分为两个阶段:

  1. 第一阶段,通过 DH 密钥交换算法根据原始信息生成一个密码,这个密码被用来加密后续的 IKE 数据。这个原始信息可以是预共享密钥(PSK),密钥对等。第一阶段可以工作在Main Mode或者Quick Mode,前者有加密,比较安全。
    其中第一个阶段又分为两个步骤,第一步称作 IKE_SA_INIT,其主要作用是交换基本信息,包括要采用的哈希算法,加密算法,随机数(nonce)并且执行了一步 DH 交换。(出于简化起见,先不讨论公钥这种情况。)这步基础上,实际上两端可以得出了一个共识的密钥,这就是 DH 交换算法的功能。第二步则称为 IKE_AUTH,这一步中,双方用协商好的算法和共识算法对之前的消息进行了签名确认,最终创建了第一个 SA。推测这个 SA 并不为任何 IPsec 的连接使用,而只给 IKE 使用。
  2. 第二阶段,根据前面阶段的密码来协商和创建更多的安全关联(SA)信息。
    第二阶段,虽然在配置层面上都是 IKE 的配置,但是在实际上所有的配置应该都是指 IPsec 的配置。这里又包括两个考虑点:第一是用 ESP 还是 AH,现实世界里面我们直接抛弃 AH 采用 ESP。第二是 ESP 用什么算法来加密。这个配置项在 openswan 里面叫做 phase2alg,在 strongswan 里面叫做 esp。注意这里要配置内核支持的算法。一旦两端协商完毕,新的 SA 就会创建,新连接的数据包的 SPI 就会该 SA,从而实现对数据的保护。

对于具体连接 SA 协商而言,在 strongswan 里面是通过 leftsubnet, rightsubnet 来定义的,其定义了哪些连接要由 IPsec 来保护,来封装。这个规则在 IPsec 规范里面叫做 Traffic Selectors,简写为 TS,发起方和接收方各称为 TSi,TSr。如果是 IKEv2 的情况下,遇到 TS_UNACCEPTABLE 的错误,那么往往是两端允许的网段配置不一致,需要双方技术人员协商解决。Juniper 设备如果在基于路由的 IPsec 下,TS是通过 proxy-id 来配置,如果是在基于策略的 IPsec 下,则是通过策略来配置。详细参考相关文档。

在 linux 下面,可以通过 ip xfrm state, ip xfrm policy 以及 strongswan 的 ipsec statusall 等命令来查看 IPsec 的状态。

在网络层面,实际上 IKE 是工作在 UDP 协议上的,端口 500 或者 4500. 而 IPsec ESP 默认工作在 IP 协议(协议号50)上,在需要经过 NAT 的情况下,该数据包会被封装在 UDP 包里面,通过端口 4500 进行收发。所以 4500 端口会混合着各路 IPsec 数据包以及 IKE 的包。感觉比较混乱。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • 他一对我好我就心花怒放,忘记了平时他的所谓所谓,决定记下来,激励自己,早日不爱这个人。 ................
    我真的不要喜欢你阅读 234评论 0 0
  • 晚上在群里发了一张玩具小熊的图片,让孩子们尝试写一句话。 从三个方面着手,这是什么东西,谁的,颜色。 不得不称赞我...
    06暖阳阅读 316评论 2 1
  • 前言 今天在项目上做了一个大死,为了方便地在图表上显示自定义的markLine,因为2.0的markLine没有t...
    冘若烦阅读 1,150评论 1 0
  • 怎么回事,水又小了,不知道我今天要回家呀,时间很赶的。 快到上班的时间了,用水的人多了,对于住在顶楼的他,因为水压...
    独立者阅读 152评论 0 0