用Openswan组建Linux IPSec ---第一部分

2023-10-27

用Openswan组建Linux IPSec

                                               ---Linux下建立IPSEC的vpn第一部分


1.
概述
2.
安装Openswan
3.认证和配置
    3.1 RSAsig认证方式的配置
    3.2 x.509证书认证的配置
    3.3 RoadWarrior模式的配置
5.Windows客户端的配置
*****
1.概述
    LInux上的VPN支持主要有三种:
    
    1)IPSec 's VPN 其主要代表有 FreeS/WAN、KAME

    IPSec在Linux上支持主要有两个主要的分类,一为FreeS/WAN,现在已经停止开发,其分裂为两个项目,Openswan与 Strongswan。其可以用自身的IPsec内核堆栈(Kernel stack),称为KLIPS,也可以用2.6内核中的堆栈代码(下面我们称其为26sec),可以说是非常的灵活。还有就是来自BSD世界的KAME。 KAME只能用内核堆栈。

    IPSec差不多是最老的VPN标准了,她的依然很安全,当然是在配置好以后。言下之意,她的配置比较麻烦。本文下面将做说明。

    2)SSL-Based VPN 其主要代表有 OpenVPN

    SSL只要跑在应用层,所以理所当然的配置简单,只要机子能跑TCP或UDP就行,也可以穿过大多的防火墙。

    3)PPTP-Based VPN 有(PoPTop)

    PoPTop可以说是PPTP在Linux下的实现。不过,IPSec上跑L2TP更安全。

2.安装Openswan
    
    因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。其相比FreeS/WAN有个好处,如果使用 26sec 的时候,Openswan不用打补丁,就可以用nat。
    因为IPSec工作在网络层,所以需要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用2.6自带的实现代码。同时本文使用RHEL AS4.0作为实验系统,在RHEL AS4.0上安装。

http://www.openswan.org/code下载软件包,然后按照包中的说明安装。由于我们使用26sec,所以只要make programs;make install就可以搞定。值得注意的是,现在的Openswan已经内建些个好用的补丁,比如x.509和NAT Traversal的支持,使用起来非常的方便。

#tar –zxvf openswan-2.4.9.tar.gz
    #
 make KERNELSRC=/lib/modules/`uname -r`/build module minstall

 make programs install


    
你也可以用
    #ipsec verify
来检验你的安装

3.认证和配置

一、 RSA Signature(RSA数字签名)认证的配制

    Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys或x.509证书方式。RSA Signature比较简单,我先介绍下所要使用的命令

    生成一个新的RSA密钥对
    #ipsec newhostkey  --output /etc/ipsec.secert
    按left或right格式生成RSA Sig
    #ipsec showhostkey --left(或--right)

    知道了上面的命令,我们就可以配置一个net-to-net,就是网关对网关的通讯。所在的Linux主机为通讯的网关,作为其子网的出口,对于子网的用户来所是透明的,远程的子网在通讯后可以像自己的局域网一样的访问。
    
    本文使用VMWare架设起一个四台虚拟Linux主机来进行试验。因为要在不同的机子上进行配置,所以请读者认清主机名。

    172.16.40.18(right子网客户机,计算机名RA
    <->
    192.168.32.30(right网关主机,计算机名VPN,同时eth1配置为172.16.40.254)
    <->
    192.168.32.29(left网关主机,计算机名ora92,同时eth1配置为172.16.50.254)
    <->
    172.16.50.18(left子网客户机,计算机名RB)

    两个网关主机当然要安装好Openswan。

    然后我们运行下面的命令

    //ora92----left    
    #ipsec newhostkey --output /etc/ipsec.secert
    #ipsec showhostkey --left >> /etc/ipsec.conf
    #vi /etc/ipsec.conf                          //编辑ipsec.conf配置文件
    #scp /etc/ipsec.conf root@right_GW_ipaddress:/etc/ipsec.conf

 //把ipsec.conf拷贝到right网关,目的是为了让right得到left的rsasig。


    //vpn----right
    #ipsec newhostkey  --output /etc/ipsec.secert
    #ipsec showhostkey   --right >> /etc/ipsec.conf
    #vi /etc/ipsec.conf
    #scp /etc/ipsec.conf  root@left_GW_ipadress:/etc/ipsec.conf


    
然后分别从前启动ipsec服务
    #ipsec setup restart //这个因为你的系统不同点不同

    这里的编辑ipsec.conf应该为(配置文件中的#为注释,和shell中不同)
version 2.0     # conforms to second version of ipsec.conf specification

# basic configuration

config setup

        nat_traversal=yes

        nhelpers=0

include /etc/ipsec.d/examples/no_oe.conf

conn linux-to-linux    #conn必须定行写

        left=192.168.32.29

        leftsubnet=172.16.50.0/24

        leftid=@ora92

        # RSA 2192 bits   ora92   Thu Jul 19 13:52:56 2007       leftrsasigkey=0sAQN8mHncm+6AV77BxYsCx/IuYbz6cpsAnXdJGEDkDohsUQs9U/uyZ7ru0DIq4PkjQ/D/kS9VXyc1ZHv9WmwNzTnO+cVFMuC3Ld4epFpb4w+5HzEhpPG1U63o0H+8z4OqJg9a7yE9z93EJnLcciyyRuCpE4voNPUIuuQKpOjK641OfQu6zFZqJhCGnFr+IL80WTykN/ZbKVFLe+Dao5EGXpqafnTSiXq2xMgpo5uMxOogjsdjRu8+H0Qw2U2FGN2kgin4P/qbdQY9CQSgs8SMo3aHF3xrdPX9bDOmZYZJrl0c3uELtElNrTouGig4c3amNMpUSigXisitbqy5SNGQnOLZlJzlPCVkR8GofWOvaNEBSuAH

        right=192.168.32.30

        rightid=@vpn

        rightsubnet=172.16.40.0/24

        # RSA 2192 bits   vpn   Thu Jul 19 14:01:03 2007    rightrsasigkey=0sAQOyv/cshJnUxULJtaiG+3aDeUIuzbe6c0eVmcEp4l/GK/Qd8yRD/PWfqBsJCP+Bg3PieoEM+GwFXE2GE9h8pPzXwiMfxBTwTx3RHxYK/6mA9sxGJerCD9Ro1IgpRfQFzVio1UBukN5YX6rnrfvbBDNwzidL8JHyNtKXMbw56U7qsXxhkVsF0Xwk5gkH5ONj571xbPF+ckO4ATxMFVQG1VeWyi5JMYt58vUY1ipVRTg2YMcwZR+tPAIP/9Vr2XoUF5fzQ0WEQrU6XPXrGta/Ma0F5yfAjMbBXp87tmLQL88x2V5jC7GikSS8rReuRP9bv9OC879jVrvy98ExMEW+YdsCSrIKOqqx6D+rINCnXUjS0E5F

          auto=start

然后在任意一方网关主机运行
    ipsec auto --up net-to-net
,这个时候,两个客户机之间应该可以互相ping的通,就像在一个内网一样。
    比如在RA上可以
    $ping 172.16.50.18
    在ping的过程中,在任意一个网关上用tcpdump嗅探
    #tcpdump -i eth0
    可以看到这样的包
    IP 172.16.40.18 > 172.16.50.18:icmp 64:echo request seq 10
    IP 192.168.32.29 > 192.168.32.30: ESP(spi=0xeb73b78b,sed=0xa)
    IP 172.16.50.18 > 172.16.40.18: ESP(spi=0x1601e0bd,sed=0xb)
    可以看到两个网关已经用ESP在通讯,说明成功。

另外,这一行
    include /etc/ipsec.d/examples/no_oe.conf
意为关闭Opportunistic Encryption在你不知道她到底做了什么之前,还是关掉她为好,打开no_oe.conf文件,发现其内容如下,我们将在本文的第五部分讨论这个话题。

conn block
auto=ignore

conn private
auto=ignore

conn private-or-clear
auto=ignore

conn clear-or-private
auto=ignore

conn clear
auto=ignore

conn packetdefault
auto=ignore

二、 x.509证书认证的配置

    x.509证书方式当然更灵活,要是VPN的客户比较多,总不能,每个都记住长长的rsasig吧。使用x.509证书认证,我们首先需要装上openssl(现在的Linux基本自带,没有的www.openssl.org下一个装上)。

    1)然后,找到openssl.cnf文件,这个文件保存着对openssl证书生成的默认值,她的位置一般为:
    Debian: /etc/ssl/openssl.cnf
    RedHat: /usr/share/ssl/openssl.cnf
    用编辑器打开,变量名目繁多,比较有用的有
    "default_days",证书失效的天数,默认一般为365天,改为3650,这样十年才过期:)。
    "default_bits",密钥长度,默认为1024,你可以改为2048,更安全,当然速度也更慢……
    "req_distinguished_name",默认的信息设置,如果你和我一样闲每次去生成密钥的时候去填的麻烦,就改之。

    2)建一个目录来放你的CA,我们这里用/root/ca,记的把他的权限设置为700,你不希望其他用户可以看到你的私钥吧。

    3)找到"CA.sh"脚本的位置,在不同系统上稍有不同
    Debian: /usr/lib/ssl/misc/CA.sh
    RedHat: /usr/share/ssl/misc/CA
    编辑她,把DAYS="-days 365"的365改成你希望的数值,注意要比openssl.cnf中的"default_days"要大,当时也不要太大,一般为15年到20年就好了。

    4)生成证书
    ~/ca$/usr/lib/ssl/misc/CA.sh -newca ;生成一个待签名的根证书,用她来给其他证书进行签名认证。默认生成在demoCA目录下的cacert.pem文件(在openssl.cnf中的 CA_default子段设置)下。输入的密码为用来生成其他证书的密码。-sign的时候用。


    ~/ca$openssl ca -gencrl -out crl.pem 
生成一个与根证书相对应的crl文件
    然后开始生成给主机用的证书
    ~/ca$/usr/lib/ssl/misc/CA.sh -newreq 生成待签名认证的证书,默认名字为newreq.pem,输入的密码用在填些/etc/ipsec.secrets中。
    ~/ca$/usr/lib/ssl/misc/CA.sh -sign 对证书进行签名认证,默认名字为newcert.pem
    ~/ca$/usr/lib/ssl/misc/CA.sh -verify 认证一下
    然后重命名文件
    ~ca$mv newcert.pem ora92.pem
    ~ca$mv newreq.pem ora92.key //别搞反了,小的那个文件是key:),另外如果要生成的主机证书,填入的信息相同可能出错
    用同样的方法在right――vpn主机上生成vpn.pem和vpn.key文件。这样我们就有了同样的根证书生成的两个证书文件。
    把文件拷贝到相应的位置:
    5)在Left主机主机上
    ora92:~/ca#cp ora92.key /etc/ipsec.d/private
    ora92:~/ca#cp ora92.pem /etc/ipsec.d/certs
    ora92:~/ca#cp demoCA/cacert.pem /etc/ipsec.d/cacerts
    ora92:~/ca#cp crl.pem /etc/ipsec.d/crls/crl.pem
    用安全的渠道(scp或软盘,别用ftp)把ora92.pem文件拷贝到right上
    ora92:~/ca#scp /etc/ipsec.d/certs/ora92.pem   root@192.168.32.30:/etc/ipsec.d/certs/ora92.pem


  
 6)在right主机主机上
    也拷贝到正确的地方
    vpn:~/ca#cp vpn.key /etc/ipsec.d/private
    vpn:~/ca#cp vpn.pem /etc/ipsec.d/certs
    vpn:~/ca#cp crl.pem /etc/ipsec.d/crls
    vpn:~/ca#cp cacert.pem /etc/ipsec.d/cacerts/cacert.pem
    用安全的渠道(scp或软盘,别用ftp)把vpn.pem文件拷贝到left上
    vpn:~/ca#scp /etc/ipsec.d/certs/vpn.pem root@192.168.32.29:/etc/ipsec.d/certs/vpn.pem

   7) 配置ipsec
  left上:首先是/etc/ipsec.secrets加上
    : RSA /etc/ipsec.d/private/ora92.key "password"
    password就是生成主机密钥的时候输入的密码

 

Right上:首先是/etc/ipsec.secrets加上
    : RSA /etc/ipsec.d/private/vpn.key "password"
    password就是生成主机密钥的时候输入的密码

    这里有几个密码要搞清楚,在生成根证书的时候输入密码是用来生成其他证书的,CA.sh -sign的时候要填入,ipsec.secrets填入的密码是CA.sh -newreq时候输入的密码。

    然后当然就是/etc/ipsec.conf在本例子中的ipsec.conf分别为

#Left(ora92)
version 2.0

config setup
    interfaces=%defaultroute
    nat_traversal=yes
conn %default
    authby=rsasig
    compress=yes
    leftrsasigkey=%cert
    rightrsasigkey=%cert
    keyingtries=1
    disablearrivalcheck=no
include /etc/ipsec.d/examples/no_oe.conf
conn net-to-net
    left=192.168.32.29

leftsubnet=172.16.50.0/24
    leftcert=ora92.pem
    right=192.168.32.30

rightcert=vpn.pem
    rightsubnet=172.16.40.0/24
    pfs=yes
    auto=add

#Right(vpn)
version 2.0
config setup
    interfaces=%defaultroute
    nat_traversal=yes
conn %default
    authby=rsasig
    compress=yes
    leftrsasigkey=%cert
    rightrsasigkey=%cert
    keyingtries=1
    disablearrivalcheck=no
include /etc/ipsec.d/examples/no_oe.conf
conn net-to-net
    left=192.168.32.29
    leftsubnet=172.16.50.0/24
    leftcert=ora92.pem
    right=192.168.32.30
    rightsubnet=172.16.40.0/24
    rightcert=vpn.pem
    pfs=yes
    auto=add

    
然后分别重新启动IPSec服务
    #ipsec setup restart
    在right上启动连接
    #ipsec auto --up net-to-net  
    如果一切正确,两个子网之间就可以互相通讯了。

三、RoadWarrior模式的配置
    上面我们做的是网关对网关的配置,我们在应用中还有一种情况,员工带着比较本出差或在家,需要用IPSec连接到公司的网络。这个就是RoadWarrior模式。


    
我们回到1)中RSA Keys配置的例子,在两台主机上添加这样的配置字段

#RoadWarrior,Road--Client的机子,比如到处带着跑的笔记本,我们这里用right
conn road
    left=192.168.32.30 #如果是动态ip地址,可以填上%defaultroute
    leftnexthop=%defaultroute
    leftid=@vpn
    leftrsasigkey=0sAQ... #本机的RSA Key
    right=192.168.32.29
    rightsubnet=172.16.50.0/24
    rightid=@ora92
    rightrsasigkey=0sAQO... #远程机子的RSA Key
    auto=add                      
############################
#Host--Server 主机,我们这里用ora92
conn road
    left=192.168.32.29
    leftid=@ora92
    leftsubnet=172.16.50.0/24
    leftrsasigkey=0sAQ...
    rightnexthop=%defaultroute
    right=%any #不知道要传入的连接,所以用%any
    rightid=@vpn
    rightrsasigkey=0sAQ...
    auto=add

可以看出,RoadWarrior模式和Net-to-Net模式配置的区别,关键就是在于net-to-net模式Left和Right是相同的,通讯的主机处于固定的位置上,而RoadWarrior配置,Left就是自己(Local),Right就是远程主机(Remote)。所以看上去,两个的 Left和Right值是相反的。这个是配置的关键。

然后在RoadWarrior的主机上运行
    ipsec auto --up road
更改配置文件后记的要#ipsec setup restart重启Openswan Pluto。


接着就可以在right--vpn主机上ping到ora92下的内网了
    right$ping 172.16.50.18
同样的可以在ora92上
    ora92#tcpdump -i eth0
看到ESP包的交换

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Openswan组建Linux IPSec ---第一部分 的相关文章

随机推荐

  • requests介绍_2.02

    requests在本文件中的1 26中有涉及到 一 什么是requests库 requests 是用于http请求的模块 比urllib更加方便 二 requests主要功能 1 requests request 先看一下requests库
  • samba访问window共享 解决中文乱码

    samba访问window共享 解决中文乱码 File systems gt Native language support gt lt gt Simplified Chinese charset CP936 GB2312 lt gt NL
  • LL(1)分析法(一) ——文法预处理以及FIRST集FOLLOW集求解(编译原理)

    LL 1 分析法 预期达到目标 对给定文法 求出各个非终结符的FIRST集 FOLLOW集 根据给定文法建立LL 1 分析表 对输入的表达式符号串能够给出分析过程输出分析结果 LL 1 预测分析程序整体流程 一些初始设定 name sour
  • SM2算法原理及实现

    2019独角兽企业重金招聘Python工程师标准 gt gt gt RSA算法的危机在于其纯在压指数算法 对ECC算法而言一般没有亚指数攻击算法 SM2椭圆曲线公钥密码算法 我国自主知识产权的商用密码算法 是ECC Elliptic Cur
  • 解决jar包冲突

    Jar包冲突是老生常谈的问题 几乎每一个Java程序猿都不可避免地遇到过 并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致 可采用依赖排除 依赖管理等常规方式来尝试解决该问题 但这些方式真
  • databinding include 控件空指针_某大学C语言期末复习题及答案-1:数组和指针

    闲来无事 做做别人家的期末试题 没有答案 自己做的 可能有错 欢迎指正 单选题 include void fun int s int n1 int n2 int i j t i n1 j n2 while i 程序的运行结果是 单选题 单选
  • 大数据技术原理与应用(第八章HBase测试)

    一 选择题 1 不是HBASE的特点 A 大 B 稀疏 C 面向列 D 面向行 2 列族是 的集合 A 列 B qualifier C RowKey D 值 3 是HBASE存储的核心 A Storage B Store C StoreFi
  • Python2 ValueError: chr() arg not in range(256)?

    代码 for i in range 0x4E00 0x4E10 print chr i 错误提示 ValueError chr arg not in range 256 原因 因为Python2问题编码问题导致 解决办法 使用unichr代
  • #Flutter 裁剪布局之 ClipRect、ClipRRect、ClipOval、ClipPath、CustomClipper

    Flutter 裁剪布局之 ClipRect ClipRRect ClipOval ClipPath CustomClipper 文章目录 裁剪布局 ClipRect ClipRRect ClipOval ClipPath 及 Custom
  • 特征工程(四)HashingVectorizer

    将原始数据的word特征数字化为hash特征 并将结果保存到本地 article特征可做类似处理 import pandas as pd from sklearn feature extraction text import Hashing
  • SDNE(Structural Deep Network Embedding )的原理,实现与应用

    文章目录 SDNE基本思想 二阶相似度 无监督 一阶相似度 有监督 核心代码 库实现 应用 阿里凑单算法 SDNE基本思想 SDNE Structural Deep Network Embedding 主要目标是保持网络的一阶相似性和二阶相
  • Unity小地图的放大缩小

    继续承接上篇内容 本篇讲述小地图的放大和缩小功能 如下图 点击 按钮可以放大地图 点击 按钮可以缩小地图 更多内容关注 unity风雨路 上一篇中我们已经讲过小地图的UI结构图 此处不再赘述 如图 我们只需在此基础上给 符号等image图全
  • Linux下C++定时器的使用

    LInux下C 定时器的使用 include
  • 图像分类之花卉图像分类(一)数据增强

    网上有很多图像分类的代码 有很多是必须要在GPU上面才能跑的 因为我想在自己的电脑跑 所以很多都是不能用的 而且说实话很多对我这个小白来说 都很难看懂 所以我找了一个就是之间用CNN写的神经卷积模型用来进行花卉识别 其中主要参考了以下的博主
  • Stable Diffusion 安装

    一 安装 GPU 驱动 CPU 环境跳过这一步 手动安装GPU驱动参考 https docs nvidia com datacenter tesla tesla installation notes index html spm a2c4g
  • 单元测试中测试用例的设计示例

    对于多个输入的被测试模块 可以通过正交排列和正交表选取具有代表性的测试用例 模块代码如下 int mySum int a int b int c int aa bb cc if a lt 0 aa 0 else aa 1 if b lt 1
  • id 怎么获取jira 评论_如何获取抖音、快手、微视等短视频快速吸粉

    很多朋友不知道如何获取短视频平台ID 下行我来详细为大家讲解一下 如果看了还不懂的朋友 或者需要在以下快速出效果的朋友可以 喂aabb ccnn 就好了 S粉 你懂的 1 抖音 点赞时如何正确获取抖音ID 虽然说抖音刷粉丝可以使用用户ID来
  • Spark Core笔记

    Spark Core笔记 Spark 一 What is Spark Apache Spark is a fast and general engine for large scale data processing 二 Spark框架优势
  • 一道华为的笔试题

    刚做了一道华为的笔试题 不是很理想 因为审题审了将近半小时 题目写的有点弯弯绕绕的 读了半天才读懂 现把题目附上 希望能给大家一点帮助 博主很不服气 感觉是败在了语文的阅读理解上 1 题目 对一个数据a进行分类 分类方法为 此数据a 四个字
  • 用Openswan组建Linux IPSec ---第一部分

    用Openswan组建Linux IPSec Linux下建立IPSEC的vpn第一部分 1 概述 2 安装Openswan 3 认证和配置 3 1 RSAsig认证方式的配置 3 2 x 509证书认证的配置 3 3 RoadWarrio