OpenV*P*N安裝及證書工具


筆記

1、例題

1、畫iptables的三個模型圖

2、只允許windows連接本機的iptables規則
iptables -t filter -A INPUT -p tcp -s 192.168.15.1 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

3、只允許192.168.15.0網段的IP連接本機,用兩種方式實現。
iptables -t filter -A INPUT -p tcp -m iprange  --src-range 192.168.15.1-192.168.15.254 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

iptables -t filter -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

4、要求本機流出的數據中包含“元旦快樂”
iptables -t filter -A OUTPUT -p tcp --dport 80 -m string  --string "元旦快樂" --algo kmp -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j DROP

5、要求每天的九點到17點之間可以正常訪問
iptables -t filetr -A INPUT -p tcp -m time  --timestart 1:00 --timestop 9:00 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP

2、昨日問題

1、要求只允許windows通過ssh連接192.168.15.81,其他的拒絕
iptables -t filter -A INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 22 -j DROP

3、今日內容

1、vpn

4、vpn的簡介

VPN(全稱:Virtual Private Network)虛擬專用網絡,是依靠ISP和其他的NSP,在公共網絡中建立專用的數據通信的網絡技術,可以為企業之間或者個人與企業之間提供安全的數據傳輸隧道服務。在VPN中任意兩點之間的鏈接並沒有傳統專網所需的端到端的物理鏈路,而是利用公共網絡資源動態組成的,可以理解為通過私有的隧道技術在公共數據網絡上模擬出來的和專網有同樣功能的點到點的專線技術,所謂虛擬是指不需要去拉實際的長途物理線路,而是借用了公共Internet網絡實現的。

5、VPN的作用

VPN的功能是幫助公司里的遠程用戶(出差,在家)、公司的分支機構、商業合作伙伴及供應商等公司和自己的公司內部網絡之間建立可信的安全連接或者是局域網連接,確保數據的加密安全傳輸和業務訪問,對於運維工程師來說,還可以連接不同的機房為局域網來處理相關事宜。

6、VPN的種類

### PPTP

點對點協議(PPTP)是由包括微軟和3Com等公司組成的PPTP論壇開發的一種點對點隧道協議,基於撥號使用的PPP協議,使用PAP或CHAP之類的加密算法,或者使用Microsoft的點對點加密算法MPPE。其通過跨越基於TCP/IP的數據網絡創建VPN實現了從遠程客戶端到專用企業服務器之間數據的安全傳輸。PPTP支持通過公共網絡建立按需的、多協議的、虛擬專用網絡。PPTP允許加密IP通訊,然后在跨域公司IP網絡或公共IP網絡發送的IP頭中對其進行封裝。典型的Linux平台的開源軟件為PPTP。PPTP屬於點對點應用,比較合適遠程的企業用戶撥號到企業進行辦公等應用。

### L2TP

L2TP第2等隧道協議(L2TP)是IETF基於L2F(Cisco的第二層轉發協議)開的的PPTP的后續版本。是一種工業標准Internet隧道協議,其可以為跨越面向數據包的媒體發送點到點的協議(PPP)框架提供封裝。PPTP和L2TP都使用PPP協議對數據進行封裝,然后添加附加爆頭用於數據在互聯網上傳輸。PPTP只能在兩端點間建立單一隧道。L2TP支持在兩端點間使用多隧道,用戶可以針對不同的服務質量創建不同隧道。L2TP可以提供隧道驗證,而PPTP則不支持隧道驗證。但是當L2TP或PPTP與IPSEC共同使用時,可以由IPSEC提供隧道驗證,不需要在第二層協議上驗證隧道使用L2TP。PPTP要求互聯網絡為IP網絡。L2TP只要求隧道媒介提供面向數據包的點對點的鏈接,L2TP可以在IP(使用UDP),禎中繼續永久虛擬電路(PVCs),X.25虛擬電路(VCs)或ATM VCS網絡上使用。

### IPSec

IP安全協議實際上是一套協議包而不是一個單獨的協議。從1995年開始IPSec的研究以來,IETF IPSec工作組在它的主頁上發布了幾十個Internet草案文獻和12個RFC文件。其中比較重要的有RFC2409IKE(互聯網秘鑰交換)、RFC2401 IPSec協議、RFC2402AH驗證包頭、RFC2406ESP加密數據等文件。

IPSec隧道模式隧道是封裝、路由與解封的整個過程。隧道將原始數據包隱藏(或封裝)在新的數據包內部。該新的數據包可能會有新的尋址與路由信息,從而使其能夠通過網絡傳輸。隧道與數據保密性結合使用時,在網絡上竊聽通訊的人將無法獲取原始數據包數據(以及原始的源和目標)。封裝的數據包到達目的地后,會刪除封裝,原始數據包頭用於將數據包路由到最終目的地。

隧道本身是封裝數據經過的邏輯數據路徑,對原始的源和目的的端,隧道是不可見的,而只能看到網絡路徑中的點對點連接。將隧道和數據保密性結合使用時,可用於提供VPN。

封裝的數據包在網絡中的隧道內部傳輸。再次示例中,該網絡是Internet。網關可以是外部Internet與專用網絡之間的周邊網關。周界網關可以是路由器、防火牆、代理服務器或其他安全網關。另外,在專用網絡內部可以使用兩個網關來保護網絡中不信任的通訊。

當以隧道模式使用IPSEC時,其只為IP通訊提供封裝。使用IPSec隧道模式主要是為了與其他不支持IPSec上的L2TP或PPTP VPN隧道技術的路由器、網關或終端系統之間的相互操作。

### SSL VPN

SSL協議提供了數據私密性、端點驗證、信息完整性等特性。SSL協議由許多子協議組成,其中兩個主要的子協議是握手協議和記錄協議。握手協議允許服務器和客戶端在應用協議傳輸第一個數據字節以前,彼此確認,協商一種加密算法和密碼鑰匙。在數據傳輸期間,記錄協議利用握手協議生成的秘鑰加密和解密后來交換的數據。

SSL獨立應用,因此任何一個應用程序都可以享受它的安全性而不必理會執行細節。SSL置身於網絡結構體系的傳輸層和應用層之間。此外,SSL本身就被幾乎所有的WEB瀏覽器支持。這意味着客戶端不需要為了支持SSL鏈接安裝額外的軟件。這兩個特征就是SSL能應用於VPN的關鍵點。

典型的SSL VPN應用:Open VPN,這是一個比較好的開源軟件。Open VPN允許參與建立VPN的單點使用預設的私鑰,第三方證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫,以及SSLv3/TLSv1協議。OpenVPN能在Linux、xBSD、MacOS 上運行。它並不是一個基於Web的VPN軟件,也不能與IPSec及其他VPN軟件包兼容。

7、介紹OpenVPN

官網:https://openvpn.net/

專用網:專用網就是在兩個網絡(例如,北京和廣州)之間架設一條專用線路,但是它並不需要真正地去鋪設光纜之類的物理線路。雖然沒有親自去鋪設,但是需要向電信運營商申請租用專線,在這條專用的線路上只傳輸自己的信息,所以安全穩定,同時也費用高昂

在眾多的VPN產品中,OpenVPN無疑是Linux下開源VPN的經典產品,他提供了良好的訪問性能和友好的用戶GUI。

Open VPN是一個用於創建虛擬專用網絡加密通道的軟件包,最早由James Yonan編寫。一個實現VPN的開源軟件,OpenVPN 是一個健壯的、高度靈活的 VPN 守護進程。它支持 SSL/TLS 安全、Ethernet bridging、經由代理的 TCP 或 UDP 隧道和 NAT。另外,它也支持動態 IP 地址以及DHCP,可伸縮性足以支持數百或數千用戶的使用場景,同時可移植至大多數主流操作系統平台上。

8、部署OpenVPN

OpenVPN 分為客戶端和服務端

1、服務端

# 安裝openvpn和證書工具
[root@m01 ~]# yum -y install openvpn easy-rsa

# 生成服務器配置文件
[root@m01 ~]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/

# 准備證書簽發相關文件
[root@m01 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-server

# 准備簽發證書相關變量的配置文件
[root@m01 ~]#  cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa-server/3/vars

# 初始化PKI生成PKI相關目錄和文件
[root@m01 3]# cd /etc/openvpn/easy-rsa-server/3

# 初始化數據,在當前目錄下生成pki目錄及相關文件
[root@m01 3]# ./easyrsa init-pki

# 創建CA機構
[root@m01 3]# ./easyrsa build-ca nopass

# 驗證CA證書
[root@m01 3]# openssl x509 -in pki/ca.crt -noout -text

# 創建服務端證書申請
[root@m01 3]# ./easyrsa gen-req server nopass

# 創建證書
[root@m01 3]# ./easyrsa sign server server

# 驗證證書
[root@m01 3]#diff pki/certs_by_serial/A25E3EA5278F84C245261AAF83AF683E.pem  pki/issued/server.crt

2、創建 Diffie-Hellman 密鑰

方式一:
[root@m01 3]# ./easyrsa gen-dh

方式二:
[root@m01 3]# openssl dhparam -out /etc/openvpn/dh2048.pem 2048

9、客戶端證書

[root@m01 3]# cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-client
[root@m01 3]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa-client/3/vars
[root@m01 3]# cd /etc/openvpn/easy-rsa-client/3
# 初始化證書目錄
[root@m01 3]# ./easyrsa init-pki
# 生成客戶端證書
[root@m01 3]# ./easyrsa gen-req henry nopass
# 將客戶端證書請求文件復制到CA的工作目錄
[root@m01 3]# cd /etc/openvpn/easy-rsa-server/3
[root@m01 3]# ./easyrsa import-req /etc/openvpn/easy-rsa-client/3/pki/reqs/henry.req henry
# 簽發客戶端證書
[root@m01 3]# pwd
/etc/openvpn/easy-rsa-server/3
[root@m01 3]# ./easyrsa sign client henry

# 驗證
[root@m01 3]# cat pki/index.txt
V	240401022739Z		ADBFFB9F45E5CEF861E7F642BA6C447E	unknown	/CN=server
V	240401023724Z		47765AD8225E12A13FB1EEBAC769B999	unknown	/CN=henry
[root@m01 3]# ll pki/certs_by_serial/
total 16
-rw------- 1 root root 4438 Dec 28 10:37 47765AD8225E12A13FB1EEBAC769B999.pem
-rw------- 1 root root 4552 Dec 28 10:27 ADBFFB9F45E5CEF861E7F642BA6C447E.pem

10、創建鏈接配置文件

1、修改openvpn配置文件
[root@m01 3]# vim /etc/openvpn/server.conf
port 1194
proto tcp
dev tun
ca  /etc/openvpn/certs/ca.crt
cert  /etc/openvpn/certs/server.crt
key  /etc/openvpn/certs/server.key
dh  /etc/openvpn/certs/dh.pem
server 10.8.0.0 255.255.255.0
push "route 172.16.1.0 255.255.255.0"
keepalive 10 120
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 2048
user openvpn
group openvpn
status  /var/log/openvpn/openvpn-status.log
log-append   /var/log/openvpn/openvpn.log
verb 3
mute 20

# 創建日志文件目錄
[root@m01 3]# mkdir -p /var/log/openvpn
# 創建權限
[root@m01 ~]# chown openvpn.openvpn /var/log/openvpn
# 創建存放證書目錄
[root@m01 ~]# mkdir -p /etc/openvpn/certs
# 復制證書
[root@m01 ~]# cp /etc/openvpn/easy-rsa-server/3/pki/dh.pem /etc/openvpn/certs/
[root@m01 ~]# cp /etc/openvpn/easy-rsa-server/3/pki/ca.crt /etc/openvpn/certs/
[root@m01 ~]# cp /etc/openvpn/easy-rsa-server/3/pki/private/server.key /etc/openvpn/certs/
[root@m01 ~]# cp /etc/openvpn/easy-rsa-server/3/pki/issued/server.crt /etc/openvpn/certs/
[root@m01 ~]# ll /etc/openvpn/certs/
total 20
-rw------- 1 root root 1172 Dec 28 10:54 ca.crt
-rw------- 1 root root  424 Dec 28 10:54 dh.pem
-rw------- 1 root root 4552 Dec 28 10:54 server.crt
-rw------- 1 root root 1704 Dec 28 10:54 server.key

2、啟動OpenVPN
# 開啟系統內核網絡轉發功能
[root@m01 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@m01 ~]# sysctl -p

# 安裝防火牆
[root@m01 ~]# yum install iptables-services -y
[root@m01 ~]# systemctl disable --now firewalld
[root@m01 ~]# systemctl start iptables
[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -F -t nat

# 添加iptables規則
[root@m01 ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

# 永久保存Iptables規則
[root@m01 ~]# service iptables save

# 啟動OpenVPN
[root@m01 ~]# systemctl enable --now openvpn@server

3、創建鏈接文件

[root@m01 ~]# mkdir -p /etc/openvpn/client/henry/

# 准備證書
[root@m01 henry]# cp /etc/openvpn/easy-rsa-server/3/pki/ca.crt /etc/openvpn/client/henry/
[root@m01 henry]# cp /etc/openvpn/easy-rsa-server/3/pki/issued/henry.crt /etc/openvpn/client/henry/
[root@m01 henry]# cp /etc/openvpn/easy-rsa-client/3/pki/private/henry.key /etc/openvpn/client/henry/

# 准備鏈接文件
[root@m01 ~]# vim /etc/openvpn/client/henry/client.ovpn 
client
dev tun
proto tcp
remote 192.168.15.81 1194
resolv-retry infinite
nobind
ca ca.crt
cert henry.crt
key henry.key
remote-cert-tls server
cipher AES-256-CBC
verb 3
compress lz4-v2

附錄:

#server.conf文件中以#或;開頭的行都為注釋
[root@instance-gvpb80ao ~]# grep -Ev "^#|^$" /etc/openvpn/server.conf
;local a.b.c.d  #本機監聽IP,默認為本機所有IP
port 1194       #端口
;proto tcp      #協議,生產推薦使用TCP
proto udp #默認協議
;dev tap   #創建一個以太網隧道,以太網使用tap,一個tap設備允許完整的以太網幀通過Openvpn隧道,可提供非ip協議的支持,比如IPX協議和AppleTalk協議,tap等同於一個以太網設備,它操作第二層數據包如以太網數據幀。
dev tun    #創建一個路由IP隧道,生產推存使用tun.互聯網使用tun,一個tun設備大多時候,被用於基於IP協議的通訊。tun模擬了網絡層設備,操作第三層數據包比如IP數據封包。
;dev-node MyTap  #TAP-Win32適配器。非windows不需要配置
ca ca.crt       #ca證書文件
cert server.crt  #服務器證書文件
key server.key   #服務器私鑰文件
dh dh2048.pem    #dh參數文件
;topology subnet
server 10.8.0.0 255.255.255.0  #客戶端連接后分配IP的地址池,服務器默認會占用第一個IP 10.8.0.1將做為客戶端的網關
ifconfig-pool-persist ipp.txt  #為客戶端分配固定IP,不需要配置,建議注釋
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100  #配置網橋模式,不需要配置,建議注釋
;server-bridge
;push "route 192.168.10.0 255.255.255.0"  #給客戶端生成的到達服務器后面網段的靜態路由,下一跳為openvpn服務器的10.8.0.1
;push "route 192.168.20.0 255.255.255.0"  #推送路由信息到客戶端,以允許客戶端能夠連接到服務器背后的其它私有子網
;client-config-dir ccd #為指定的客戶端添加路由,此路由通常是客戶端后面的內網網段而不是服務端的,也不需要設置
;route 192.168.40.128 255.255.255.248 
;client-config-dir ccd    
;route 10.9.0.0 255.255.255.252
;learn-address ./script                #運行外部腳本,創建不同組的iptables規則,無需配置
;push "redirect-gateway def1 bypass-dhcp" #啟用后,客戶端所有流量都將通過VPN服務器,因此生產一般無需配置此項
;push "dhcp-option DNS 208.67.222.222"   #推送DNS服務器,不需要配置
;push "dhcp-option DNS 208.67.220.220"
;client-to-client                       #允許不同的client直接通信,不安全,生產環境一般無需要配置
;duplicate-cn                           #多個用戶共用一個證書,一般用於測試環境,生產環境都是一個用戶一個證書,無需開啟
keepalive 10 120         #設置服務端檢測的間隔和超時時間,默認為每10秒ping一次,如果 120 秒沒有回應則認為對方已經down
tls-auth ta.key 0 #訪止DoS等攻擊的安全增強配置,可以使用以下命令來生成:openvpn --
genkey --secret ta.key #服務器和每個客戶端都需要擁有該密鑰的一個拷貝。第二個參數在服務器端應該為’0’,在客戶端應該為’1’
cipher AES-256-CBC  #加密算法
;compress lz4-v2    #啟用Openvpn2.4.X新版壓縮算法
;push "compress lz4-v2"   #推送客戶端使用新版壓縮算法,和下面的comp-lzo不要同時使用
;comp-lzo          #舊戶端兼容的壓縮配置,需要客戶端配置開啟壓縮,openvpn2.4.X等新版可以不用開啟
;max-clients 100   #最大客戶端數
;user nobody         #運行openvpn服務的用戶和組
;group nobody
persist-key          #重啟VPN服務時默認會重新讀取key文件,開啟此配置后保留使用第一次的key文件,生產環境無需開啟
persist-tun          #啟用此配置后,當重啟vpn服務時,一直保持tun或者tap設備是up的,否則會先down然后再up,生產環境無需開啟
status openvpn-status.log #openVPN狀態記錄文件,每分鍾會記錄一次
;log         openvpn.log   #第一種日志記錄方式,並指定日志路徑,log會在openvpn啟動的時候清空日志文件,不建議使用
;log-append openvpn.log   #第二種日志記錄方式,並指定日志路徑,重啟openvpn后在之前的日志后面追加新的日志,生產環境建議使用
verb 3                   #設置日志級別,0-9,級別越高記錄的內容越詳細,0 表示靜默運行,只記錄致命錯誤,4 表示合理的常規用法,5 和 6 可以幫助調試連接錯誤。9 表示極度冗余,輸出非常詳細的日志信息
;mute 20                 #相同類別的信息只有前20條會輸出到日志文件中
explicit-exit-notify 1   #通知客戶端,在服務端重啟后自動重新連接,僅能用於udp模式,tcp模式不需要配置即可實現斷開重新連接,且開啟此項后tcp配置后將導致openvpn服務無法啟動,所以tcp時必須不能開啟此項


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM