ฉันมีคำถามที่แน่นอนไม่กี่เดือนที่ผ่านมา แต่นอกจากนี้ฉันต้องการที่จะมีการเชื่อมต่อ IPv6 ถ้าเป็นไปได้ คุณอาจสนใจคำถามของฉันใน Serverfault:
ฉันมี NIC เพียงหนึ่งอัน ("อินเทอร์เฟซเครือข่าย") บนเซิร์ฟเวอร์ของฉันเพื่อใช้งาน ในการตั้งค่าของฉัน NetworkManager ไม่เพียงพอเพราะฉันต้องเรียกใช้สคริปต์ที่กำหนดเองเพื่อรองรับ IPv6 เพื่อความเรียบง่าย แต่ฉันจะใช้ NetworkManager ที่นี่และละเว้นการสนับสนุน IPv6
ก่อนอื่นเพียงตัดสินใจวิธีการตรวจสอบสิทธิ์ ฉันจะใช้วิธีการรับรองความปลอดภัยที่ทำงานเหมือน SSL: ในระหว่างการจับมือกันจะมีการเลือกความลับทั่วไปซึ่งจะใช้สำหรับเซสชัน วิธีอื่นเป็นรหัสแชร์ ชื่อผู้ใช้และรหัสผ่าน
เซิร์ฟเวอร์
1. เตรียมความพร้อม
ก่อนอื่นให้ติดตั้งเซิร์ฟเวอร์ openvpn sudo apt-get install openvpn
นี้เป็นเรื่องง่ายเหมือน ส่วนที่ยากคือการกำหนดค่า /etc/openvpn
การกำหนดค่าในปัจจุบันคือ
2. กำหนดค่าการรับรองความถูกต้อง
เซิร์ฟเวอร์ต้องการใบรับรองสำหรับการระบุตัวเองและลูกค้า ใบรับรองเหล่านี้จะถูกดึงมาจาก CA (Common Authority) การสร้างใบรับรองและกุญแจส่วนตัวที่เกี่ยวข้องสามารถทำได้บนเครื่องใด ๆ ไม่จำเป็นต้องทำบนเซิร์ฟเวอร์ หากคุณหวาดระแวงจริงๆคุณควรทำบนเครื่องที่ไม่ได้เชื่อมต่อกับเครือข่ายและใช้หน่วยความจำสำหรับการถ่ายโอนใบรับรอง
สร้าง CA และใบรับรองสำหรับเซิร์ฟเวอร์
ขั้นตอนนี้จะต้องทำอีกครั้งเว้นแต่ว่าคีย์ส่วนตัวของ CA ของคุณจะถูกบุกรุก ในกรณีนั้นสามารถสร้างใบรับรองที่ถูกต้องซึ่งเซิร์ฟเวอร์จะยอมรับซึ่งจะทำให้เกิดการละเมิดความปลอดภัย
เอกสารอย่างเป็นทางการ/etc/openvpn
แสดงให้เห็นที่จะทำในการบริหาร ฉันไม่ใช่แฟนตัวยงของการทำงานทุกอย่างให้เป็นรากดังนั้นฉันจะใส่ไว้ในไดเรกทอรีอื่น
สร้างไดเร็กทอรีการบริหารระบบและคัดลอกไฟล์ภายในโดยรัน:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- แก้ไขค่าเริ่มต้น
vars
ตามต้องการตัวอย่างเช่นการตั้งค่าKEY_SIZE=2048
เนื่องจากคุณเป็นคนหวาดระแวง
โหลดตัวแปรและสร้างไดเรกทอรีหลักโดยการเรียกใช้:
. vars
หากคุณได้รับข้อผิดพลาดให้No ... openssl.cnf file could be found
Further invocations will fail
เรียกใช้ln -s openssl-1.0.0.cnf openssl.cnf
จากนั้น. vars
อีกครั้ง
หากนี่เป็นครั้งแรกที่คุณใช้ CA นี้เตรียมสภาพแวดล้อมของคีย์ ไม่ได้เรียกใช้คำสั่งนี้ถ้าคุณต้องการที่จะรักษาแคลิฟอร์เนียไว้ก่อนหน้านี้ของคุณ ca.crt
การทำเช่นนี้จะทำให้คุณต้องปรับใหม่
./clean-all
./build-ca
สร้างแคลิฟอร์เนียโดยการดำเนินการ คุณสามารถกรอกรายละเอียดใด ๆ ที่คุณต้องการ แต่โปรดทราบว่าข้อมูลนี้จะปรากฏในล็อกไฟล์เมื่อไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ นี้จะสร้างไฟล์ca.key
และในโฟลเดอร์ย่อยca.crt
keys
เก็บca.key
ความลับไฟล์ในทุกสถานการณ์ การไม่ทำเช่นนั้นจะอนุญาตให้ทุกคนที่มีกุญแจเชื่อมต่อกับเซิร์ฟเวอร์ของคุณ
./revoke-full server
หากคุณมีใบรับรองก่อนหน้านี้ที่สูญหายหรือหมดอายุแล้วคุณต้องให้เพิกถอนเก่าครั้งแรกกับ มิฉะนั้นคุณจะได้รับข้อผิดพลาดของฐานข้อมูล
สร้างใบรับรองสำหรับเซิร์ฟเวอร์โดยเรียกใช้:
./build-key-server server
เมื่อถูกถามรหัสผ่านให้ปล่อยว่างไว้เว้นแต่คุณจะยินดีป้อนรหัสผ่านทุกครั้งที่เซิร์ฟเวอร์เริ่มทำงาน (ไม่แนะนำ) ยืนยันการลงนามใบรับรองและยืนยัน สองไฟล์ใหม่จะปรากฏในไดเรกทอรีkeys
: และserver.key
server.crt
DH และใช้เตรียมตัวสำหรับ tls-auth
สร้างพารามิเตอร์Diffie-Hellmanโดยใช้:
./build-dh
ต่อแข็งเคล็ดลับtls-auth
การใช้งาน ในการสร้างคีย์ลับร่วมกันโดยใช้:
openvpn --genkey --secret ta.key
ไฟล์ผลลัพธ์ ( ta.key
) จะต้องแจกจ่ายให้กับลูกค้าเช่นกัน แต่คุณไม่ควรวางไว้ในที่สาธารณะ
สร้างใบรับรองสำหรับลูกค้า
สำหรับลูกค้าแต่ละรายควรทำซ้ำขั้นตอนเหล่านี้:
ป้อนไดเรกทอรีที่คุณสร้าง CA และใบรับรองเซิร์ฟเวอร์ของคุณ:
cd ~/openvpn-admin/easy-rsa
หากคุณข้ามขั้นตอนการสร้าง CA เนื่องจากคุณมีอยู่แล้วคุณต้องโหลดตัวแปรก่อน:
. vars
- ถ้าคุณกำลังสร้างใบรับรองใหม่เพราะคนเก่าจะสูญหายหรือหมดอายุแล้ว
./revoke-full you
คุณจะต้องเพิกถอนเก่าครั้งแรกกับ มิฉะนั้นคุณจะได้รับข้อผิดพลาดของฐานข้อมูล
สร้างใบรับรองลูกค้าyou.key
และใบรับรองที่เกี่ยวข้องyou.crt
:
./build-key you
CommonName
ต้องไม่ซ้ำกัน ปล่อยให้รหัสผ่านว่างเปล่าหากคุณใช้ KDE เนื่องจากยังไม่รองรับตั้งแต่ 10.10 เช่นเดียวกับการสร้างใบรับรองเซิร์ฟเวอร์ให้ยืนยันการลงชื่อรับรองและยอมรับการเปลี่ยนแปลง
3. ติดตั้งบริการ OpenVPN
ตามค่าเริ่มต้น OpenVPN จะทำงานเหมือนรูทเมื่อยอมรับการเชื่อมต่อ ไม่ใช่ความคิดที่ดีถ้าบริการสามารถเข้าถึงได้จากอินเทอร์เน็ตที่ชั่วร้าย
สร้างผู้ใช้เฉพาะสำหรับ OpenVPN พูดว่าopenvpn
:
sudo useradd openvpn
คัดลอกไฟล์server.key
, server.crt
, ca.crt
และdh1024.pem
(หรือdh2048.pem
ถ้าคุณได้เปลี่ยนขนาดของคีย์) /etc/openvpn
จากไดเรกทอรีกุญแจเข้าไป การอนุญาต 400 (เจ้าของแบบอ่านอย่างเดียว) ถือว่าใช้ได้
sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
คัดลอกไฟล์ta.key
เช่นกัน:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
สร้างไฟล์/etc/openvpn/server.conf
และวางบรรทัดถัดไปลงใน:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
# Compress data to save bandwidth
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
# Logs are useful for debugging
log-append openvpn-log
verb 3
mute 10
ตั้งค่าการอนุญาตที่เหมาะสมในนั้นไม่จำเป็นต้องเป็นความลับ แต่ฉันไม่ต้องการรั่วไหลรายละเอียดการกำหนดค่าดังนั้น:
sudo chmod 640 /etc/openvpn/server.conf
4. จบเซิร์ฟเวอร์
หากคุณสร้างใบรับรองบนเซิร์ฟเวอร์คุณควรเข้ารหัสหรือย้ายออกจากเซิร์ฟเวอร์ ในกรณีใด ๆ ไม่ได้สูญเสียและca.key
server.key
ในกรณีแรกผู้อื่นจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณ ในระยะหลังMITMเป็นไปได้
ไคลเอนต์
นอกเหนือจากที่อยู่ IP ของเซิร์ฟเวอร์ผู้ดูแลเซิร์ฟเวอร์ควรมอบไฟล์ต่อไปนี้:
ca.crt
: สำหรับการตรวจสอบใบรับรอง
server.crt
: สำหรับการตรวจสอบเซิร์ฟเวอร์และสื่อสารกับมัน
ta.key
: เพื่อเสริมความปลอดภัย
you.crt
: เพื่อระบุตัวคุณเองกับเซิร์ฟเวอร์
you.key
: มันเหมือนกับรหัสผ่านของคุณการอนุญาตให้ใช้ไฟล์ควรเป็น 400 (สำหรับเจ้าของเท่านั้น)
1. การติดตั้ง
ติดตั้ง OpenVPN และปลั๊กอิน NetworkManager (เหมาะสำหรับ KDE และ Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
อยู่ในพื้นที่เก็บข้อมูลของจักรวาล
2. การกำหนดค่า
ในแผงควบคุมให้ใช้รายละเอียดต่อไปนี้:
- Gateway: ที่อยู่ IP ของเซิร์ฟเวอร์
- ประเภท: "ใบรับรอง (TLS)" (Gnome) หรือ "ใบรับรอง X.509" (KDE)
- ใบรับรอง CA: เส้นทางไปยัง
ca.crt
- ใบรับรองผู้ใช้: พา ธ ไปยัง
you.crt
- รหัสส่วนตัว: เส้นทางไปยัง
you.key
ที่ขั้นสูง :
- พอร์ตเกตเวย์: อัตโนมัติ (1194) (ไม่จำเป็นต้องเปลี่ยน)
- ใช้การบีบอัดข้อมูล LZO: เปิดใช้งาน
- ใช้การเชื่อมต่อ TCP: ปิดการใช้งาน
- ใช้อุปกรณ์ TAP: เปิดใช้งาน
- Cipher: ค่าเริ่มต้น
- การพิสูจน์ตัวตน HMAC: ค่าเริ่มต้น
- ใช้ TLS การตรวจสอบ: เปิดใช้งาน
ระบุเส้นทางไฟล์กุญแจสำคัญในการta.key
และการตั้งค่า "คีย์ทิศทาง" 1
เพื่อ
- ( สิ่งที่ต้องทำ - ตรวจสอบออก ) เซิร์ฟเวอร์ผลักเกตเวย์เริ่มต้นเพื่อให้การรับส่งข้อมูลทั้งหมดผ่านการเชื่อมต่อ VPN ครั้งล่าสุดที่ฉันตรวจสอบปลั๊กอิน network-manager-openvpn ไม่ได้ทำ
หากคุณไม่สามารถใช้งาน NetworkManager ได้หรือไม่ต้องการใช้งานให้ใส่ไฟล์ ( ca.crt
, ... ) ลงใน/etc/openvpn
ไฟล์และสร้าง/etc/openvpn/client.conf
ไฟล์:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
หากคุณไม่ต้องการเปิดใช้งาน VPN นี้ในเวลาบูตให้แก้ไข/etc/default/openvpn
และยกเลิกการใส่เครื่องหมายในบรรทัดถัดไปโดยลบ#
:
#AUTOSTART="none"
หากต้องการเริ่มการเชื่อมต่อนี้ให้เรียกใช้:
sudo /etc/init.d/openvpn start client
client
client.conf
ควรจะเปลี่ยนชื่อถ้าแฟ้มการกำหนดค่าของคุณจะไม่ได้ตั้งชื่อ ตัวอย่าง: ถ้าคุณได้รับการตั้งชื่อไฟล์การกำหนดค่าของคุณคุณจะต้องทำงานsafe.conf
sudo /etc/init.d/openvpn start safe
หากต้องการหยุด OpenVPN คุณต้องเรียกใช้:
sudo /etc/init.d/openvpn stop