2016年2月12日 星期五

在 CentOS7 上安裝 OpenVPN Server

在 CentOS7 上安裝 OpenVPN Server
臺中市政府教育局資網中心 沈俊達
一、關閉 SELINUX,安裝本機防火牆並啟動
vim /etc/selinux/config
SELINUX=disabled
yum install firewalld -y
systemctl start firewalld
二、由於 openvpn 沒有在預設的 CentOS repository 裡, 因此我們要先裝 Enterprise Linux (EPEL)
repository
yum install epel-release  -y
三、安裝 openvpn
yum install openvpn -y
會一併安裝相關套件 pkcs11-helper
四、安裝 easy-rsa,要來產生憑證金鑰(Key)
 yum install easy-rsa -y
五、產生 Server 端憑證金鑰(Key)
1. 建立 easy-rsa 要存放產生的 Key 之目錄
mkdir -p /etc/openvpn/easy-rsa/keys
2. 複製 easy-rsa 相關檔案至 easy-rsa 設定檔目錄
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
3. 修改 Easy RSA 的設定檔
vim /etc/openvpn/easy-rsa/vars
原本:

mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
vim /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
# X509 Subject Field
export KEY_NAME="EasyRSA"
改為:(注意只能用英文,而且 COUNTRY 只能二個大寫字母)
export KEY_COUNTRY="TW"
export KEY_PROVINCE="Taiwan"
export KEY_CITY="Taichung"
export KEY_ORG="WCJS"
第 168 頁
export KEY_EMAIL="cyl62@wcjs.tc.edu.tw"
export KEY_OU="InfomationCenter"
# X509 Subject Field
export KEY_NAME="WCJS"
4. 複製產生 openssl 組態檔
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
5. 開始建立憑證
cd /etc/openvpn/easy-rsa
source ./vars (設定環境變數)
./clean-all (清光所有舊的 key,小心不要隨便重複執行此指令)
./build-ca (產生 CA 的金鑰 ca.crt ca.key)
……. 全部按”Enter”…….
6. 建立 Server 用憑證金鑰
./build-key-server server (產生 Server 的金鑰 server.crt server.key server.csr)
一直按”Enter”..........直到以下訊息出現後再自行輸入
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<自行輸入>
An optional company name []:<自行輸入>
7. 建立 Diffie Hellman key exchange 檔案 (產生 dh2048.pem)
./build-dh
8. 建立 TLS-auth 所需的憑證金鑰
openvpn --genkey --secret keys/ta.key
9. 將 OpenVPN Server 所需要的金鑰檔案複製到指定位置
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn
六、配置 Server.conf
複製範本檔案來修改
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
vim /etc/openvpn/server.conf
修改內容如下:
# OpenVPN port
port 443
proto tcp
#VPN Tunnel 派發的網段位址
server 10.209.242.0 255.255.255.0
第 169 頁
#底下設定二選一,預設是採通道分離模式,所以下面這行不啟用,若啟用代表將 Client 端
所有流量導入校內,則必須設定好相關硬體防火牆 NAT 規則及放行策略,否則一旦 Client
端連上後,就只能在校內了(無法瀏覽網際網路)。
#push "redirect-gateway def1 bypass-dhcp"
#連線後,幫 Client 端增加靜態路由(就是貴校校內網段或特定伺服器 ip 位址,視需要一筆
一筆加入)
;push "route 192.168.11.0 255.255.255.0"
push "route 163.17.209.232 255.255.255.255" #sfs3
push "route 163.17.209.0 255.255.255.0"
push "route 210.69.115.228 255.255.255.255" #公文

#派送 DNS Server 位址給 Client 端
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 163.17.209.1"
push "dhcp-option DNS 163.17.40.1"
push "dhcp-option DNS 8.8.8.8"

push "dhcp-option DNS 8.8.4.4"

#派送 WINS Server 位址給 Client 端
push "dhcp-option WINS 208.67.220.220"
#使用 tls-auth, Server 端 0,Client 端 1
tls-auth ta.key 0
#開啟文字檔格式的紀錄檔
log-append openvpn.log
七、允許封包繞送(扮演 router)
vim /etc/sysctl.conf
加入這一行
net.ipv4.ip_forward = 1
systemctl restart network.service
八、在硬體防火牆上新增一筆靜態路由
目的網段 192.168.88.0 255.255.255.0 閘道 192.168.11.201
九、建立 openvpn@server 服務,以便開機自動啟動。
systemctl -f enable openvpn@server.service
十、第一次手動啟動
systemctl start openvpn@server
十一、 爾後若有修改/etc/openvpn/server.conf 之設定內容,要立即生效請重新啟動服務
systemctl restart openvpn@server
十二、 Linux 本機防火牆開放 tcp 443 port 允許連線,回到學校建置時,Juniper 硬體防火牆
也要針對這個 Server ip 開放 tcp 443 port 允許連線。(參數前面是兩個連續減號)
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload




----------------------------------------
產生ta.key
# cd /etc/openvpn/
# openvpn --genkey --secret ta.key

安裝iptables的相關packages與設定iptables
# yum install iptables-services -y
# systemctl mask firewalld
# systemctl enable iptables
# systemctl stop firewalld
# systemctl start iptables
# iptables --flush
將Source IP range為10.209.242.0/24的IP做NAT後,並由eth0出去
# iptables -t nat -A POSTROUTING -s 10.209.242.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.209.242.0/24 -o eno16780032 -j MASQUERADE

firewall-cmd --permanent --direct --add-rule ipv4 filter POSTROUTING 0 -t nat -s 10.209.243.0/24 -o eno16777984 -j MASQUERADE -t nat

firewall-cmd --permanent --direct --add-rule ipv4 filter POSTROUTING 0 -t nat -s 10.209.248.0/24 -o eno16777984 -j MASQUERADE -t nat 
 iptables-save > /etc/sysconfig/iptables
# vim /etc/sysctl.conf
-----------------------------------------
......
net.ipv4.ip_forward = 1
......
-----------------------------------------
# systemctl restart network.service

Enable並啟動OpenVPN service
# systemctl -f enable openvpn@server.service
# systemctl start openvpn@server.service
只允許VPN client可以連10.10.0.0 網段的機器,其他網段皆無法連結
# iptables -A FORWARD -i tun0 -s 172.16.250.128/25 -d 10.10.0.0/16 -j ACCEPT
# iptables -A FORWARD -i tun0 -s 172.16.250.128/25 -j DROP
# iptables-save > /etc/sysconfig/iptables


===============以上皆為OpenVPN server的設定===============

沒有留言:

張貼留言