หนังสือ Linux in Action

หนังสือ Linux in Action สวัสดีชาวคาโบร! ในหนังสือ David Clinton บรรยายถึงโครงการในชีวิตจริง 12 โครงการ รวมถึงการทำให้ระบบสำรองและกู้คืนของคุณเป็นอัตโนมัติ การตั้งค่าคลาวด์ไฟล์ส่วนตัวสไตล์ Dropbox และการสร้างเซิร์ฟเวอร์ MediaWiki ของคุณเอง คุณจะได้สำรวจการจำลองเสมือน การกู้คืนความเสียหาย ความปลอดภัย การสำรองข้อมูล DevOps และการแก้ไขปัญหาระบบผ่านกรณีศึกษาที่น่าสนใจ แต่ละบทจะจบลงด้วยการทบทวนแนวทางปฏิบัติที่ดีที่สุด อภิธานคำศัพท์ใหม่ๆ และแบบฝึกหัด

ข้อความที่ตัดตอนมา “10.1. การสร้างอุโมงค์ OpenVPN"

ฉันได้พูดคุยกันมากมายเกี่ยวกับการเข้ารหัสในหนังสือเล่มนี้ SSH และ SCP สามารถปกป้องข้อมูลที่ถ่ายโอนผ่านการเชื่อมต่อระยะไกล (บทที่ 3) การเข้ารหัสไฟล์สามารถปกป้องข้อมูลในขณะที่จัดเก็บไว้บนเซิร์ฟเวอร์ (บทที่ 8) และใบรับรอง TLS/SSL สามารถปกป้องข้อมูลที่ถ่ายโอนระหว่างไซต์และเบราว์เซอร์ไคลเอนต์ (บทที่ 9) . แต่บางครั้งข้อมูลของคุณจำเป็นต้องได้รับการปกป้องผ่านการเชื่อมต่อที่หลากหลาย ตัวอย่างเช่น สมาชิกในทีมของคุณบางคนอาจทำงานอยู่บนท้องถนนขณะเชื่อมต่อ Wi-Fi ผ่านฮอตสปอตสาธารณะ คุณไม่ควรคิดไปเองว่าจุดเข้าใช้งานทั้งหมดนั้นปลอดภัย แต่บุคลากรของคุณต้องการวิธีเชื่อมต่อกับทรัพยากรของบริษัท—และนั่นคือจุดที่ VPN สามารถช่วยได้

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

การใช้เครือข่ายแบบขยายนี้ ผู้ดูแลระบบสามารถทำงานบนเซิร์ฟเวอร์ได้จากทุกที่ แต่ที่สำคัญกว่านั้น บริษัทที่มีทรัพยากรกระจายอยู่ในสถานที่หลายแห่งสามารถทำให้ทุกกลุ่มที่ต้องการมองเห็นและเข้าถึงได้ไม่ว่าจะอยู่ที่ใดก็ตาม (รูปที่ 10.1)

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

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

หนังสือ Linux in Action

10.1.1. การกำหนดค่าเซิร์ฟเวอร์ OpenVPN

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

หนังสือ Linux in Action
เมื่อปฏิบัติตามแนวทางนี้และตั้งชื่อที่เหมาะสมให้กับแต่ละเครื่องที่คุณใช้งาน คุณจะสามารถติดตามตำแหน่งที่คุณอยู่ได้อย่างง่ายดาย

หลังจากใช้ชื่อโฮสต์ คุณอาจพบข้อความ Unable to Resolve Host OpenVPN-Server ที่น่ารำคาญ เมื่อดำเนินการคำสั่งที่ตามมา การอัพเดตไฟล์ /etc/hosts ด้วยชื่อโฮสต์ใหม่ที่เหมาะสมควรแก้ไขปัญหานี้ได้

กำลังเตรียมเซิร์ฟเวอร์ของคุณสำหรับ OpenVPN

ในการติดตั้ง OpenVPN บนเซิร์ฟเวอร์ของคุณ คุณต้องมีแพ็คเกจสองแพ็คเกจ: openvpn และ easy-rsa (เพื่อจัดการกระบวนการสร้างคีย์การเข้ารหัส) ผู้ใช้ CentOS ควรติดตั้งพื้นที่เก็บข้อมูล epel-release ก่อนหากจำเป็น เช่นเดียวกับที่คุณทำในบทที่ 2 เพื่อให้สามารถทดสอบการเข้าถึงแอปพลิเคชันเซิร์ฟเวอร์ คุณยังสามารถติดตั้งเว็บเซิร์ฟเวอร์ Apache (apache2 บน Ubuntu และ httpd บน CentOS)

ขณะที่คุณกำลังตั้งค่าเซิร์ฟเวอร์ ฉันขอแนะนำให้เปิดใช้งานไฟร์วอลล์ที่บล็อกพอร์ตทั้งหมด ยกเว้น 22 (SSH) และ 1194 (พอร์ตเริ่มต้นของ OpenVPN) ตัวอย่างนี้แสดงให้เห็นว่า ufw ทำงานบน Ubuntu อย่างไร แต่ฉันแน่ใจว่าคุณยังจำโปรแกรมไฟร์วอลล์ CentOS จากบทที่ 9 ได้:

# ufw enable
# ufw allow 22
# ufw allow 1194

หากต้องการเปิดใช้งานการกำหนดเส้นทางภายในระหว่างอินเทอร์เฟซเครือข่ายบนเซิร์ฟเวอร์ คุณต้องยกเลิกหมายเหตุหนึ่งบรรทัด (net.ipv4.ip_forward = 1) ในไฟล์ /etc/sysctl.conf ซึ่งจะทำให้ไคลเอ็นต์ระยะไกลสามารถเปลี่ยนเส้นทางได้ตามต้องการเมื่อมีการเชื่อมต่อแล้ว เพื่อให้ตัวเลือกใหม่ใช้งานได้ ให้รัน sysctl -p:

# nano /etc/sysctl.conf
# sysctl -p

ขณะนี้สภาพแวดล้อมเซิร์ฟเวอร์ของคุณได้รับการกำหนดค่าอย่างสมบูรณ์แล้ว แต่ยังมีอีกสิ่งหนึ่งที่ต้องทำก่อนที่คุณจะพร้อม: คุณจะต้องทำตามขั้นตอนต่อไปนี้ให้เสร็จสิ้น (เราจะกล่าวถึงรายละเอียดในครั้งต่อไป)

  1. สร้างชุดคีย์การเข้ารหัสโครงสร้างพื้นฐานคีย์สาธารณะ (PKI) บนเซิร์ฟเวอร์โดยใช้สคริปต์ที่มาพร้อมกับแพ็คเกจ easy-rsa โดยพื้นฐานแล้ว เซิร์ฟเวอร์ OpenVPN ยังทำหน้าที่เป็นผู้ออกใบรับรอง (CA) ของตนเองด้วย
  2. เตรียมกุญแจที่เหมาะสมสำหรับลูกค้า
  3. กำหนดค่าไฟล์ server.conf สำหรับเซิร์ฟเวอร์
  4. ตั้งค่าไคลเอนต์ OpenVPN ของคุณ
  5. ตรวจสอบ VPN ของคุณ

กำลังสร้างคีย์เข้ารหัส

เพื่อให้ทุกอย่างง่ายขึ้น คุณสามารถตั้งค่าโครงสร้างพื้นฐานหลักของคุณบนเครื่องเดียวกับที่เซิร์ฟเวอร์ OpenVPN ทำงานอยู่ อย่างไรก็ตาม แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยมักแนะนำให้ใช้เซิร์ฟเวอร์ CA แยกต่างหากสำหรับการปรับใช้จริง กระบวนการสร้างและแจกจ่ายทรัพยากรคีย์การเข้ารหัสเพื่อใช้ใน OpenVPN แสดงไว้ในรูปที่ 10.2 XNUMX.

หนังสือ Linux in Action
เมื่อคุณติดตั้ง OpenVPN ไดเร็กทอรี /etc/openvpn/ จะถูกสร้างขึ้นโดยอัตโนมัติ แต่ยังไม่มีอะไรอยู่ในนั้น แพ็คเกจ openvpn และ easy-rsa มาพร้อมกับไฟล์เทมเพลตตัวอย่างที่คุณสามารถใช้เป็นพื้นฐานสำหรับการกำหนดค่าของคุณได้ หากต้องการเริ่มกระบวนการรับรอง ให้คัดลอกไดเร็กทอรีเทมเพลต easy-rsa จาก /usr/share/ ไปยัง /etc/openvpn และเปลี่ยนเป็นไดเร็กทอรี easy-rsa/:

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

ไดเร็กทอรี easy-rsa จะมีสคริปต์จำนวนหนึ่ง ในตาราง 10.1 แสดงรายการเครื่องมือที่คุณจะใช้ในการสร้างคีย์

หนังสือ Linux in Action

การดำเนินการข้างต้นต้องใช้สิทธิ์รูท ดังนั้นคุณต้องรูทผ่าน sudo su

ไฟล์แรกที่คุณจะใช้งานเรียกว่า vars และมีตัวแปรสภาพแวดล้อมที่ easy-rsa ใช้เมื่อสร้างคีย์ คุณต้องแก้ไขไฟล์เพื่อใช้ค่าของคุณเองแทนค่าเริ่มต้นที่มีอยู่แล้ว นี่คือลักษณะไฟล์ของฉัน (รายการ 10.1)

รายการ 10.1. ส่วนหลักของไฟล์ /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

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

อย่าลืมรันไฟล์อีกครั้งโดยใช้เชลล์ใหม่เพื่อให้กระบวนการที่ยังไม่เสร็จเสร็จสมบูรณ์ เมื่อดำเนินการเสร็จสิ้น สคริปต์จะแจ้งให้คุณรันสคริปต์อื่น นั่นคือล้างทั้งหมด เพื่อลบเนื้อหาใดๆ ในไดเร็กทอรี /etc/openvpn/easy-rsa/keys/:

หนังสือ Linux in Action
ขั้นตอนต่อไปคือการเรียกใช้สคริปต์ clean-all ตามด้วย build-ca ซึ่งใช้สคริปต์ pkitool เพื่อสร้างใบรับรองหลัก คุณจะถูกขอให้ยืนยันการตั้งค่าข้อมูลประจำตัวที่ได้รับจาก vars:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

ถัดมาคือสคริปต์ build-key-server เนื่องจากใช้สคริปต์ pkitool เดียวกันกับใบรับรองหลักใหม่ คุณจะเห็นคำถามเดียวกันเพื่อยืนยันการสร้างคู่คีย์ คีย์จะถูกตั้งชื่อตามอาร์กิวเมนต์ที่คุณส่ง ซึ่งโดยปกติจะเป็นเซิร์ฟเวอร์ เว้นแต่คุณจะใช้งาน VPN หลายตัวบนเครื่องนี้ ดังตัวอย่าง:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

OpenVPN ใช้พารามิเตอร์ที่สร้างโดยอัลกอริทึม Diffie-Hellman (โดยใช้ build-dh) เพื่อเจรจาการรับรองความถูกต้องสำหรับการเชื่อมต่อใหม่ ไฟล์ที่สร้างขึ้นที่นี่ไม่จำเป็นต้องเป็นความลับ แต่ต้องสร้างขึ้นโดยใช้สคริปต์ build-dh สำหรับคีย์ RSA ที่ใช้งานอยู่ในปัจจุบัน หากคุณสร้างคีย์ RSA ใหม่ในอนาคต คุณจะต้องอัปเดตไฟล์ Diffie-Hellman ด้วย:

# ./build-dh

คีย์ฝั่งเซิร์ฟเวอร์ของคุณจะจบลงที่ไดเร็กทอรี /etc/openvpn/easy-rsa/keys/ แต่ OpenVPN ไม่ทราบเรื่องนี้ ตามค่าเริ่มต้น OpenVPN จะค้นหาคีย์ใน /etc/openvpn/ ดังนั้นให้คัดลอก:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

กำลังเตรียมคีย์การเข้ารหัสไคลเอ็นต์

ดังที่คุณเห็นแล้ว การเข้ารหัส TLS ใช้คู่ของคีย์ที่ตรงกัน: อันหนึ่งติดตั้งบนเซิร์ฟเวอร์และอีกอันติดตั้งบนไคลเอนต์ระยะไกล ซึ่งหมายความว่าคุณจะต้องมีคีย์ไคลเอ็นต์ pkitool เพื่อนเก่าของเราคือสิ่งที่คุณต้องการสำหรับสิ่งนี้ ในตัวอย่างนี้ เมื่อเรารันโปรแกรมในไดเร็กทอรี /etc/openvpn/easy-rsa/ เราจะส่งผ่านอาร์กิวเมนต์ไคลเอนต์เพื่อสร้างไฟล์ชื่อ client.crt และ client.key:

# ./pkitool client

ไฟล์ไคลเอนต์สองไฟล์ พร้อมด้วยไฟล์ ca.crt ดั้งเดิมที่ยังอยู่ในไดเร็กทอรี Keys/ ควรถูกถ่ายโอนไปยังไคลเอนต์ของคุณอย่างปลอดภัยแล้ว เนื่องจากความเป็นเจ้าของและสิทธิ์ในการเข้าถึง สิ่งนี้อาจไม่ง่ายนัก วิธีที่ง่ายที่สุดคือการคัดลอกเนื้อหาของไฟล์ต้นฉบับด้วยตนเอง (และไม่มีอะไรนอกจากเนื้อหานั้น) ลงในเทอร์มินัลที่ทำงานบนเดสก์ท็อปของพีซีของคุณ (เลือกข้อความ คลิกขวาที่ไฟล์แล้วเลือกคัดลอกจากเมนู) จากนั้นวางสิ่งนี้ลงในไฟล์ใหม่ด้วยชื่อเดียวกับที่คุณสร้างในเทอร์มินัลที่สองที่เชื่อมต่อกับไคลเอนต์ของคุณ

แต่ใครๆ ก็ตัดแปะได้ ให้คิดเหมือนผู้ดูแลระบบแทน เพราะคุณจะไม่สามารถเข้าถึง GUI ที่สามารถตัด/วางได้เสมอไป คัดลอกไฟล์ไปยังโฮมไดเร็กตอรี่ของผู้ใช้ของคุณ (เพื่อให้การดำเนินการ scp ระยะไกลสามารถเข้าถึงได้) จากนั้นใช้ chown เพื่อเปลี่ยนความเป็นเจ้าของไฟล์จากรูทไปเป็นผู้ใช้ที่ไม่ใช่รูททั่วไป เพื่อให้สามารถดำเนินการการกระทำ scp ระยะไกลได้ ตรวจสอบให้แน่ใจว่าไฟล์ทั้งหมดของคุณได้รับการติดตั้งและเข้าถึงได้ในปัจจุบัน คุณจะย้ายพวกเขาไปยังไคลเอนต์ในภายหลัง:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

ด้วยคีย์เข้ารหัสครบชุดที่พร้อมใช้งาน คุณจะต้องแจ้งให้เซิร์ฟเวอร์ทราบว่าคุณต้องการสร้าง VPN อย่างไร ทำได้โดยใช้ไฟล์ server.conf

การลดจำนวนการกดแป้นพิมพ์

มีการพิมพ์มากเกินไปหรือไม่? การขยายด้วยวงเล็บจะช่วยลดคำสั่งทั้งหกนี้เหลือเพียงสองคำสั่ง ฉันแน่ใจว่าคุณสามารถศึกษาสองตัวอย่างนี้และทำความเข้าใจกับสิ่งที่เกิดขึ้นได้ ที่สำคัญกว่านั้น คุณจะสามารถเข้าใจวิธีนำหลักการเหล่านี้ไปใช้กับการดำเนินการที่เกี่ยวข้องกับองค์ประกอบนับสิบหรือหลายร้อยองค์ประกอบ:

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

การตั้งค่าไฟล์ server.conf

คุณจะรู้ได้อย่างไรว่าไฟล์ server.conf ควรมีลักษณะอย่างไร จำเทมเพลตไดเร็กทอรี easy-rsa ที่คุณคัดลอกมาจาก /usr/share/? เมื่อคุณติดตั้ง OpenVPN คุณจะเหลือไฟล์เทมเพลตการกำหนดค่าที่บีบอัดซึ่งคุณสามารถคัดลอกไปที่ /etc/openvpn/ ฉันจะต่อยอดจากความจริงที่ว่าเทมเพลตถูกเก็บถาวรแล้วและแนะนำให้คุณรู้จักกับเครื่องมือที่มีประโยชน์: zcat

คุณรู้อยู่แล้วเกี่ยวกับการพิมพ์เนื้อหาข้อความของไฟล์ไปยังหน้าจอโดยใช้คำสั่ง cat แต่จะเกิดอะไรขึ้นถ้าไฟล์ถูกบีบอัดโดยใช้ gzip? คุณสามารถแตกไฟล์ได้ตลอดเวลา จากนั้น cat ก็จะส่งออกไฟล์ออกมาอย่างมีความสุข แต่นั่นเป็นขั้นตอนที่มากกว่าที่จำเป็นหนึ่งหรือสองขั้นตอน ดังที่คุณอาจเดาได้ คุณสามารถใช้คำสั่ง zcat เพื่อโหลดข้อความที่คลายการบีบอัดลงในหน่วยความจำในขั้นตอนเดียว ในตัวอย่างต่อไปนี้ แทนที่จะพิมพ์ข้อความลงบนหน้าจอ คุณจะเปลี่ยนเส้นทางไปยังไฟล์ใหม่ที่เรียกว่า server.conf:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

ลองแยกเอกสารที่เป็นประโยชน์และกว้างขวางที่มาพร้อมกับไฟล์ออกไป แล้วดูว่ามันจะมีลักษณะอย่างไรเมื่อคุณแก้ไขเสร็จแล้ว โปรดทราบว่าเครื่องหมายอัฒภาค (;) จะบอก OpenVPN ว่าอย่าอ่านหรือดำเนินการบรรทัดถัดไป (รายการ 10.2)

หนังสือ Linux in Action
มาดูการตั้งค่าเหล่านี้บ้าง

  • ตามค่าเริ่มต้น OpenVPN จะทำงานบนพอร์ต 1194 คุณสามารถเปลี่ยนแปลงสิ่งนี้ได้ เช่น เพื่อซ่อนกิจกรรมของคุณเพิ่มเติม หรือหลีกเลี่ยงความขัดแย้งกับอุโมงค์อื่น ๆ ที่ใช้งานอยู่ เนื่องจากปี 1194 ต้องการการประสานงานกับลูกค้าเพียงเล็กน้อย วิธีที่ดีที่สุดคือทำเช่นนี้
  • OpenVPN ใช้ Transmission Control Protocol (TCP) หรือ User Datagram Protocol (UDP) ในการส่งข้อมูล TCP อาจช้ากว่าเล็กน้อย แต่มีความน่าเชื่อถือมากกว่าและมีแนวโน้มที่จะเข้าใจได้มากกว่าโดยแอปพลิเคชันที่ทำงานบนปลายทั้งสองด้านของทันเนล
  • คุณสามารถระบุ dev tun ได้เมื่อคุณต้องการสร้างอุโมงค์ IP ที่เรียบง่ายและมีประสิทธิภาพมากขึ้นซึ่งมีเนื้อหาข้อมูลและไม่มีอะไรอื่นอีก ในทางกลับกัน หากคุณจำเป็นต้องเชื่อมต่ออินเทอร์เฟซเครือข่ายหลายอินเทอร์เฟซ (และเครือข่ายที่อินเทอร์เฟซเหล่านั้นเป็นตัวแทน) การสร้างอีเธอร์เน็ตบริดจ์ คุณจะต้องเลือก dev tap หากคุณไม่เข้าใจความหมายทั้งหมด ให้ใช้อาร์กิวเมนต์ tun
  • สี่บรรทัดถัดไปจะให้ OpenVPN ชื่อของไฟล์การตรวจสอบสิทธิ์สามไฟล์บนเซิร์ฟเวอร์และไฟล์ตัวเลือก dh2048 ที่คุณสร้างไว้ก่อนหน้านี้
  • บรรทัดเซิร์ฟเวอร์จะกำหนดช่วงและซับเน็ตมาสก์ที่จะใช้เพื่อกำหนดที่อยู่ IP ให้กับไคลเอนต์เมื่อเข้าสู่ระบบ
  • พารามิเตอร์พุชเสริม "เส้นทาง 10.0.3.0 255.255.255.0" ช่วยให้ไคลเอนต์ระยะไกลสามารถเข้าถึงเครือข่ายย่อยส่วนตัวด้านหลังเซิร์ฟเวอร์ การทำงานนี้ยังต้องมีการตั้งค่าเครือข่ายบนเซิร์ฟเวอร์เพื่อให้เครือข่ายย่อยส่วนตัวทราบเกี่ยวกับเครือข่ายย่อย OpenVPN (10.8.0.0)
  • port-share localhost 80 line ช่วยให้คุณสามารถเปลี่ยนเส้นทางการรับส่งข้อมูลไคลเอนต์ที่มาบนพอร์ต 1194 ไปยังเว็บเซิร์ฟเวอร์ในเครื่องที่รับฟังพอร์ต 80 (ซึ่งจะมีประโยชน์หากคุณจะใช้เว็บเซิร์ฟเวอร์เพื่อทดสอบ VPN ของคุณ) ใช้งานได้เท่านั้น จากนั้นเมื่อเลือกโปรโตคอล tcp
  • ผู้ใช้ none และกลุ่มบรรทัด nogroup ต้องเปิดใช้งานโดยการลบเครื่องหมายอัฒภาค (;) การบังคับให้ไคลเอ็นต์ระยะไกลทำงานโดยไม่มีใครและ nogroup ทำให้แน่ใจได้ว่าเซสชันบนเซิร์ฟเวอร์ไม่มีสิทธิพิเศษ
  • log ระบุว่ารายการบันทึกปัจจุบันจะเขียนทับรายการเก่าในแต่ละครั้งที่ OpenVPN เริ่มทำงาน ในขณะที่การผนวกบันทึกจะต่อท้ายรายการใหม่เข้ากับไฟล์บันทึกที่มีอยู่ ไฟล์ openvpn.log เองถูกเขียนไปยังไดเร็กทอรี /etc/openvpn/

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

# systemctl start openvpn

เนื่องจากลักษณะความสัมพันธ์ที่เปลี่ยนแปลงระหว่าง OpenVPN และ systemd บางครั้งอาจจำเป็นต้องใช้ไวยากรณ์ต่อไปนี้เพื่อเริ่มบริการ: systemctl start openvpn@server

การเรียกใช้ ip addr เพื่อแสดงรายการอินเทอร์เฟซเครือข่ายของเซิร์ฟเวอร์ของคุณควรส่งลิงก์ไปยังอินเทอร์เฟซใหม่ที่เรียกว่า tun0 OpenVPN จะสร้างมันขึ้นมาเพื่อรองรับลูกค้าที่เข้ามา:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

คุณอาจต้องรีบูทเซิร์ฟเวอร์ก่อนที่ทุกอย่างจะเริ่มทำงานอย่างสมบูรณ์ จุดต่อไปคือคอมพิวเตอร์ไคลเอนต์

10.1.2. การกำหนดค่าไคลเอนต์ OpenVPN

ตามเนื้อผ้า อุโมงค์จะถูกสร้างขึ้นโดยมีทางออกอย่างน้อยสองทาง (ไม่เช่นนั้นเราจะเรียกว่าถ้ำ) OpenVPN ที่กำหนดค่าอย่างถูกต้องบนเซิร์ฟเวอร์กำหนดทิศทางการรับส่งข้อมูลเข้าและออกจากอุโมงค์ด้านหนึ่ง แต่คุณจะต้องมีซอฟต์แวร์บางตัวที่ทำงานบนฝั่งไคลเอ็นต์ด้วย ซึ่งก็คืออีกด้านหนึ่งของอุโมงค์

ในส่วนนี้ ฉันจะเน้นไปที่การตั้งค่าคอมพิวเตอร์ Linux บางประเภทด้วยตนเองเพื่อทำหน้าที่เป็นไคลเอนต์ OpenVPN แต่นี่ไม่ใช่วิธีเดียวที่มีโอกาสนี้ OpenVPN รองรับแอปพลิเคชันไคลเอนต์ที่สามารถติดตั้งและใช้งานบนเดสก์ท็อปและแล็ปท็อปที่ใช้ Windows หรือ macOS รวมถึงสมาร์ทโฟนและแท็บเล็ต Android และ iOS ดู openvpn.net สำหรับรายละเอียด

จะต้องติดตั้งแพ็คเกจ OpenVPN บนเครื่องไคลเอนต์ตามที่ติดตั้งบนเซิร์ฟเวอร์ แม้ว่าจะไม่จำเป็นต้องติดตั้ง rsa แบบง่ายที่นี่เนื่องจากคีย์ที่คุณใช้มีอยู่แล้ว คุณต้องคัดลอกไฟล์เทมเพลต client.conf ไปยังไดเร็กทอรี /etc/openvpn/ ที่คุณเพิ่งสร้างขึ้น คราวนี้ไฟล์จะไม่ถูกซิป ดังนั้นคำสั่ง cp ปกติจะทำงานได้ดี:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

การตั้งค่าส่วนใหญ่ในไฟล์ client.conf ของคุณค่อนข้างอธิบายได้ในตัว: ควรตรงกับค่าบนเซิร์ฟเวอร์ ดังที่คุณเห็นจากไฟล์ตัวอย่างต่อไปนี้ พารามิเตอร์เฉพาะคือระยะไกล 192.168.1.23 1194 ซึ่งบอกไคลเอ็นต์ถึงที่อยู่ IP ของเซิร์ฟเวอร์ โปรดตรวจสอบให้แน่ใจอีกครั้งว่านี่คือที่อยู่เซิร์ฟเวอร์ของคุณ คุณควรบังคับให้คอมพิวเตอร์ไคลเอนต์ตรวจสอบความถูกต้องของใบรับรองเซิร์ฟเวอร์เพื่อป้องกันการโจมตีแบบแทรกกลางที่อาจเกิดขึ้นได้ วิธีหนึ่งในการทำเช่นนี้คือการเพิ่มบรรทัดเซิร์ฟเวอร์ remote-cert-tls (รายการ 10.3)

หนังสือ Linux in Action
ตอนนี้คุณสามารถไปที่ไดเร็กทอรี /etc/openvpn/ และแยกคีย์ใบรับรองออกจากเซิร์ฟเวอร์ แทนที่ที่อยู่ IP ของเซิร์ฟเวอร์หรือชื่อโดเมนในตัวอย่างด้วยค่าของคุณ:

หนังสือ Linux in Action
ไม่มีอะไรน่าตื่นเต้นเกิดขึ้นจนกว่าคุณจะใช้งาน OpenVPN บนไคลเอนต์ เนื่องจากคุณจำเป็นต้องส่งอาร์กิวเมนต์ XNUMX-XNUMX ข้อ คุณจึงดำเนินการได้จากบรรทัดคำสั่ง อาร์กิวเมนต์ --tls-client บอก OpenVPN ว่าคุณจะทำหน้าที่เป็นไคลเอ็นต์และเชื่อมต่อผ่านการเข้ารหัส TLS และ --config ชี้ไปที่ไฟล์การกำหนดค่าของคุณ:

# openvpn --tls-client --config /etc/openvpn/client.conf

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

  • อ่านผลลัพธ์ของการดำเนินการ OpenVPN บนไคลเอนต์อย่างละเอียด มักจะมีคำแนะนำอันทรงคุณค่าเกี่ยวกับสิ่งที่ไม่สามารถทำได้อย่างแน่นอนและเพราะเหตุใด
  • ตรวจสอบข้อความแสดงข้อผิดพลาดในไฟล์ openvpn.log และ openvpn-status.log ในไดเร็กทอรี /etc/openvpn/ บนเซิร์ฟเวอร์
  • ตรวจสอบบันทึกของระบบบนเซิร์ฟเวอร์และไคลเอนต์สำหรับข้อความที่เกี่ยวข้องกับ OpenVPN และหมดเวลา (journalctl -ce จะแสดงรายการล่าสุด)
  • ตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่อเครือข่ายที่ใช้งานได้ระหว่างเซิร์ฟเวอร์และไคลเอนต์ (เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทที่ 14)

เกี่ยวกับผู้แต่ง

เดวิด คลินตัน - ผู้ดูแลระบบ ครู และนักเขียน เขาได้บริหารจัดการ เขียนเกี่ยวกับ และสร้างสื่อการเรียนรู้สำหรับสาขาวิชาทางเทคนิคที่สำคัญมากมาย รวมถึงระบบ Linux การประมวลผลแบบคลาวด์ (โดยเฉพาะ AWS) และเทคโนโลยีคอนเทนเนอร์ เช่น Docker เขาเขียนหนังสือ Learn Amazon Web Services in a Month of Lunches (แมนนิ่ง, 2017) หลักสูตรฝึกอบรมด้านวิดีโอหลายหลักสูตรของเขาสามารถพบได้ที่ Pluralsight.com และลิงก์ไปยังหนังสือเล่มอื่นๆ ของเขา (เกี่ยวกับการดูแลระบบ Linux และการจำลองเสมือนของเซิร์ฟเวอร์) มีอยู่ที่ bootstrap-it.com.

» ดูรายละเอียดหนังสือเพิ่มเติมได้ที่ เว็บไซต์ของผู้จัดพิมพ์
» สารบัญ
» ข้อความที่ตัดตอนมา

สำหรับ Khabrozhiteley ส่วนลด 25% โดยใช้คูปอง - ลินุกซ์
เมื่อชำระเงินค่าหนังสือในรูปแบบกระดาษ หนังสืออิเล็กทรอนิกส์จะถูกส่งทางอีเมล

ที่มา: will.com

เพิ่มความคิดเห็น