Linux,  网络相关

centos安装部署ovpn

此笔记是关于完整版本OPENVPN部署,与openvpn as区别在于没有人数限制

参考:
https://www.jianshu.com/p/6146736e7fbd
https://www.cnblogs.com/airoot/p/7252987.html
https://www.centos.bz/2016/10/debian-8-setup-secure-openvpn/

先去openvpn官网下载openvpn源码与easyrsa证书制作工具源码
https://swupdate.openvpn.org/community/releases/openvpn-2.4.7.tar.gz
https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
依赖
yum -y install openssl openssl-devel pam pam-devel

tar zxf openvpn-2.4.7.tar.gz
cd openvpn-2.4.7
./configure --prefix=/usr/local/openvpn --disable-lzo

编译configure: error: route utility is required but missing,需要安装net-tools

make && make install
mkdir /etc/openvpn # 创建配置文件存放目录
cp sample/sample-config-files/server.conf /etc/openvpn/server.conf # 从模板复制一份配置文件

编译出错make:*** No targets specified and no makefile found.Stop是没有安装编译库
yum -y install gcc build-essential

tar zxf EasyRSA-unix-v3.0.6.tgz
cp -rf EasyRSA-unix-v3.0.6 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa init-pki # 初始化证书目录pki
./easyrsa build-ca nopass # 创建根证书,提示输入Common Name,名称随意,但是不能和服务端证书或客户端证书名称相同
./easyrsa gen-dh # 生成Diffle Human参数,它能保证密钥在网络中安全传输

./easyrsa build-server-full server nopass # server是服务端证书名称,可以用其它名称
./easyrsa build-client-full barry nopass # barry是客户端证书名称,可以用其它名称

生成防攻击的key文件
/usr/local/openvpn/sbin/openvpn --genkey --secret /etc/openvpn/easy-rsa/pki/ta.key # 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)

#
        /etc/openvpn/server.conf
#

local 10.0.0.0 # 填服务器真实IP
port 11948
proto tcp #tcp,windows可能客户端会有问题
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
server 10.8.0.0 255.255.255.0 # 给客户端分配的IP段
ifconfig-pool-persist /etc/openvpn/ipp.txt # 记录客户端和虚拟ip的映射关系,当客户端重新连接时依然被分配断开之前的IP地址
push "redirect-gateway def1 bypass-dhcp" # 重定向客户端网关
push "route 0.0.0.0 0.0.0.0"
push "dhcp-option DNS 8.8.8.8" # 选择一个DNS,这里用Google的DNS示例
push "block-outside-dns" #禁用客户端本地DNS,VPN用于代理上网时必须加这个
client-to-client
keepalive 10 120
compress lz4-v2
push "compress lz4-v2"
;user root
;group root
persist-key
persist-tun
cipher AES-256-CBC
auth SHA512
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3 # 日志等级

#

END

#

开启路由转发支持,用 vi 编辑/etc/sysctl.conf文件(CentOS7 在/usr/lib/sysctl.d/50-default.conf),修改以下参数
net.ipv4.ip_forward = 1
sysctl -p 使其生效

#

CentOS7 需要yum install -y iptables iptables-services
配置完防火墙后需要chkconfig iptables on
防火墙配置文件
/etc/sysconfig/iptables

#

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i venet0 -p icmp -m state --state NEW -m icmp --icmp-type 8 -j DROP
-A INPUT -i venet0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 22 -j ACCEPT
-A INPUT -i venet0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 10086 -j ACCEPT
-A INPUT -i venet0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 38888:40000 -j ACCEPT
-A INPUT -i venet0 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 38888:40000 -j ACCEPT
-A INPUT -i venet0 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 123 -j ACCEPT
-A INPUT -i venet0 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 11948 -j ACCEPT
-A INPUT -i venet0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 11948 -j ACCEPT
-A INPUT -i venet0 -p udp -m state --state ESTABLISHED -m udp --sport 53 -j ACCEPT
-A INPUT -i venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 80 -j ACCEPT
-A INPUT -i venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 443 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: "
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -o tun0 -j ACCEPT
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: "
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 22 -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 10086 -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 80 -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 38888:40000 -j ACCEPT
-A OUTPUT -o venet0 -p udp -m state --state ESTABLISHED -m udp --sport 38888:40000 -j ACCEPT
-A OUTPUT -o venet0 -p udp -m state --state ESTABLISHED -m udp --sport 123 -j ACCEPT
-A OUTPUT -o venet0 -p udp -m state --state ESTABLISHED -m udp --sport 11948 -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state ESTABLISHED -m tcp --sport 11948 -j ACCEPT
-A OUTPUT -o venet0 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 53 -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o venet0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 443 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_OUTPUT_denied: "

启动:/usr/local/openvpn/sbin/openvpn --config /etc/openvpn/server.conf &
centos7 编辑rc.local时需要执行chmod +x /etc/rc.d/rc.local
客户端需要4个文件
/etc/openvpn/easy-rsa/pki/private/barry.key
/etc/openvpn/easy-rsa/pki/issued/barry.crt
/etc/openvpn/easy-rsa/pki/ca.crt
/etc/openvpn/easy-rsa/pki/ta.key

新建客户端配置文件C:\Program Files\OpenVPN\config\client.opvn,写入如下内容:
client
dev tun
proto tcp
remote 10.0.0.0 11948 # 填服务器真实IP
persist-key
persist-tun
ca ca.crt
cert barry.crt
key barry.key
tls-auth ta.key 1
cipher AES-256-CBC
auth SHA512

setenv opt block-outside-dns #禁用客户端原DNS,如服务端已有PUSH,则不用这条

verb 3 # 日志等级
comp-lzo yes
合并OVPN配置文件的话
删除或者注释掉以下几行内容:
在这里我把它们注释掉:
ca ca.crt  改为:#ca ca.crt
cert client.crt  改为:#cert client.crt
key client.key  改为:#key client.key
tls-auth ta.key 1  改为:#tls-auth ta.key 1

在最后面添加以下内容:
ca.crt文件内容
client.crt文件内容
client.key文件内容
key-direction 1
ta.key文件内容

留言