1.安装依赖组件
1 yum -y install gpm-devel pam-devel openssl-devel make gcc
2.安装EPEL
1 yum -y install epel-release
3.安装Strongswan
1 yum -y install strongswan
4.为Strongswan添加别名 ipsec
1 alias ipsec=‘strongswan‘
5.生成CA私钥,并使用此私钥自签名生成CA证书
1 cd /etc/strongswan && mkdir ca && cd ca 2 ipsec pki --gen --outform pem > ca.pem 3 ipsec pki --self --in ca.pem --dn "C=[国家名], O=[组织名], CN=[通用名]" --ca --lifetime 3652 --outform pem > ca.cert.pem
6.生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
1 ipsec pki --gen --outform pem > server.pem 2 ipsec pki --pub --in server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem --cakey ca.pem --dn "C=[国家名], O=[组织名], CN=[IP 或 domain]" --san="[IP 或 domain]" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
7.生成客户端私钥,然后从私钥中导出公钥,用CA证书签发客户端证书
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=[国家名], O=[组织名], CN=[通用名]" --outform pem > client.cert.pem
8.生成 pkcs12 证书,用来导入手机或电脑。此处需输入密码,此密码用于安装CA证书时使用
1 openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "[此处与第7步中CN同值]" -certfile ca.cert.pem -caname "[CA 证书别名]" -out client.cert.p12
9.strongswam导入证书
1 #cacerts /目录下放置CA证书 2 #certs /目录下放置服务器和客户端证书 3 #private /目录下放置服务器和客户端私钥 4 cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/ 5 cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/ 6 cp -r server.pem /etc/strongswan/ipsec.d/private/ 7 cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/ 8 cp -r client.pem /etc/strongswan/ipsec.d/private/
10.修改strongSwan各组件的通用配置
1 cat >/etc/strongswan/strongswan.conf <<EOF 2 charon { 3 load_modular = yes 4 duplicheck.enable = no #冗余检查关闭,以允许同时连接多个设备 5 compress = yes #传输启用压缩 6 plugins { 7 include strongswan.d/charon/*.conf 8 } 9 dns1 = 8.8.8.8 #给远程端指定DNS服务器 10 dns2 = 8.8.4.4 11 nbns1 = 8.8.8.8 #指定Windows的WINS服务器 12 nbns2 = 8.8.4.4 13 14 filelog { #配置strongSwan日志级别和路径 15 /var/log/strongswan.log { 16 time_format = %b %e %T 17 default = 5 # 日志最高等级5 18 append = no 19 flush_line = yes 20 } 21 } 22 } 23 24 include strongswan.d/*.conf 25 EOF
11.修改IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
1 cat >/etc/strongswan/ipsec.conf <<EOF 2 config setup 3 protostack=netkey 4 # strictcrlpolicy=yes 5 listen = [IP 或 domain] 6 uniqueids = never 7 8 # Add connections here. 9 10 # Sample VPN connections 11 12 #conn sample-self-signed 13 # leftsubnet=10.1.0.0/16 14 # leftcert=selfCert.der 15 # leftsendcert=never 16 # right=192.168.0.2 17 # rightsubnet=10.2.0.0/16 18 # rightcert=peerCert.der 19 # auto=start 20 21 #conn sample-with-ca-cert 22 # leftsubnet=10.1.0.0/16 23 # leftcert=myCert.pem 24 # right=192.168.0.2 25 # rightsubnet=10.2.0.0/16 26 # rightid="C=CH, O=Linux strongSwan CN=peer name" 27 # auto=start 28 29 conn %default #默认配置项,其他conn配置项都会调用此默认项 30 left=%any #left表示local,即本地端(服务器端)IP地址;%any是魔数字,表示任意地址 31 leftsubnet=0.0.0.0/0 #本地端网络,0.0.0.0/0为通配,表示所有IP网段 32 right=%any #right表示remote,即远程端(客户端)IP地址可为任意地址 33 rightsourceip=10.10.10.0/24 #分配给远程端的虚拟IP地址段,尽量避免使用常用私网地址段以免冲突 34 dpdaction=clear #dpd表示Dead Peer Detection,对端失效检测,clear表示对端失效时关闭连接 35 36 conn IKEv1-CERT-XAUTH #供老版本IOS使用。IKEv1,使用证书和XAUTH验证 37 keyexchange=ikev1 #密钥交换使用IKEv1 38 fragmentation=yes #允许分片 39 leftauth=pubkey #本地端使用公钥验证 40 leftcert=server.cert.pem #指定本地端证书 41 rightauth=pubkey #远程端使用公钥验证 42 rightauth2=xauth #远程端使用用户账号验证 43 rightcert=client.cert.pem #指定远程端证书 44 auto=add #auto定义strongSwan服务启动时该连接的行为,add是添加连接类型但不启动 45 46 conn IKEv1-PSK-XAUTH #供IOS, Android使用。IKEv1,使用预共享密钥和XAUTH验证 47 keyexchange=ikev1 #密钥交换使用IKEv1 48 leftauth=psk #本地端使用预共享密钥验证 49 rightauth=psk #远程端使用预共享密钥验证 50 rightauth2=xauth #远程端使用用户账号验证 51 auto=add #strongSwan启动时添加连接类型但不启动 52 aggressive=yes 53 54 conn IKEv2-CERT #供Windows 7+, Linux使用。IKEv2,使用证书验证 55 keyexchange=ikev2 #密钥交换使用IKEv2 56 leftauth=pubkey #本地端使用公钥验证 57 leftcert=server.cert.pem #指定本地端证书 58 rightauth=pubkey #远程端使用公钥验证 59 rightcert=client.cert.pem #指定远程端证书 60 auto=add #strongSwan启动时添加连接类型但不启动 61 62 conn IKEv2-EAP #供Windows 7+, IOS9+使用。IKEv2,EAP验证 63 keyexchange=ikev2 #密钥交换使用IKEv2 64 ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024! #第一阶段加密方式 65 esp=aes256-sha256,aes256-sha1,3des-sha1! #ESP的顺序与IKE一致 66 rekey=no #本地端对Windows远程端发出rekey请求会断开连接,所以需配置为no 67 leftauth=pubkey #本地端使用公钥验证 68 leftcert=server.cert.pem #指定本地端证书 69 leftsendcert=always #本地端总是发送证书 70 leftid=[IP 或 domain] #本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的--san参数对应 71 rightauth=eap-mschapv2 #远程端使用eap-mschapv2验证 72 rightsendcert=never #不要求远程端发送证书 73 eap_identity=%any #指定EAP验证身份,任意账户 74 fragmentation=yes #允许分片 75 auto=add #strongSwan启动时添加连接类型但不启动 76 EOF
12.定义各类密钥,例如:私钥、预共享密钥、用户账户和密码
1 cat >/etc/strongswan/ipsec.secrets <<EOF 2 : RSA server.pem #指定服务器的RSA私钥文件 3 : PSK "[xxxxxxx]" #配置预共享密钥 4 [username] : XAUTH "[password]" #配置XAUTH验证的用户名和密码,可配置多个用户账户 5 [username] : EAP "[password]" #配置EAP验证的用户名s和密码,可配置多个用户账户 6 EOF
13.设置ipsec.secrets文件权限
1 chmod 600 ipsec.secrets
14.设置网卡转发
1 cat >/etc/sysctl.conf <<EOF 2 net.ipv4.ip_forward = 1 3 EOF 4 sysctl -p
15.配置防火墙,本处使用的firewalld
1 yum install firewall firewall-config 2 firewall-cmd --permanent --add-service=ipsec 3 firewall-cmd --permanent --zone=public --add-masquerade 4 firewall-cmd --permanent --zone=public --add-masqueradefirewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=ipv4 source address=10.8.0.0/24 masquerade‘ 5 firewall-cmd --reload
16.配置服务启动
1 chkconfig strongswan on 2 chkconfig firewalld on 3 systemctl start strongswan
注意:
- 配置中的 C=[国家名], O=[组织名] 值都相同
- 第六步与第11步中 [IP 或 domain] 值相同
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { }