Linux下使用Strongswan和nginx搭建IPSec VPN

DevOpSec
• 阅读 487

来源: DevOpSec公众号 作者: DevOpSec

背景及需求

在多机房之间联通或机房和办公区之间异构网络网络联通时,考虑到数据和网络安全,我们通常会搭建IPSec VPNsite-to-site通信。

下面我们来看一下需求场景:母公司自建IDC有网络设备可以搭建IPsec VPN隧道,子公司公有云没有网络设备

  1. 母公司访问子公司A服务http 18080端口

  2. 母公司访问子公司的B服务3306端口

方案

网络安全上:子公司侧部署一台Linux服务器,安装开源软件Strongswan,和母公司配置Site-To-Site IPSec VPN功能。

网络流量管控和数据审计上:使用nginx做流量控制转发,对流量做审计

架构

Linux下使用Strongswan和nginx搭建IPSec VPN

  1. Strongswannginx 部署在同一台机器上

  2. 母公司和子公司公网ip相互限制只允许对方ip访问

  3. 只暴露linux服务器ip的803306端口给母公司方案

技术栈

母公司网络设备:H3C FW

子公司: centos 7.9 VPN软件 Strongswan 5.5.3 nginx 1.20.1

安装

子公司侧,安装vpn软件和nginx

Strongswan 部署

yum install epel-release
yum install strongswan

nginx 部署

yum install nginx

配置

子公司侧的配置

Strongswan的配置

链接配置

cat /etc/strongswan/ipsec.conf

conn h3c
       keyexchange=ikev1                                  #使用Isakmp ikev1
       auto=start                                                #自动启动该连接
       aggressive=yes                                         #IPSEC 主动模式
       #本端信息
       left=公网ip A                              #Linux系统公网接口IP(公有云私有 ip 如 ucloud)
       leftid=公网ip A                                #使用IP地址作为IPSEC设备ID
       leftsubnet=10.10.10.10/32             #Linux站点侧要保护的子网,可以是该系统的接口IP, (对端能访问的 ip)
       #对端信息
       right=公网ip B                                  #防火墙公网接口IP
       rightid=公网ip B                                #使用IP地址作为IPSEC设备ID
       rightsubnet=192.168.1.0/24               #防火墙侧要保护的子网
       leftauth=psk                                             #认证方式为预共享密钥
       rightauth=psk                                   #认证方式为预共享密钥
       type=tunnel                                             #IPSEC模式为隧道模式
       ike=aes128-md5-modp2048               #IPSEC 第一阶段密钥参数
       esp=aes128-sha1                                      #IPSEC 第二阶段加密参数
第一阶段秘钥

cat /etc/strongswan/ipsec.secrets

##本端IP  对端IP : PSK 预共享密钥
公网ipB  公网ipB : PSK 90bc773ec2781568690648a30255639b
启动strongswan
strongswan start                                #启动strongswan
查看状态
strongswan status

如果日志里有如下信息

found 1 matching config, but none allows pre-shared key authentication using main mode

ipsec.conf 配置里aggressive=yes 主动模式注释掉

出现下面状态说明链接成功了

Security Associations (1 up, 0 connecting)即为链路已通。

nginx的配置

nginx 配置目录
tree /apps/nginx/conf/
/apps/nginx/conf/
├── http
│   └── A.conf
├── stream
│   └── B.conf
├── nginx.conf
nginx.conf
....
http {
    ......
    include http/*.conf;

}
include stream/*.conf;
A服务的7层代理配置,A.conf
upstream  a_server  {
      server 10.10.10.11:18080;

      check interval=3000 rise=2 fall=3 timeout=10000 type=http;
      check_http_send "HEAD / HTTP/1.0\r\n\r\n";
      check_http_expect_alive http_2xx http_3xx http_4xx;
}


server {
    listen       80;
    server_name   yourdomain.com ;
    index index.html index.htm index.jsp;#设定访问的默认首页地址



    #转发到tomcat
    location / {
       proxy_pass http://a_server;#转向A服务处理
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_connect_timeout 660;
       proxy_send_timeout 660;
       proxy_read_timeout 660;
       proxy_intercept_errors on;

    }

}
B服务4层的转发配置

cat B.conf

#日志配置
log_format  log_format_tcp 'v1{|]$remote_addr:$remote_port{|]$protocol{|]$upstream_addr{|]$time_iso8601{|]$bytes_sent{|]$bytes_received{|]$session_time{|]$upstream_bytes_sent{|]$status{|]$upstream_bytes_received{|]$upstream_connect_time;

access_log log/nginx/tcp-access.log log_format_tcp ;
error_log  log/nginx/tcp-error.log  ;

stream {
    upstream b_server {
        server 10.10.10.12:3306 max_fails=3 fail_timeout=5s;
    }
    server {
        listen 3306;
        proxy_connect_timeout 5s;  # 与被代理服务器建立连接的超时时间为5s
        proxy_timeout 10s;   # 获取被代理服务器的响应最大超时时间为10s
        proxy_next_upstream on;  # 当被代理的服务器返回错误或超时时,将未返回响应的客户端连接请求传递给upstream中的下一个服务器
        proxy_next_upstream_tries 3;   # 转发尝试请求最多3次
        proxy_next_upstream_timeout 7200s;    # 总尝试超时时间为2h
        proxy_socket_keepalive on;  # 开启SO_KEEPALIVE选项进行心跳检测

        proxy_pass b_server;
    }

}
nginx 日志配置,用于审计

http 日志配置,cat nginx.conf

http {
    http {
    .....

    log_format  log_format 'v1{|]$remote_addr:$remote_port{|]$http_x_forwarded_for{|]$upstream_addr{|]$time_iso8601{|]$request_method{|]$server_name{|]$uri{|]$args{|]$status{|]$http_referer{|]$body_bytes_sent{|]$request_time{|]$upstream_response_time{|]$http_user_agent{|]$sent_http_location{|]$http_cookie';

    access_log  logs/access.log  log_format;
}

tcp 日志配置,见B.conf

母公司侧配置

H3C FW 配置

IKE 配置

Linux下使用Strongswan和nginx搭建IPSec VPN

IPSec配置

Linux下使用Strongswan和nginx搭建IPSec VPN

对端ip配置

配置公网ip A 本地地址配置ip段:192.168.1.0/24 远端地址配置ip:10.10.10.10/32

总结

通过Strongswan可以在不依赖硬件的情况下做site-to-site IPSec VPN隧道,再结合nginx等代理软件,在各地职场、集团个公司之间或者在合作伙伴之间既能打通同异构网络,还能做到网络数据安全管控。欢迎关注DevOpSec,每周分享干货,我们一起进步。

点赞
收藏
评论区
推荐文章
虚拟私有云的定义
虚拟私有云(VPC)是一个公共云计算资源的动态配置池,需要使用加密协议、隧道协议和其他安全程序,在民营企业和云服务提供商之间传输数据。一个VPC基本上把提供商的多租户架构变成单租户架构。在定义上类似虚拟专用网络(VPN)。一个VPN能够被用于在公共性网,例如互联网技术上根据专用型隧道施工传送数据,该隧道施工不可以键入未适度数据加密的数据信息。安全性的额外等
Stella981 Stella981
3年前
Fabric多通道网络实战
HyperledgerFabric支持在一组相同的机构之间的多通道部署,每个通道都相当于一个单独的区块链。Fabric的多通道特性不仅可以满足机构之间不同的数据共享需求,同时也可以提高整个Fabric网络的吞吐量。本文将演示如何使用HyperledgerFabric1.4.3搭建一个多通道的区块链网络、部署并访问链码。1、HyperledgerF
Wesley13 Wesley13
3年前
3.1 主流公有云介绍 3.2 阿里云ECS 3.3 登录云主机 3.4 升降级配置 3.5 安全组策略
3.1主流公有云介绍私有云:一般大企业才有资金能力搭建私有云搭建私有云的工具:openstack公有云:在配置低的情况下,推荐使用公有云,如果需要的配置非常高,比如256内存,CPU核数很多,那么费用就非常的昂贵,这个时候和传统的服务器比起来就没有传统服务器这么经济了。目前比较推荐阿里云阿里云
Stella981 Stella981
3年前
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
LNMP架构LNMP是什么搭建环境搭建准备LNMP软件包搭建nginx搭建mysql数据库搭建php搭建Discuz!论坛LNMP是什么LNMP:Linux系统下NginxMySQLPHP这种网站服务器架构。Nginx是一个高性能的HTTP和
Stella981 Stella981
3年前
Docker实战——分布式Websocket服务
一、项目介绍我们很容易可以使用Springboot来搭建一个支持websocket的应用,用来实现基于HTML5的客户端之间进行消息的接收和推送。但是在实际应用的部署时,客户端和应用服务器之间总会用到Nginx或者Apache来做反向代理,来实现负载均衡。用Nginx举个例子来说,我们使用轮询的方式,将客户端的请求分发到后端3台w
Stella981 Stella981
3年前
Netty在Dubbo中的线程名称
在项目中,我们会使用RocketMQ和Dubbo.前者用于发送或消费消息,后者用于两个模块之间的接口调用.RocketMQ和Dubbo在它们的底层都使用Netty作为网络通信的框架.那么今天我们就来看一下,在Dubbo中,使用的Netty线程名称叫什么?环境和流程如下1.启动zookeeper2.一个简单的Dubbo提供者,并启动它
Stella981 Stella981
3年前
IPSec的链路和设备备份
链路备份的IPSecVPN和设备备份的IPSecVPN:首先实验的是链路备份的 IPSecVPN,下面是实验拓扑:!(https://oscimg.oschina.net/oscnet/80e2d36541434699906868d9fd0784e0d39.png)IP地址配置:R1(Branch):B
Wesley13 Wesley13
3年前
vivo 互联网业务就近路由技术实战
一、问题背景在vivo互联网业务高速发展的同时,支撑的服务实例规模也越来越大,然而单个机房能承载的机器容量是有限的,于是同城多机房甚至多地域部署就成为了业务在实际部署过程中不得不面临的场景。一般情况下,同一个机房内部的网络调用平均时延在0.1ms左右,同城多个机房之间的平均时延在1ms左右,跨地域机房之间的网络时延则更大,例如北京到上海
美味蟹黄堡 美味蟹黄堡
2年前
服务器托管,省心省力省钞票
服务器托管就是用户将自己的服务器等网络设备托管在IDC机房里,并以高速的带宽直接接入Internet的上网方式。服务器托管作为IDC业务中的一个重要组成部分,目的是为了适应用户网站的发展和电子商务应用对于充足网络资源的迫切需求,向用户提供高速接入、网站系统托管、应用托管、电信级专业维护等系列服务,对用户而言具有投资小、见效快、无线路之忧等优点。这次是根据3
Linux Bridge和Tap关系详解
Bridge(桥)是Linux上用来做TCP/IP二层协议交换的设备,与现实世界中的交换机功能相似。Bridge设备实例可以和Linux上其他网络设备实例连接,既attach一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge会根据报文中的MAC信息进行广播、转发、丢弃处理。
DevOpSec
DevOpSec
Lv1
懂开发的运维,懂安全的运维。公众号:DevOpSec
文章
57
粉丝
6
获赞
26