Centos 7.6 Strongswan的搭建及使用

一、服务器准备

这个不用我说了吧,我在阿里云购买的香港的服务器。

二、软件安装以及证书生成

1、安装必要的软件(如果你也是在阿里购买的yum源不用配置)

yum -y install gpm-devel pam-devel openssl-devel make gcc epel-release strongswan

设置别名

alias ipsec='strongswan'

进入软件目录

cd /etc/strongswan

2、生成证书(如果不懂就直接复制粘贴即可)

ipsec pki --gen --outform pem > ca.pem

ipsec pki --self --in ca.pem --dn "C=CN, O=VPN, CN=strongSwan CA" --ca --lifetime 3652 --outform pem > ca.cert.pem

这里C表示国家名,O表示组织名,CN为通用名。默认证书有效期为3年,这里配置3652天,即10年。

生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
ipsec pki命令可用来生成RSA密钥对,包含了私钥和公钥,公钥是在网络上传输的,而私钥是藏好用来和接收到的公钥配对的(因此私钥里也有整个公钥,用来配对)。

ipsec pki --gen --outform pem > server.pem

ipsec pki --pub --in server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem --cakey ca.pem --dn "C=CN, O=VPN, CN=*.*.*.*" --san="*.*.*.*" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem

上述的“*.*.*.*”替换为你的服务器公网ip。IOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址。除了上述要求,Windows 7 还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证)--flag serverAuth。非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU)--flag ikdeIntermediate。Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。所以这里C、O的值要跟第1步的一致,CN值及--san值是服务器公网地址或url,另外这里可以设置多个--san值。否则会出现错误 13801:IKE身份验证凭证不可接受。

ipsec pki --gen --outform pem > client.pem

ipsec pki --pub --in client.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem    --cakey ca.pem --dn "C=CN, O=VPN, CN=strongSwan Client" --outform pem > client.cert.pem

这里C、O的值要跟第1步的一致。
生成 pkcs12 证书,用来导入手机或电脑(输入一下命令会让你输入密码,两次输入一直即可,请记住这个密码,在客户端导入此证书时需输入该密码。)
openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "strongSwan Client" -certfile ca.cert.pem -caname "strongSwan CA" -out client.cert.p12

安装证书,把刚才生成的私钥和证书文件复制到目录/etc/strongswan/ipsec.d/下的指定目录下即可。

cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/ && 
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/ && 
cp -r server.pem /etc/strongswan/ipsec.d/private/ && 
cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/ && 
cp -r client.pem /etc/strongswan/ipsec.d/private/


cacerts/目录下放置CA证书,certs/目录下放置服务器和客户端证书,private/目录下放置服务器和客户端私钥

三、软件配置

strongSwan包含3个配置文件,在目录/etc/strongswan/下
strongswan.conf strongSwan各组件的通用配置
ipsec.conf IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
ipsec.secrets 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码

1、配置 strongswan.conf

(该配置文件可以直接覆盖原有文件)

vi /etc/strongswan/strongswan.conf

# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files

charon {
        load_modular = yes
        duplicheck{               #冗余检查关闭,以允许同时连接多个设备
                enable = no       
        }                  
        compress = yes                                  #传输启用压缩
        plugins {
                include strongswan.d/charon/*.conf
        }
        dns1 = 8.8.8.8                                  #给远程端指定DNS服务器
        dns2 = 8.8.4.4
        nbns1 = 8.8.8.8                                 #指定Windows的WINS服务器
        nbns2 = 8.8.4.4

        filelog {                                       #配置strongSwan日志级别和路径
                /var/log/strongswanlog {                #log前加.会报错
                   time_format = %b %e %T
                   default = 2
                   append = no
                   flush_line = yes
                }
        }
}

include strongswan.d/*.conf

2、 配置ipsec.conf

(请注意该配置文件中包含公网ip配置请注意修改)

vi /etc/strongswan/ipsec.conf


# ipsec.conf - strongSwan IPsec configuration file

config setup
          uniqueids=never               #关闭ID唯一性,即允许多个客户端使用同一个证书,多设备同时在线

conn %default                           #默认配置项,其他conn配置项都会调用此默认项
    left=%any                           #left表示local,即本地端(服务器端)IP地址;%any是魔数字,表示任意地址
    leftsubnet=0.0.0.0/0                #本地端网络,0.0.0.0/0为通配,表示所有IP网段
    right=%any                          #right表示remote,即远程端(客户端)IP地址可为任意地址
    rightsourceip=10.10.10.0/24         #分配给远程端的虚拟IP地址段,尽量避免使用常用私网地址段以免冲突
    dpdaction=clear                     #dpd表示Dead Peer Detection,对端失效检测,clear表示对端失效时关闭连接

conn IKEv1-CERT-XAUTH                   #供老版本IOS使用。IKEv1,使用证书和XAUTH验证
    keyexchange=ikev1                   #密钥交换使用IKEv1
    fragmentation=yes                   #允许分片
    leftauth=pubkey                     #本地端使用公钥验证
    leftcert=server.cert.pem            #指定本地端证书
    rightauth=pubkey                    #远程端使用公钥验证
    rightauth2=xauth                    #远程端使用用户账号验证
    rightcert=client.cert.pem           #指定远程端证书
    auto=add                            #auto定义strongSwan服务启动时该连接的行为,add是添加连接类型但不启动

conn IKEv1-PSK-XAUTH                    #供IOS, Android使用。IKEv1,使用预共享密钥和XAUTH验证
    keyexchange=ikev1                   #密钥交换使用IKEv1
    leftauth=psk                        #本地端使用预共享密钥验证
    rightauth=psk                       #远程端使用预共享密钥验证
    rightauth2=xauth                    #远程端使用用户账号验证
    auto=add                            #strongSwan启动时添加连接类型但不启动

conn IKEv2-CERT                         #供Windows 7+, Linux使用。IKEv2,使用证书验证
    keyexchange=ikev2                   #密钥交换使用IKEv2
    leftauth=pubkey                     #本地端使用公钥验证
    leftcert=server.cert.pem            #指定本地端证书
    rightauth=pubkey                    #远程端使用公钥验证
    rightcert=client.cert.pem           #指定远程端证书
    auto=add                            #strongSwan启动时添加连接类型但不启动

conn IKEv2-EAP                          #供Windows 7+, IOS9+使用。IKEv2,EAP验证
    keyexchange=ikev2                   #密钥交换使用IKEv2
    ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!                #第一阶段加密方式
    esp=aes256-sha256,3des-sha1,aes256-sha1!                                           #ESP的顺序与IKE一致
    rekey=no                            #本地端对Windows远程端发出rekey请求会断开连接,所以需配置为no
    leftauth=pubkey                     #本地端使用公钥验证
    leftcert=server.cert.pem            #指定本地端证书
    leftsendcert=always                 #本地端总是发送证书
    leftid=*.*.*.*              #本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的--san参数对应
    rightauth=eap-mschapv2              #远程端使用eap-mschapv2验证
    rightsendcert=never                 #不要求远程端发送证书
    eap_identity=%any                   #指定EAP验证身份,任意账户
    fragmentation=yes                   #允许分片
    auto=add                            #strongSwan启动时添加连接类型但不启动

3、配置ipsec.secrets

(如果文件不存在就自己生成该文件)

vi /etc/strongswan/ipsec.secrets

: RSA server.pem              #指定服务器的RSA私钥文件
: PSK "psktest"                   #配置预共享密钥为:psktest
test1 : XAUTH "123456"        #配置XAUTH验证的用户名test1和密码123456,可配置多个用户账户
test2 : EAP "123456"          #配置EAP验证的用户名test2和密码123456,可配置多个用户账户

四、防火墙配置

1、开启内核转发

sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

如果不成功就执行

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

执行

sysctl -p 

看下加载情况

2、修改防火墙规则

(配置文件中的ip与ipsec.conf配置文件中的ip要保持一致)

vi /etc/firewalld/zones/public.xml


"1.0" encoding="utf-8"?>

  Public</short>
  For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  "eth0"/>
  "ssh"/>
  "dhcpv6-client"/>
  "ipsec"/>
  "tcp" port="1723"/>
  "tcp" port="47"/>
    "tcp" port="1701"/>
    "tcp" port="22"/>
    />
    "ipv4">
     "10.10.10.0/24"/>
      />                                                                                                                                                                                    
    </rule>
    "ipv4">
      "10.10.10.0/24"/>
      -port to-port="4500" protocol="udp" port="4500"/>
    </rule>
    "ipv4">
      "10.10.10.0/24"/>
     -port to-port="500" protocol="udp" port="500"/>
   </rule>
  />
</zone>

3、启动软件

systemctl enable firewalld && systemctl start firewalld && systemctl enable strongswan && systemctl start strongswan

五、修改服务器安全组规则

登录阿里云管理控制台- -> 云服务器ECS- ->网络和安全- ->安全组- ->添加安全组规则:

授权策略:允许
协议类型:自定义UDP
端口范围:500/500
授权类型:地址段访问
授权对象:0.0.0.0/0
优先级:100
描述:随便填

授权策略:允许
协议类型:自定义UDP
端口范围:4500/4500
授权类型:地址段访问
授权对象:0.0.0.0/0
优先级:100
描述:随便填

六、连接

打开网络偏好设置

Centos 7.6 Strongswan的搭建及使用_第1张图片

新建连接,选择

Centos 7.6 Strongswan的搭建及使用_第2张图片

类型选择Cisco/IPSec

Centos 7.6 Strongswan的搭建及使用_第3张图片

填写服务器地址,XAUTH类型的帐号的密码,

Centos 7.6 Strongswan的搭建及使用_第4张图片
并在认证设置中填入配置好的密钥

Centos 7.6 Strongswan的搭建及使用_第5张图片

点击连接,测试成功。

Centos 7.6 Strongswan的搭建及使用_第6张图片

七、测试

浏览器输入https://www.google.com/,看到以下页面,成功!
Centos 7.6 Strongswan的搭建及使用_第7张图片

你可能感兴趣的:(linux,linux,运维,服务器,centos)