分类 Nps 下的文章

Centos7.6部署OpenVPN

1、下载证书生成工具easy-rsa

yum -y install easy-rsa

2、创建证书环境目录

mkdir -p /opt/easy-rsa
cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars

3、修改vars配置文件,取消下面配置的注释

vim /opt/easy-rsa/vars

set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "HangZhou"
set_var EASYRSA_REQ_CITY        "Hangzhou"
set_var EASYRSA_REQ_ORG         "lius.fun"
set_var EASYRSA_REQ_EMAIL       "gua3j7@126.com"
set_var EASYRSA_NS_SUPPORT      "yes"

4、初始化,创建pki目录用于存储证书(以下都在/opt/easy-rsa目录下操作)

cd /opt/easy-rsa/
./easyrsa init-pki

5、创建根证书,根证书用于ca对之后生成的serverclient证书签名时使用

输入密码确定,其他默认回车
./easyrsa build-ca

6、创建server端证书密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)

./easyrsa gen-req server nopass

7、给server端证书签名

./easyrsa sign server server

8、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法

./easyrsa gen-dh

9、创建client端证书密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)

./easyrsa gen-req client nopass
交互界面默认回车

10、给client端证书签名

 ./easyrsa sign client client

二、OpenVPN服务端部署

1、安装openvpn

yum install -y openvpn

2、创建TLS认证密钥

#为了安全性考虑
mkdir /etc/openvpn
openvpn --genkey --secret /etc/openvpn/ta.key

3、创建新的配置文件/etc/openvpn/server.conf

vim /etc/openvpn/server.conf

#监听本机端口
port 1194
#指定采用的传输协议,可选tcp或udp
proto tcp
#指定创建的通信隧道类型,可选tun或tap
dev tun
#指定CA证书的文件路径
ca ca.crt
#指定服务器端的证书文件路径
cert server.crt
#指定服务器端的私钥文件路径
key server.key
#指定迪菲赫尔曼参数的文件路径,也就是交换证书
dh dh.pem
#给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
server 10.8.0.0 255.255.255.0
#允许客户端访问内网网段,填写自己内网
push "route 10.66.17.0 255.255.255.0"
#服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址"第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP"
ifconfig-pool-persist ipp.txt
#存活时间,10秒ping一次,120如未收到响应则视为断线
keepalive 10 120
#最多允许100个客户端连接
max-clients 100
#日志记录位置
status openvpn-status.log
#openvpn版本
verb 3
#允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
client-to-client
#openvpn日志记录位置
log /var/log/openvpn.log
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的.否则网络会先linkdown然后再linkup
persist-tun
#开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1
tls-auth /etc/openvpn/ta.key 0
 
#开启多人同时登录
duplicate-cn
#允许使用自定义脚本
script-security 3
#脚本路径
auth-user-pass-verify /etc/openvpn/check.sh via-env
#用户密码登陆方式验证:加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录
username-as-common-name
#绑定客户端IP
client-config-dir /etc/openvpn/ccd

4、配置密码启动脚本和和密码本

vim /etc/openvpn/check.sh

#!/bin/sh
###########################################################
PASSFILE="/etc/openvpn/openvpnpass"
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
 
if [ ! -r "${PASSFILE}" ]; then
    echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
    exit 1
fi
 
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
 
if [ "${CORRECT_PASSWORD}" = "" ]; then
    echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
    exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
    echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
    exit 0
fi
 
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

echo "user password"  >>/etc/openvpn/openvpnpass
 
echo "ifconfig-push 10.8.0.25 10.8.0.26"  >>/etc/openvpn/ccd/user

5、增加执行权限

chmod 755 /etc/openvpn/check.sh

[collapse status="false" title="(可选)ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点,必须取下面的集合之一"]

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

[/collapse]

6、拷贝证书到openvpn主配置文件目录下

cp -a /opt/easy-rsa/pki/ca.crt /etc/openvpn/
cp -a /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/
cp -a /opt/easy-rsa/pki/private/server.key /etc/openvpn/
cp -a /opt/easy-rsa/pki/dh.pem /etc/openvpn/

7、启动服务端

systemctl start openvpn@server
systemctl status  openvpn@server
systemctl enable  openvpn@server

客户端文件配置

1、拷贝服务端生成的证书到openvpn客户端安装目录的config目录下

  可以先拷贝到client中,最后下载到客户端的config目录下

cp -a /opt/easy-rsa/pki/ca.crt  /etc/openvpn/client
cp -a /opt/easy-rsa/pki/issued/client.crt /etc/openvpn/client
cp -a /opt/easy-rsa/pki/private/client.key /etc/openvpn/client
cp -a /etc/openvpn/ta.key /etc/openvpn/client

2、在客户端openvpn安装目录的config目录下,新建一个client.ovpn文件,写入配置

#指定当前VPN是客户端

client
#使用tun隧道传输协议
dev tun
#使用udp协议传输数据
proto tcp
#openvpn服务器IP地址端口号,转发的填写公网IP 加对应转发端口
remote 192.168.1.1 1194
#断线自动重新连接,在网络不稳定的情况下非常有用
resolv-retry infinite
#不绑定本地特定的端口号
nobind
#防止从缓存中获取账号密码
auth-nocache
#指定CA证书的文件路径
ca ca.crt
#指定当前客户端的证书文件路径
cert client.crt
#指定当前客户端的私钥文件路径
key client.key
#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 3
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1
tls-auth ta.key 1
#账号密码认证
auth-user-pass
#在TLS握手过程中,服务器会向客户端展示其证书,并且确保证书中的信息是有效
remote-cert-tls server
#启用LZO压缩
comp-lzo
#开启加密套件
#tls-cipher
#启用GCM加密套件
#cipher AES-256-GCM   
#tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384  

3、将以上配置文件放到客户端安装目录下的的/config目录下

启动Open VPN客户端软件,连接成功OpenVPN的图标会变成绿色

注:客户端要想跟内网通讯还需要openvpn服务端开启内核转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

并且添加防火墙方式访问内部网络

systemctl start firewalld
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-service=openvpn --permanent
firewall-cmd --add-port=1194/tcp --permanent
firewall-cmd --reload

参考:
OpenVpn下载
CSDN参考
腾讯云参考

配置文件详解参考

[post cid="98" /]


1、Nas导入证书
Nas导入证书.png

key文件为`私钥`
pem文件为`证书`

2、删除原有证书

3、打开NPS前端,依照提示增加客户端
正常增加客户端.png

[tag type="info"]有时候客户端断开后,再使用客户端命令可能连接失败,删除重新增加客户端即可[/tag]

4、云平台DNS设置解析到公网服务器,NPS管理端添加域名解析

Nps添加域名解析.png
5、客户端下载安装包后,使用管理员权限的CMD启动
NPS管理端启动命令.png
服务器端配置文件若tls_enable=true,则需要客户端则需要同步增加
官方说明.png
6、访问:http(s)://公网IP:https_proxy_port=端口,即可

7、WAF防护配置:http(s)://公网IP:https_proxy_port=端口,其他正常添加即可

8、安全组禁止:NPS管理界面IP方式访问、NPS域名代理端口;防火墙开启,放行NPS所有的端口

上述配置后,Fila2Ban可正常使用

摘要

说明

  • 第一次部署为19年还在校园时,使用阿里云Centos部署成功达到效果后就没有使用了,且还没有写技术文档

QQ截图.png

  • 第二次部署为22年刚刚出来,已经有写技术文档的意识了,但写的还是不够细节
  • 故第三次部署,会将其中遇到的问题及解决方式都描述出来,以便下次部署及维护

部署及下载

  1. 下载使用0.26.17版本,ClientServer,下载后解压
  2. 进入解压的目录下,使用./nps install 安装
注意:报错/ect/nps/conf/nps.conf文件不存在,创建/etc/nps/conf,请把解压后的conf文件夹里面的文件都复制到/etc/nps/conf下,重启执行./nps install

编辑配置文件

#HTTP(S) 代理端口配置
http_proxy_ip=npc.lius.fun    #代理域名
http_proxy_port=8000          #域名代理http代理监听端口
https_proxy_port=4430         #域名代理https代理监听端口
https_just_proxy=true          
#default https certificate setting
https_default_cert_file=/etc/nginx/cret/npc.lius.fun/npc.lius.fun.pem
https_default_key_file=/etc/nginx/cret/npc.lius.fun/npc.lius.fun.key

##服务器和客户端的连接方式及端口
bridge_type=tcp              #客户端与服务端连接方式kcp或tcp
bridge_port=8420             #客户端与服务端连接端口
bridge_ip=0.0.0.0
# Public password, which clients can use to connect to the server

#日志级别
#log level LevelEmergency->0 LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7

log_level=7
log_path=/var/log/nps.log



#web管理端口配置
web_host=nps.lius.fun       #管理界面域名
web_username=admin          #管理账户
web_password=Admin@123      #管理密码
web_port = 8012             #管理端口
web_ip= 0.0.0.0             #IP
web_base_url=
web_open_ssl=true           #管理端使用HTTPS
web_cert_file=/etc/nginx/cret/nps.lius.fun/nps.lius.fun.pem
web_key_file=/etc/nginx/cret/nps.lius.fun/nps.lius.fun.key


[tag type="info"]官方版本很久没有维护了,存在越权漏洞。漏洞原理是利用伪造两个参数auth_keytimestamp来完成越权操作的,在这里我顺便也补充一下修复方式,
修复方式是注释掉auth_crypt_key,并修改auth_key的值为随机值,auth_key记得去掉注释,16位密码[/tag]

firewall、安全组放行端口,启动nps start,可能会出现报错
  1. 安装使用0.26.10报错,web_port=80,这项配置端口无论如何都启动不起来
  2. 使用yisier/nps成功启动后,nps端口都启动成功,但是管理界面访问失败,需要关闭firewall防火墙

反向代理配置

server {
listen 80 ssl http2;       #使用80端口开启http2
server_name npc.lius.fun;  #管理域名
ssl_certificate  /etc/nginx/cret/npc.lius.fun/npc.lius.fun.pem;
ssl_certificate_key /etc/nginx/cret/npc.lius.fun/npc.lius.fun.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log  /var/log/nginx/b.access.log  main;   #开启代理日志
location / {
    proxy_set_header Host  $http_host;
    proxy_pass <https://127.0.0.1:80>;            #和https_proxy_port保持一致
}
}

cannot assign requested address

可能解决方法1 --调低time_wait状态端口等待时间:

1、调低端口释放后的等待时间,默认为60s,修改为15~30s
sysctl -w net.ipv4.tcp_fin_timeout=30
2、修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用
sysctl -w net.ipv4.tcp_timestamps=1
3、修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
sysctl -w net.ipv4.tcp_tw_recycle=1
Nps报错cannot assign requested address,为部署方式不对
Nps中文官网