欢迎光临
我们一直在努力

【实测】CentOS 6.X 系统上安装strongSwan搭建IPsec VPN服务器–手工版

安装strongSwan
先升级操作系统CentOS至最新版本,我这里比较喜欢用CentOS 6.x的版本。
yum -y update
shutdown -r now
#升级完后需要重启服务器。
查看CentOS版本号
uname -a
cat /etc/issue
#或者查看版本
查看SELinux状态
sestatus
SELinux status: disabled
#如果提示为enabled 就要修改
vi /etc/selinux/config
#将SELINUX=enforcing改为SELINUX=disabled (需要重启机器)
#临时关闭(不用重启机器):
setenforce 0
查看当前网卡配置
ifconfig
#注意查看外网 很显然我这里是eth0 就是外网卡 (按照个人而定)
#注意很多阿里云或者aws的同学用的是动态弹性IP就要在控制面板里查看
eth0 Link encap:Ethernet HWaddr x:xx:xx:xx:xxxx
inet addr:52.31.x.x Bcast:52.31.x.x Mask:255.x.x.x
inet6 addr: xxxx::xxx:xxxx:xxxx:xxxx/xx Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:69019 errors:0 dropped:0 overruns:0 frame:0
TX packets:62158 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34493609 (32.8 MiB) TX bytes:29425870 (28.0 MiB)
Interrupt:247
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
安装strongSwan的运行依赖环境
yum -y install gpm-devel pam-devel openssl-devel make gcc wget
下载源程序编译安装(个人推荐直接官网下载编译安装)
cd /tmp
#按照个人喜好选择一个文件夹
wget http://download.strongswan.org/strongswan.tar.gz
#下载strongswan
解压
tar zxvf strongswan.tar.gz
cd strongswan-5.5.2/
#我安装的时候已经是5.5.2版本了
编译安装
./configure –prefix=/usr –sysconfdir=/etc/strongswan –enable-eap-identity –enable-eap-md5 \
          –enable-eap-mschapv2 –enable-eap-tls –enable-eap-ttls –enable-eap-peap \
          –enable-eap-tnc –enable-eap-dynamic –enable-eap-radius –enable-xauth-eap \
          –enable-xauth-pam –enable-dhcp –enable-openssl –enable-addrblock \
          –enable-unity –enable-certexpire –enable-radattr –enable-tools \
          –enable-openssl –disable-gmp
make
make install
配置私钥和证书
1.生成CA私钥,并使用此私钥自签名生成CA证书
cd ..
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年。
2.生成服务器私钥,然后从私钥中导出公钥,用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=52.31.x.x” –san=”52.31.x.x” \
             –flag serverAuth –flag ikeIntermediate –outform pem > server.cert.pem
  • 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身份验证凭证不可接受。
3.生成客户端私钥,然后从私钥中导出公钥,用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=CN, O=VPN, CN=strongSwan Client” –outform pem > client.cert.pem
#这里C、O的值要跟第1步的一致。
4.生成 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
#Export Password: xxxx 生成时需设置密码,例如:xxxx,请记住这个密码,在客户端导入此证书时需输入该密码。
安装证书
把刚才生成的私钥和证书文件复制到目录/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
strongSwan包含3个配置文件,在目录/etc/strongswan/下。
strongswan.conf            strongSwan各组件的通用配置
ipsec.conf                     IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
ipsec.secrets                 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码
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/strongswan.log {
                   time_format = %b %e %T
                   default = 2
                   append = no
                   flush_line = yes
                }
        }
}
include strongswan.d/*.conf
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=52.31.x.x
#本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的–san参数对应
rightauth=eap-mschapv2 #远程端使用eap-mschapv2验证
rightsendcert=never #不要求远程端发送证书
eap_identity=%any #指定EAP验证身份,任意账户
fragmentation=yes #允许分片
auto=add #strongSwan启动时添加连接类型但不启动
#注意修改 leftid=52.31.x.x 为外网地址
vi /etc/strongswan/ipsec.secrets
: RSA server.pem                        #指定服务器的RSA私钥文件
: PSK “xxx”             #配置预共享密钥为:xxx
xx : XAUTH “xxx”
#配置XAUTH验证的用户名xx和密码xxx,可配置多个用户账户
xx : EAP “xxx”                #配置EAP验证的用户名xx和密码xxx,可配置多个用户账户
CentOS配置转发
sysctl -w net.ipv4.ip_forward=1
sed -i ‘s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g’ /etc/sysctl.conf
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
#以上3中方法都可以
#目的就是将 net.ipv4.ip_forward=0 改为 1 第三种最保险 因为可能有些CentOS上这条是 # 注释掉的
# 如果是注释掉的 就将 # 删除就可以了
sysctl -p
#使之生效
CentOS配置iptables防火墙,允许UDP500,UDP4500,并配置转发和NAT规则。
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j SNAT –to-source 52.31.x.x
service iptables save
#52.31.x.x 修改为实际公网地址 eth0 修改为实际出口 端口
vi /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [190:25985]
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -p udp -m state –state NEW -m udp –dport 500 -j ACCEPT
-A INPUT -p udp -m state –state NEW -m udp –dport 4500 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -s 10.10.10.0/24 -j ACCEPT
-A FORWARD -d 10.10.10.0/24 -j ACCEPT
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j SNAT –to-source 52.31.x.x
COMMIT
配置完成后,重启iptables服务,使新规则生效。
service iptables restart
service strongswan start
#或者  ipsec start
查看strongswan服务状态
service strongswan status
#或者  ipsec status

赞(0)
未经允许不得转载:老徐小屋老徐小屋 » 【实测】CentOS 6.X 系统上安装strongSwan搭建IPsec VPN服务器–手工版
分享到: 更多 (0)