Linux的高级路由和流量控制:IPSEC Internet上安全的IP

现在,在Linux上有两种IPSEC可用。对于2.2和2.4,第一个比较正规的实现有FreeS/WAN。他们有一个官方站点和一个经常维护的非官方站点。出于多种原因,FreeS/WAN历来没有被合并到内核的主线上。最常提到的原因就是政治问题——违反了美国的密码产品扩散条例。所以它不会被集成到Linux内核中。

另外,很多合作伙伴表明了他们对代码质量的忧虑。关于如何设置FreeS/WAN,有很多文档可以参考。

Linux 2.5.47版内核里有一个内置的IPSEC实现,是由Alexey Kuznetsov和Dave Miller在USAGI ">IPv6 小组的启发下写成的。经过这次合并,James Morris的CrypoAPI也成了内核的一部分——它能够真正地加密。

本HOWTO文档仅收录2.5以上版本内核的IPSEC。Linux 2.4内核的用户推荐使用FreeS/WAN。但是要注意,它的配置方法与内置IPSEC不同。

2.5.49版内核的IPSEC不再需要任何补丁。

我在这里收集了Alexey或Dave Miller发布的一些补丁。对于2.5.48版的内核,在报告BUG之前请确认已经打上了那些补丁!(迄今还没有2.5.49这方面的补丁)。一些简单的用户级工具可以在这里 (编译好的可执行文件和手册)找到。编译这些用户级工具需要修改Makefiles指向你的2.5.x内核。这种情况可望很快解决。

编译你的内核的时候,要确认已经打开CryptoAPI中的“PF_KEY”、“AH”、“ESP”以及其他所有选项!netfilter中的TCP_MSS方法现在不能用,请关掉。

首先,我们展示一下如何在两个主机之间手动设置安全通讯。其间的大部分工作都可以自动完成,但是为了了解细节我们仍然用手动完成。

如果你仅仅对自动密钥管理感兴趣,请跳过下面一节。但是要知道,了解手动密要管理是很有用的。

1. 从手动密钥管理开始

IPSEC是一个复杂的主题。有很多在线信息可以查阅,这个HOWTO将集中讲解如何设置、运行并解释一些基本原理。

很多iptables配置会丢弃IPSEC数据包!要想让IPSEC通过,运行

iptables -A xxx -p 50 -j ACCEPT
iptables -A xxx -p 51 -j ACCEPT

IPSEC提供了一个安全的IP协议版本。所谓的“安全”意味着两件事情:加密与验证。如果认为安全仅仅就是加密哪就太天真了,很容易看出来那是不够的——你的通讯过程或许是加密的,但是你如何保证与你通讯的对端就是你期望中的人呢?

IPSEC使用ESP('Encapsulated Security Payload',安全载荷封装) 来支持加密,使用AH(Authentication Header,头部验证)来支持对端验证。你可以同时使用二者,也可以使用二者之一。

ESP和AH都依靠SA(security associations,安全联盟)来工作。一个SA由一个源、一个目的和一个说明组成。一个验证SA看上去应该是:

add 10.0.0.11 10.0.0.216 ah 15700 -A hmac-md5 "1234567890123456";

意思是:“从10.0.0.11到10.0.0.216的数据包需要AH,使用HMAC-MD5签名,密码是1234567890123456”。这个说明的SPI(Security Parameter Index,安全参数索引)号码是'15700',细节后面再谈。有意思的是一个会话的两端都使用相同的SA——它们是全等的,而不是镜像对称的。要注意的是,SA并没有自动翻转规则——这个SA仅仅描述了从10.0.0.11到10.0.0.216的认证。如果需要双向安全,需要2条SA。

一个简单地ESP SA:

add 10.0.0.11 10.0.0.216 esp 15701 -E 3des-cbc "123456789012123456789012";

意思是:“从10.0.0.11到10.0.0.216的数据包需要ESP,使用3des-cbc加密算法,密码是123456789012123456789012”。SPI号码是'15701'。

到此,我们看到SA描述了所有的说明,但它并没有描述应该什么时候用到这些策略。实际上,可以有很多完全相同的SA,除了它们之间的SPI不同。顺便提一句,SPI的意思是Security Parameter Index(安全参数索引)。为了进行加密操作,我们需要声明一个策略。这个策略可以包含诸如“如果可能的话使用ipsec”或者“除非我们有ipsec否则丢弃数据包”这样的东西。

时间: 2024-09-22 05:00:53

Linux的高级路由和流量控制:IPSEC Internet上安全的IP的相关文章

Linux的高级路由和流量控制:其它可能性

这章列出了一些有关Linux的高级路由和流量整形的计划.其中有些链接应该单独写一章,有些本身的文档十分完整,不需要更多的HOWTO. 1Q VLAN在Linux上的实现(网站) VLAN是一种使用非物理方法把网络划分成多个部分的技术.这里可以找到很多有关VLAN的信息.利用这个实现,你可以让你的Linux机器与VLAN设备(比如http://www.aliyun.com/zixun/aggregation/15069.html">Cisco Catalyst,3Com: <Coreb

Linux的高级路由和流量控制:介绍iproute2

希望这篇文档能对你更好地理解Linxs2.2/2.4的路由有所帮助和启发.不被大多数使用者所知道的是,你所使用工具,其实能够完成相当规模工作.比如route 和ifconfig,实际上暗中调用了非常强大的iproute 2的底层基本功能. Linux能为你做什么 一个小列表: • 管制某台计算机的带宽• 管制通向某台计算机的带宽• 帮助你公平地共享带宽• 保护你的网络不受DoS攻击• 保护Internet不受到你的客户的攻击• 把多台服务器虚拟成一台,进行http://www.aliyun.co

Linux的高级路由和流量控制:内核网络参数

内核有很多可以在不同环境下调整的参数.通常,预设的缺省值可以满足99%的环境要求,we don't call this the http://www.aliyun.com/zixun/aggregation/3415.html">Advanced HOWTO for the fun of it! 有个很有趣的地方:/proc/sys/net,你应该看看.这里一开始并没有把所有的内容归档,但我们正在尽力如此. 有时候你需要看看Linux的内核源代码.读读Documentation/files

Linux的高级路由和流量控制:用Cisco和6bone实现IPv6

1. http://www.aliyun.com/zixun/aggregation/9485.html">IPv6隧道 这是Linux隧道能力的另一个应用.这在IPv6的早期实现中非常流行.下面动手试验的例子当然不是实现IPv6隧道的唯一方法.然而,它却是在Linux与支持IPv6的CISCO路由器之间搭建隧道的常用方法,经验证明多数人都是照这样做的.八成也适合于你. 简单谈谈IPv6地址: 相对于IPv4地址而言, IPv6地址非常大,有128bit而不是32bit.这让我们得到了我们

Linux的高级路由和流量控制:动态路由OSPF和BGP

当你的网络变得确实比较大,或者你开始考虑成为国际互联网的一部分的时候,你就需要能够动态调整路由的工具了.站点之间经常由越来越多个链路互相连接. OSPF和BGP4几乎已经成了Internet的实际标准.通过gated和zebra,Linux全都能支持. 因为这些内容暂时没有包括进本文档,我们在此仅给出具体的学习方向: 纵览: Ciscohttp://www.aliyun.com/zixun/aggregation/9344.html">系统设计大规模的IP网络 对于OSPF: Moy, J

Linux的高级路由和流量控制:路由策略数据库

如果你有一个大规模的路由器,你可能不得不同时满足不同用户对于路由的不同需求.路由策略数据库可以帮助你通过多路由表技术来实现. 如果你想使用这个特性,请确认你的内核配置中带有 "IP: advanced router" 和 "IP: policy routing" 两项. 当内核需要做出路由选择时,它会找出应该参考哪一张路由表.除了 "ip" 命令之外,以前的 "route" 命令也能修改 main 和 local 表. 缺省规

Linux的高级路由和流量控制:GRE和其他隧道

Linux有3种隧道.它们是: IP-in-IP 隧道. GRE 隧道和非内核隧道(如PPTP). 1. 关于隧道的几点注释 隧道可以用于实现很多非常不一般而有趣的功能.但如果你的配置有问题,却也会发生可怕的错误.除非你确切地知道你在做什么,否则不要把缺省路由指向一个隧道设备.而且,隧道会增加协议开销,因为它需要一个额外的IP包头.一般应该是每个包增加20个字节,所以如果一个网络的MTU是1500字节的话,使用隧道技术后,实际的IP包长度最长只能有1480字节了.这倒不是什么原则性的问题,但如果

Linux的高级路由和流量控制:多播路由

Multicast-HOWTO已经很古老了(相对而言) ,而且不够准确甚至会因此而误21136.html">导读者. 在你开始进行多播路由之前,你需要重新配置你的Linux内核来支持你想实现的多播路由类型.这一步需要你来决定使用何种类型的多播路由.基本上有这么四种:DVMRP (RIP单播协议的多播版本),MOSPF(同理,只不过是OSPF),PIM-SM ("Protocol Independent Multicasting - Sparse Mode",协议无关多播

Linux的高级路由和流量控制:构建网桥以及用ARP代理构建伪网桥

网桥是一种安装在网络中,不需要任何后续配置的设备.网络交换器基本上就是一个多口网桥.也就是说网桥就是一个两口的交换器.而Linux能支持多个接口的网桥,成为一个真正的交换器. 网桥经常被用于改进那些http://www.aliyun.com/zixun/aggregation/7317.html">工作状态不佳但是又不能改造的网络.因为网桥是一个2层设备(IP下面的那一层),路由器和服务器意识不到它的存在.也就意味着你可以完全透明地阻挡或者修改数据包,甚至流量整形. 另一件好事是,假如一个