空无以求全
宁静以致远
当前位置:首页 > .html

在Ubuntu上搭建OpenVPN服务器,并配合Mac和Windows的客户端

作者:大熊空间发布时间:2022-02-19 17:09分类: 浏览:271评论:0


导读:在Ubuntu上搭建OpenVPN服务器,并配合Mac和Windows的客户端?(一)利用SSH Tunnel方式建立的代理服务器配置简单,用来翻墙是足够用了。但仍有一定的局限,如...

在Ubuntu上搭建OpenVPN服务器,并配合Mac和Windows的客户端?(一)


利用SSH Tunnel方式建立的代理服务器配置简单,用来翻墙是足够用了。但仍有一定的局限,如果被访问网站是利用Flash或是自制播放器的话,可以不遵循浏览器的设置,自行建立媒体流或是汇报本地IP。这种情况下,只有设置VPN才行。



1. 服务器设置


1) 安装OpenVPN,以及相关准备工作


这里假设openssl已经默认随ubuntu安装了,否则sudo apt-get install openssl

 










1sudo?apt-get?install?openvpn




 

然后把随安装包一起提供的配置模板拷贝出来

 










1cd?/usr/share/doc/openvpn/examples










2sudo?cp?./sample-config-files/server.conf.gz /etc/openvpn










3sudo?cp?-r ./easy-rsa/2.0 /etc/openvpn










4cd?/etc/openvpn










5sudo?mv?2.0 easy-rsa???#这是生成数字证书的工具包










6gzip?-d server.conf.gz?#配置模板




 

2) 生成数字证书


首先修改生成证书所需的基本信息

 










1cd?/etc/openvpn/easy-rsa










2sudo?vi?./vars




 

# These are the default values for fields # which will be placed in the certificate. # Don’t leave any of these fields blank. export KEY_COUNTRY=”US” export KEY_PROVINCE=”CA” export KEY_CITY=”SanFrancisco” export KEY_ORG=”Fort-Funston” export KEY_EMAIL=”me@myhost.mydomain” 这些都可以自己修改成认为有意义的内容,当然随便填填也无所谓。

然后更改默认目录权限,生成CA根证书

 










1cd?/etc/openvpn/easy-rsa/?## move to the easy-rsa directory










2sudo?chown?-R root:admin?## 假设当前用户也是admin这个Group的










3sudo?chmod?g+w?## 让Group成员都有写权限,否则./clean-all无法建立所需目录










4source?./var










5./clean-all?##主要是生成存放证书和密钥的目录










6./build-ca




 

在生成服务器的证书和密钥,这其中会问道密码,好像设不设都无所谓,但如果设置了,注意保留记录

有可能的化, 选择2048位的RSA key, 基本对性能没有影响, 比默认的1024位好

 










1./build-key-server server




 

生成客户端需要的证书和密钥,也会问密码,处理原则同上。

 










1./build-key client1




 

其他内容都可以随便填写,但是common name最好是唯一的,这样每个用户只能同时登入一次,
除非在server.conf中设置了duplicate-cn,才可以由一个证书多次登陆

如果以后要创建其他用户的key,之前都要source ./vars一下
接下来在创建Diffie Hellman参数,这部可能要花几分钟时间生成随机数

 










1./build-dh




 

把服务器证书复制到配置文件夹下

 










1cp?ca.crt server.crt server.key dh1024.pem /etc/openvpn




 

再把ca.crt, client1.crt和client1.key通过ftp或者scp的方式,下载到客户端。

可选的额外认证步骤:

 










1openvpn --genkey --secret ta.key




 

将ta.key分别放到/etc/openvpn下和安全拷贝到客户端中
tls-auth ta.key 0 #服务器的配置

tls-auth ta.key 1 #客户端的配置

这是为了添加额外的HMAC数字签名, 便于快速审查和丢弃不合法的数据包, (因为完整的SSL/TLS验证比较费时间)

  • UDP Flood

  • 端口扫描

  • SSL/TLS缓存区溢出的可能


3 )然后就可以sudo vi /etc/openvpn/server.conf 编辑配置文件了


 










01port 1194 # change this to whatever you need it to be










02?










03# tcp or udp, never use both in the same config










04?










05# 由于VPN的数据包是建立在已经存在的Internet链接上的, 没有必要再次用TCP建立连接










06# 所以正常情况都可已设为udp, 除非是Internet的质量太差.










07proto udp










08?










09#routed VPN










10?










11#否则需要配置bridge模式,很麻烦










12?










13#除非在服务器侧有很多其他windows主机要共享,否则










14?










15dev tun










16?










17# Certificates,这些都是刚才生成的文件










18?










19ca ca.crt










20?










21cert server.crt










22?










23key server.key # This file should be kept secret










24?










25dh dh1024.pem










26?










27# Server settings,一般就用默认设置比较好,避免和本地局域网地址重复










28?










29server 10.8.0.0 255.255.255.0 # Default VPN ip range.










30?










31#这句很关键,让客户端所有路由都转从VPN的默认网关










32?










33push "redirect-gateway def1"? #def1也不能少,否则有时候客户端的默认网关不会变










34?










35# OpenDNS settings,也很关键。










36?










37#因为为客户端连DNS查询都通过VPN发出。










38?










39push "dhcp-option DNS 208.67.222.222"










40?










41push "dhcp-option DNS 208.67.220.220"










42?










43# Allow clients to see eachother










44?










45client-to-client










46?










47#启用压缩,对时延影响不大










48?










49comp-lzo










50?










51# Reduce the OpenVPN daemon's privileges










52?










53user nobody










54?










55group nogroup










56?










57#增加一个快速的tls完整性验证, 避免对一些明显无效的数据包进行完整的tls/ssl验证










58tls-auth ta.key 0










59?










60keepalive 10 120










61?










62#以下几个对连接建立影响不大










63?










64ifconfig-pool-persist ipp.txt










65?










66#日志也可以改到/var/log/openvpn/下










67?










68status openvpn-status










69?










70log openvpn.log




 

4)设置端口转发


 










1sudo?vi?/etc/sysctl.conf




 

将其中net.ipv4.ipforward=1的注释去掉

为了不用等到系统重启才能生效,再输入

 










1sysctl -w net.ipv4.ip_forward=1




 

可以用sysctl net.ipv4.ip_forward确认上述设置是否成功了。
然后 sudo /etc/init.d/openvpn restart重启服务就可以了。

防火墙设置


在原来系统的iptables_init.sh中,添加

 










1#假设服务器只有一块网卡eth0,所以无论是接收VPN请求,和向外二次转发,都用eth0这个interface










2?










3iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE?#VPN向Internet转发的关键










4iptables -I FORWARD -d 10.8.0.0/24 -j ACCEPT?#从Internet进来的包, 如果是指向VPN内部的, 必须尝试转发, 有OpenVPN决定是否安全










5iptables -A INPUT -i tun+ -j ACCEPT?#必须可以接收tun0转来的VPN内部数据包










6iptables -A INPUT -i tap+ -j ACCEPT?#这条主要是为了Window客户端OpenVPN GUI登录所设置的,因为其只有tap接口










7iptables -A FORWARD -i tap+ -j ACCEPT?#允许VPN转发










8iptables -A FORWARD -i tun+ -j ACCEPT?#允许VPN转发










9iptables -A INPUT -p tcp -i eth0 --dport 1194 -j ACCEPT?#允许客户端递交VPN登录请求




 

然后清空iptables规则,并重新建立

 










1sudo?iptables -F










2sudo?iptables -t nat -F










3sudo?./iptables_init.sh










4sudo?/etc/init.d/fail2ban restart




 

可以用一下命令看防火墙是否成功建立

 










1sudo?iptables -L -v?sudo?iptables -L -v?-t nat




 

顺便给一个完整的防火墙建立脚本

 











01iptables -F










02iptables -X










03iptables -t nat -F










04iptables -t nat -X










05?










06iptables -P INPUT ACCEPT????#There will be a line at the bottom of the chain to reject default package










07iptables -P FORWARD DROP?#By default, do not act as a router










08iptables -P OUTPUT ACCEPT?#By default, assume the server is secured, thus allow all outgoing traffic. could be hardened in future










09?










10iptables -I FORWARD -d 10.8.0.0/24 -j ACCEPT










11iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE










12iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT










13iptables -A INPUT -i lo -j ACCEPT










14iptables -A INPUT -i tap+ -j ACCEPT










15iptables -A INPUT -i tun+ -j ACCEPT










16iptables -A FORWARD -i tap+ -j ACCEPT










17iptables -A FORWARD -i tun+ -j ACCEPT










18iptables -A INPUT -p tcp -i eth0 --dport?ssh?-j ACCEPT










19iptables -A INPUT -p udp -i eth0 --dport 1194 -j ACCEPT










20iptables -A INPUT -p tcp -i eth0 --dport 1194 -j ACCEPT










21iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT










22iptables -A INPUT -p tcp -i eth0 --dport 21 -j ACCEPT










23iptables -A INPUT -j DROP










24?










25iptables-save > /etc/iptables.rules





发表评论: