Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Linux CentOS/RHEL

ในบทความนี้ เราจะพิจารณาการติดตั้งและการกำหนดค่าของ OpenVPN เซิร์ฟเวอร์ที่ใช้ Linux CentOS/RHEL (7/8) และแสดงวิธีเชื่อมต่อคอมพิวเตอร์ระยะไกลสองเครื่อง (หรือสำนักงาน) หลัง NAT ในเครือข่ายเดียวโดยใช้เซิร์ฟเวอร์ OpenVPN ที่กำหนดค่าไว้ ไคลเอนต์ VPN จะได้รับการตรวจสอบสิทธิ์โดยใช้ใบรับรอง

VPN เป็นชุดของเทคโนโลยีที่อนุญาตให้สร้างเครือข่ายที่ปลอดภัยบนเครือข่ายสาธารณะหรืออินเทอร์เน็ต เมื่อใช้ VPN คุณจะเชื่อมต่ออุปกรณ์หรือเครือข่ายต่างๆ ลงในเครือข่ายท้องถิ่นที่ปลอดภัยเพียงเครือข่ายเดียวทางอินเทอร์เน็ตได้

OpenVPN เป็นหนึ่งในการนำเทคโนโลยี VPN แบบโอเพ่นซอร์สที่ใช้ SSL/TLS ไปใช้โดยอิงจาก OpenSSL เมื่อใช้ OpenVPN คุณสามารถเชื่อมต่อทั้งสำนักงานระยะไกลและคอมพิวเตอร์แต่ละเครื่องที่อยู่เบื้องหลังอุปกรณ์ NAT ลงในเครือข่ายเดียว

ติดตั้ง OpenVPN และ Easy-RSA

ในขั้นตอนแรก คุณต้องเชื่อมต่อที่เก็บ EPEL และอัปเดตโฮสต์ของคุณ:

# yum install epel-release -y
# yum update -y

หลังจากที่ระบบอัปเดตแล้ว ให้ติดตั้ง OpenVPN และ Easy-RSA ใช้ตัวจัดการแพ็คเกจ yum (เราจำเป็นต้องใช้เพื่อใช้งานโครงสร้างพื้นฐานคีย์ PKI บนเซิร์ฟเวอร์ VPN)

# yum install openvpn easy-rsa -y

จะกำหนดค่า Easy-RSA และสร้างใบรับรอง X.509 ได้อย่างไร

คัดลอกทั้งหมด easy-rsa สคริปต์ไปยัง /etc/openvpn/ :

# cp -r /usr/share/easy-rsa /etc/openvpn/

ไปที่ /etc/openvpn/easy-rsa/3/ และสร้าง vars ไฟล์ที่นั่น:

# cd /etc/openvpn/easy-rsa/3/
# nano vars

เพิ่มเนื้อหาไฟล์ (คุณสามารถแก้ไขการกำหนดค่าตามความต้องการของคุณ):

 set_var EASYRSA "$ PWD" set_var EASYRSA_PKI "$ EASYRSA / PKI" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "MUN" EASYRSA_REQ_CITY set_var "โดย" set_var EASYRSA_REQ_ORG "WOSHUB" set_var EASYRSA_REQ_EMAIL "vpnadmin@woshub.com "set_var EASYRSA_REQ_OU "ไอที DEPT" set_var EASYRSA_KEY_SIZE 4096set_var EASYRSA_ALGO rsaset_var EASYRSA_CA_EXPIRE 7500set_var EASYRSA_CERT_EXPIRE 3650set_var EASYRSA_NS_SUPPORT "ไม่" set_var EASYRSA_NS_COMMENT "Certificate Authority" set_var EASYRSA_EXT_DIR "$ EASYRSA / x509 ประเภท" EASYRSA_SSL_CONF set_var "$ EASYRSA / OpenSSL-1.0.cnf" EASYRSA_DIGEST set_var "sha512"

คุณสามารถระบุข้อมูลใดๆ ในไฟล์ได้ โดยจะไม่ส่งผลต่อการกำหนดค่าและการทำงานเพิ่มเติมของเซิร์ฟเวอร์

ไฟล์จะต้องสามารถเรียกใช้งานได้ ดังนั้นให้รัน:

# chmod +x vars

สร้างใบรับรองและคีย์ OpenVPN

ก่อนสร้างคีย์ ให้เริ่มต้น PKI ไดเร็กทอรีและสร้าง CA คีย์
# cd /etc/openvpn/easy-rsa/3/
# ./easyrsa init-pki

หมายเหตุ:การใช้การกำหนดค่า Easy-RSA จาก:./varsinit-pki เสร็จสมบูรณ์; ขณะนี้คุณสามารถสร้าง CA หรือคำขอได้ PKI dir ที่คุณสร้างขึ้นใหม่คือ:/etc/openvpn/easy-rsa/3/pki

สร้าง CA คีย์:

# ./easyrsa build-ca

หลังจากรันคำสั่ง คุณจะต้องป้อนรหัสผ่านเพื่อสร้างคีย์และใบรับรอง คุณจะต้องใช้รหัสผ่านในภายหลังเพื่อลงนามในใบรับรอง

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Linux CentOS/RHEL

สร้างคีย์เซิร์ฟเวอร์ (ชื่อเซิร์ฟเวอร์คือ vpn.woshub.com ):

ไม่ผ่าน ตัวเลือกปิดการใช้งานรหัสผ่าน

# ./easyrsa gen-req vpn.woshub.com nopass

หมายเหตุ:การใช้การกำหนดค่า Easy-RSA จาก:./varsUsing SSL:openssl OpenSSL 1.0.2k-fips 26 ม.ค. 2017กำลังสร้างคีย์ส่วนตัว RSA 4096 บิต................ ........++เขียนไพรเวทคีย์ใหม่ไปที่ '/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key.R4IYCbD1zP'----คุณกำลังจะ จะถูกขอให้ป้อนข้อมูลที่จะรวมไว้ในคำขอใบรับรองของคุณสิ่งที่คุณกำลังจะป้อนคือสิ่งที่เรียกว่าชื่อเฉพาะหรือ DN มีฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้ได้สำหรับบางฟิลด์จะมีค่าเริ่มต้น ,หากคุณป้อน '.' ฟิลด์จะเว้นว่างไว้ -----ชื่อทั่วไป (เช่น:ผู้ใช้ โฮสต์ หรือชื่อเซิร์ฟเวอร์ของคุณ) [vpn.woshub.com]:คำขอคู่คีย์และใบรับรองเสร็จสมบูรณ์ ไฟล์ของคุณคือ:req:/etc/openvpn/easy-rsa/3/pki/reqs/vpn.woshub.com.reqkey:/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com กุญแจ

เมื่อออกใบรับรอง ให้กด Enter ในคอลัมน์ชื่อสามัญ

ลงนามคีย์ vpn.woshub.com โดยใช้ใบรับรอง CA ของเรา:

# ./easyrsa sign-req server vpn.woshub.com

ในการลงนามในใบรับรอง เราจะต้องมีรหัสผ่านที่เราตั้งไว้เมื่อออก CA ใบรับรอง:

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Linux CentOS/RHEL

ดังที่แสดงในภาพหน้าจอ คุณจะต้องป้อน ใช่ และ CA รหัสผ่านอยู่ระหว่างดำเนินการ

เพื่อให้แน่ใจว่ามีการสร้างใบรับรองโดยไม่มีข้อผิดพลาด ให้เรียกใช้คำสั่งนี้:

# openssl verify -CAfile pki/ca.crt pki/issued/vpn.woshub.com.crt

pki/issued/vpn.woshub.com.crt:ตกลง

สร้างใบรับรองเซิร์ฟเวอร์ OpenVPN ทั้งหมดแล้ว

  • ใบรับรองหลัก  pki/ca.crt
  • คีย์เซิร์ฟเวอร์ส่วนตัว pki/private/vpn.woshub.com.key
  • ใบรับรองเซิร์ฟเวอร์  pki/issued/vpn.woshub.com.crt

ในการสร้างคีย์ไคลเอ็นต์ ให้รันคำสั่งต่อไปนี้:

# ./easyrsa gen-req client_name nopass

มาสร้าง admin1 . กันเถอะ รหัสลูกค้า:
# ./easyrsa gen-req admin1 nopass

หมายเหตุ:ใช้การกำหนดค่า Easy-RSA จาก:./varsUsing SSL:openssl OpenSSL 1.0.2k-fips 26 ม.ค. 2017การสร้างคีย์ส่วนตัว RSA 4096 บิต..........++เขียนคีย์ส่วนตัวใหม่ไปยัง '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e'----- คุณจะถูกขอให้ป้อนข้อมูลที่จะรวมอยู่ในคำขอใบรับรองของคุณ สิ่งที่คุณกำลังจะป้อน คือสิ่งที่เรียกว่า Distinguished Name หรือ DN มีบางฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้ได้ สำหรับบางฟิลด์จะมีค่าเริ่มต้น หากคุณป้อน '.' ฟิลด์จะเว้นว่างไว้ ---- -ชื่อทั่วไป (เช่น:ชื่อผู้ใช้ โฮสต์ หรือเซิร์ฟเวอร์ของคุณ) [admin1]:คำขอคู่คีย์และใบรับรองเสร็จสมบูรณ์ ไฟล์ของคุณคือ:req:/etc/openvpn/easy-rsa/3/pki/reqs/admin1.reqkey:/etc/openvpn/easy-rsa/3/pki/private/admin1.key

คุณต้องเซ็นชื่อโดยใช้ใบรับรอง CA เช่นรหัสเซิร์ฟเวอร์:

# ./easyrsa sign-req client admin1

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Linux CentOS/RHEL

สร้างใบรับรองสำหรับผู้ใช้แล้ว

นอกจากนี้ คุณต้องสร้างคีย์ Diffie-Hellman เพื่อใช้ในการแลกเปลี่ยนคีย์:

# ./easyrsa gen-dh

ต้องใช้เวลาในการสร้าง:

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Linux CentOS/RHEL

จากนั้นสร้างใบรับรอง TSL:

# openvpn --genkey --secret ta.key

หากในภายหลังเราจะเพิกถอนใบรับรองไคลเอ็นต์ เราต้องสร้างคีย์ CRL:

# ./easyrsa gen-crl

หมายเหตุ:การใช้การกำหนดค่า Easy-RSA จาก:./varsUsing SSL:openssl OpenSSL 1.0.2k-fips 26 ม.ค. 2017การใช้การกำหนดค่าจาก /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnfEnter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key:สร้าง CRL ที่อัปเดตแล้ว ไฟล์ CRL:/etc/openvpn/easy-rsa/3/pki/crl.pem

หากต้องการเพิกถอนใบรับรอง ให้เรียกใช้คำสั่งนี้:

./easyrsa revoke admin1 — โดยที่ admin1 เป็นชื่อใบรับรอง

สร้างใบรับรองที่จำเป็นแล้ว ตอนนี้คัดลอกไปยังไดเรกทอรีงาน

นี่คือใบรับรองเซิร์ฟเวอร์:

# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/vpn.woshub.com.crt /etc/openvpn/server/
# cp pki/private/vpn.woshub.com.key /etc/openvpn/server/
# cp pki/private/dh.pem /etc/openvpn/server/
# cp pki/private/ta.key /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/

นี่คือใบรับรองไคลเอ็นต์:

# cp pki/issued/admin1.crt /etc/openvpn/client/
# cp pki/private/admin1.key /etc/openvpn/client/

ไฟล์การกำหนดค่าเซิร์ฟเวอร์ OpenVPN กฎไฟร์วอลล์

ไปที่การตั้งค่าของไฟล์การกำหนดค่า OpenVPN กัน ก่อนอื่น สร้างไฟล์การกำหนดค่า OpenVPN server.conf :

# cd /etc/openvpn/ && nano server.conf

เปลี่ยนเนื้อหาไฟล์ดังนี้:

# ระบุพอร์ต โปรโตคอล และ deviceport 1194proto udpdev tun# ระบุพาธไปยังเซิร์ฟเวอร์ certificatesca /etc/openvpn/server/ca.crtcert /etc/openvpn/server/vpn.woshub.com.crtkey /etc/openvpn /server/vpn.woshub.com.key# เส้นทางไปยังคีย์ CRL และ DHdh /etc/openvpn/server/dh.pemcrl-verify /etc/openvpn/server/crl.pem# ระบุการตั้งค่า IP ของเครือข่าย VPN ไคลเอนต์จะ รับที่อยู่จากเซิร์ฟเวอร์ 10.1.2.0 255.255.255.0push "redirect-gateway def1"# ระบุ DNS serverspush "dhcp-option DNS 8.8.8.8"push "dhcp-option DNS 8.8.4.4"# อนุญาตการเชื่อมต่อกับไคลเอนต์ที่แตกต่างกันด้วยเหมือนกัน keyduplicate-cn# TLS protectiontls-auth /etc/openvpn/server/ta.key 0cipher AES-256-CBCtls-version-min 1.2tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS- DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256auth SHA512auth-nocache# อื่นๆ รายละเอียดการกำหนดค่าkeepalive 20 60persist-keypersist-tuncomp-lzo yesdaemonuserไม่มีใครกลุ่มไม่มีใคร# เส้นทางไปยัง the log filelog-append /var/log/openvpn.logverb 3

จากนั้นบันทึกไฟล์. ฉันได้ระบุพอร์ต UDP เริ่มต้น 1194 สำหรับเซิร์ฟเวอร์ VPN ของฉันแล้ว แต่คุณสามารถระบุพอร์ตว่างบนเซิร์ฟเวอร์ของคุณสำหรับ OpenVPN ของคุณได้

ตอนนี้ คุณเพียงแค่ต้องตั้งกฎไฟร์วอลล์เพื่ออนุญาตการเชื่อมต่อและการกำหนดเส้นทางระหว่างเซ็กเมนต์

หากคุณกำลังใช้ firewalld ให้เปิดใช้งาน การส่งต่อ โมดูลเคอร์เนลก่อน:

# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p

net.ipv4.ip_forward =1

เพิ่มบริการ openvpn ให้กับ firewalld และ tun0 อินเทอร์เฟซไปยังโซนที่เชื่อถือได้:

# firewall-cmd --permanent --add-service=openvpn
# firewall-cmd --permanent --zone=trusted --add-interface=tun0

เปิดใช้งาน 'MASQUERADE' สำหรับโซนที่เชื่อถือได้ของไฟร์วอลล์:
# firewall-cmd --permanent --zone=trusted --add-masquerade

เปิดใช้งาน NAT:

# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.1.2.0/24 -o Server_IP -j MASQUERADE
# firewall-cmd –reload

หากคุณกำลังใช้ iptables โดยไม่มีไฟร์วอลล์ ให้รันคำสั่งเหล่านี้:

# iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o eth0 -j MASQUERADE
# iptables -A INPUT -p udp –dport 1194 -j ACCEPT
# service iptables save

เรียกใช้บริการ OpenVPN และเพิ่มในการเริ่มต้น:

# systemctl start openvpn@server
# systemctl enable openvpn@server

ตรวจสอบให้แน่ใจว่าพอร์ต udp\1194 กำลังฟังโดยบริการ openvpn:

# lsof -i:1194

คำสั่ง PID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิด ชื่อโหนดopenvpn 12327 ไม่มีคน 5u IPv4 45122 0t0 UDP *:openvpn

ตรวจสอบการตั้งค่า IP ของอินเทอร์เฟซเครือข่าย:

# ip a

<ก่อนหน้า>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3:tun0: mtu 1500 qdisc pfifo_fast สถานะ UNKNOWN กลุ่มเริ่มต้น qlen 100link/noneinet 10.1.2.1 เพียร์ 10.1.2.2/32 ขอบเขตทั่วโลก tun0valid_lft เป็นที่ต้องการถาวรตลอดไป

อย่างที่คุณเห็น เครือข่ายที่ระบุระหว่างการกำหนดค่าจะถูกเพิ่มไปยัง tun0 อุปกรณ์

นี่คือการตั้งค่าขั้นต่ำเพื่อให้ OpenVPN ของคุณทำงานได้

จะเชื่อมต่อหลายสำนักงาน (คอมพิวเตอร์) โดยใช้ OpenVPN ได้อย่างไร

มาดูวิธีเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN จากคอมพิวเตอร์ระยะไกลสองเครื่องที่มีการเข้าถึงอินเทอร์เน็ตผ่าน NAT และรวมเข้าด้วยกันเป็นเครือข่ายเดียว ในการเชื่อมต่อจากคอมพิวเตอร์ที่ใช้ Windows กับเซิร์ฟเวอร์ OpenVPN ฉันใช้ไคลเอนต์อย่างเป็นทางการ คุณสามารถดาวน์โหลดได้จากเว็บไซต์อย่างเป็นทางการ แต่เราจะไม่อธิบายโดยละเอียด และไปที่การกำหนดค่าโดยตรง

หลังจากที่คุณได้ติดตั้งไคลเอนต์แล้ว ไปที่การสร้างไฟล์การกำหนดค่าที่นี่:

C:\Program Files\OpenVPN\config\

ฉันได้สร้างไฟล์ที่มีชื่อไคลเอนต์และเพิ่มเนื้อหาต่อไปนี้:

clientdev tunproto udpremote 112.113.114.15 1194resolv-retry infinitenobindblock-outside-dnspersist-keypersist-tunmute-replay-warningsremote-cert-tls servertls-clientauth SHA512tls-auth "C:\\Program Files\\Open\VPN ta.key" 1remote-cert-eku "TLS Web Server Authentication"ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"cert "C:\\Program Files\\OpenVPN\\config\ \admin1.crt"key "C:\\Program Files\\OpenVPN\\config\\admin1.key"cipher AES-256-CBCcomp-lzoverb 3

ในการกำหนดค่า เราต้องการใบรับรองไคลเอ็นต์ ความปลอดภัย และเซิร์ฟเวอร์ที่เราสร้างไว้ก่อนหน้านี้ คุณต้องดาวน์โหลดจากเซิร์ฟเวอร์ของคุณและวางลงในโฟลเดอร์ในเครื่อง จากนั้นระบุเส้นทางไปยังไฟล์การกำหนดค่าไคลเอนต์ OpenVPN

จากนั้นคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยคลิกที่ไอคอน OpenVPN ในถาด:

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Linux CentOS/RHEL

ฉันได้เชื่อมต่อและได้รับที่อยู่ IP ต่อไปนี้สำหรับอุปกรณ์ของฉัน:

ที่อยู่ IPv4 . . . . . . . . . . . :10.1.2.14 ซับเน็ตมาสก์ . . . . . . . . . :255.255.255.0

บนคอมพิวเตอร์เครื่องที่สองหลัง NAT ฉันดำเนินการแบบเดียวกันและสร้างใบรับรองสำหรับผู้ใช้คนที่สองล่วงหน้า หลังจากเชื่อมต่อ พีซีเครื่องที่สองยังได้รับที่อยู่ IP จากเครือข่าย VPN:

ที่อยู่ IPv4 . . . . . . . . . . . :10.1.2.16 ซับเน็ตมาสก์ . . . . . . . . . :255.255.255.0

หลังจากเชื่อมต่อแล้ว คอมพิวเตอร์ทั้งสองเครื่องจะอยู่ในเครือข่ายเดียวกันและมองเห็นกันและกัน

ปิงพีซีเครื่องที่สอง:

ส่ง Ping 10.1.2.16 ด้วยข้อมูล 32 ไบต์:ตอบกลับตั้งแต่ 10.1.2.16:ไบต์=32 เวลา=73ms TTL=127

ปิงบนพีซีเครื่องแรก:

ส่ง Ping 10.1.2.14 ด้วยข้อมูล 32 ไบต์:ตอบกลับตั้งแต่ 10.1.2.14:ไบต์=32 เวลา=79ms TTL=127

ไคลเอนต์ VPN ที่เชื่อมต่อทั้งสองสามารถส่งแพ็กเก็ตและถ่ายโอนไฟล์ถึงกันโดยตรง ดังนั้น เราสามารถรวมอุปกรณ์สองเครื่องที่อยู่ในสถานที่ต่างๆ ของประเทศไว้ในเครือข่ายท้องถิ่นเดียว

คุณสามารถสร้างคีย์หรือใบรับรองจำนวนเท่าใดก็ได้สำหรับผู้ใช้บนเซิร์ฟเวอร์ OpenVPN ของคุณ หากคุณต้องการใบรับรองใหม่ ให้รันคำสั่งเหล่านี้สำหรับ /etc/openvpn/easy-rsa/3:

# ./easyrsa gen-req clientname nopass
# ./easyrsa sign-req client clientname

อย่าลืมเพิกถอนใบรับรองไคลเอ็นต์หากไม่ได้ใช้เพื่อรักษาเครือข่ายของคุณให้ปลอดภัย