ฉันจะติดตั้ง OpenVPN ได้อย่างไรเพื่อให้ฉันสามารถใช้อินเทอร์เน็ตได้อย่างปลอดภัยจากฮอตสปอตที่ไม่มีหลักประกัน


31

เป้าหมาย: ฉันต้องการใช้อินเทอร์เน็ตอย่างปลอดภัยผ่านพีซีที่บ้านของฉันในขณะที่โน้ตบุ๊คของฉันเชื่อมต่อกับฮอตสปอต / จุดเชื่อมต่อเปิด

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

  1. ติดตั้งและตั้งค่าเซิร์ฟเวอร์ OpenVPN
  2. ตั้งค่าไคลเอนต์ OpenVPN (NetworkManager)

รุ่นของ Ubuntu ที่ควรใช้คือ 10.10 และ 11.04


นี่เป็นคำถามที่เซิร์ฟเวอร์ผิดมากกว่าอูบุนตูที่ฉันคิด
Luis Alvarado

1
@Cyrex: 1) คือ 2) อาจไม่ใช่
Lekensteyn

คำตอบ:


40

ฉันมีคำถามที่แน่นอนไม่กี่เดือนที่ผ่านมา แต่นอกจากนี้ฉันต้องการที่จะมีการเชื่อมต่อ 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แสดงให้เห็นที่จะทำในการบริหาร ฉันไม่ใช่แฟนตัวยงของการทำงานทุกอย่างให้เป็นรากดังนั้นฉันจะใส่ไว้ในไดเรกทอรีอื่น

  1. สร้างไดเร็กทอรีการบริหารระบบและคัดลอกไฟล์ภายในโดยรัน:

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. แก้ไขค่าเริ่มต้นvarsตามต้องการตัวอย่างเช่นการตั้งค่าKEY_SIZE=2048เนื่องจากคุณเป็นคนหวาดระแวง
  3. โหลดตัวแปรและสร้างไดเรกทอรีหลักโดยการเรียกใช้:

    . vars
    
  4. หากคุณได้รับข้อผิดพลาดให้No ... openssl.cnf file could be found Further invocations will failเรียกใช้ln -s openssl-1.0.0.cnf openssl.cnfจากนั้น. varsอีกครั้ง

  5. หากนี่เป็นครั้งแรกที่คุณใช้ CA นี้เตรียมสภาพแวดล้อมของคีย์ ไม่ได้เรียกใช้คำสั่งนี้ถ้าคุณต้องการที่จะรักษาแคลิฟอร์เนียไว้ก่อนหน้านี้ของคุณ ca.crtการทำเช่นนี้จะทำให้คุณต้องปรับใหม่

    ./clean-all
    
  6. ./build-caสร้างแคลิฟอร์เนียโดยการดำเนินการ คุณสามารถกรอกรายละเอียดใด ๆ ที่คุณต้องการ แต่โปรดทราบว่าข้อมูลนี้จะปรากฏในล็อกไฟล์เมื่อไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ นี้จะสร้างไฟล์ca.keyและในโฟลเดอร์ย่อยca.crt keysเก็บca.keyความลับไฟล์ในทุกสถานการณ์ การไม่ทำเช่นนั้นจะอนุญาตให้ทุกคนที่มีกุญแจเชื่อมต่อกับเซิร์ฟเวอร์ของคุณ
  7. ./revoke-full serverหากคุณมีใบรับรองก่อนหน้านี้ที่สูญหายหรือหมดอายุแล้วคุณต้องให้เพิกถอนเก่าครั้งแรกกับ มิฉะนั้นคุณจะได้รับข้อผิดพลาดของฐานข้อมูล
  8. สร้างใบรับรองสำหรับเซิร์ฟเวอร์โดยเรียกใช้:

    ./build-key-server server
    

    เมื่อถูกถามรหัสผ่านให้ปล่อยว่างไว้เว้นแต่คุณจะยินดีป้อนรหัสผ่านทุกครั้งที่เซิร์ฟเวอร์เริ่มทำงาน (ไม่แนะนำ) ยืนยันการลงนามใบรับรองและยืนยัน สองไฟล์ใหม่จะปรากฏในไดเรกทอรีkeys: และserver.keyserver.crt

DH และใช้เตรียมตัวสำหรับ tls-auth

สร้างพารามิเตอร์Diffie-Hellmanโดยใช้:

./build-dh

ต่อแข็งเคล็ดลับtls-authการใช้งาน ในการสร้างคีย์ลับร่วมกันโดยใช้:

openvpn --genkey --secret ta.key

ไฟล์ผลลัพธ์ ( ta.key) จะต้องแจกจ่ายให้กับลูกค้าเช่นกัน แต่คุณไม่ควรวางไว้ในที่สาธารณะ

สร้างใบรับรองสำหรับลูกค้า

สำหรับลูกค้าแต่ละรายควรทำซ้ำขั้นตอนเหล่านี้:

  1. ป้อนไดเรกทอรีที่คุณสร้าง CA และใบรับรองเซิร์ฟเวอร์ของคุณ:

    cd ~/openvpn-admin/easy-rsa
    
  2. หากคุณข้ามขั้นตอนการสร้าง CA เนื่องจากคุณมีอยู่แล้วคุณต้องโหลดตัวแปรก่อน:

    . vars
    
  3. ถ้าคุณกำลังสร้างใบรับรองใหม่เพราะคนเก่าจะสูญหายหรือหมดอายุแล้ว./revoke-full youคุณจะต้องเพิกถอนเก่าครั้งแรกกับ มิฉะนั้นคุณจะได้รับข้อผิดพลาดของฐานข้อมูล
  4. สร้างใบรับรองลูกค้าyou.keyและใบรับรองที่เกี่ยวข้องyou.crt:

    ./build-key you
    

    CommonNameต้องไม่ซ้ำกัน ปล่อยให้รหัสผ่านว่างเปล่าหากคุณใช้ KDE เนื่องจากยังไม่รองรับตั้งแต่ 10.10 เช่นเดียวกับการสร้างใบรับรองเซิร์ฟเวอร์ให้ยืนยันการลงชื่อรับรองและยอมรับการเปลี่ยนแปลง

3. ติดตั้งบริการ OpenVPN

ตามค่าเริ่มต้น OpenVPN จะทำงานเหมือนรูทเมื่อยอมรับการเชื่อมต่อ ไม่ใช่ความคิดที่ดีถ้าบริการสามารถเข้าถึงได้จากอินเทอร์เน็ตที่ชั่วร้าย

  1. สร้างผู้ใช้เฉพาะสำหรับ OpenVPN พูดว่าopenvpn:

    sudo useradd openvpn
    
  2. คัดลอกไฟล์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}
    
  3. คัดลอกไฟล์ta.keyเช่นกัน:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. สร้างไฟล์/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
    
  5. ตั้งค่าการอนุญาตที่เหมาะสมในนั้นไม่จำเป็นต้องเป็นความลับ แต่ฉันไม่ต้องการรั่วไหลรายละเอียดการกำหนดค่าดังนั้น:

    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

clientclient.confควรจะเปลี่ยนชื่อถ้าแฟ้มการกำหนดค่าของคุณจะไม่ได้ตั้งชื่อ ตัวอย่าง: ถ้าคุณได้รับการตั้งชื่อไฟล์การกำหนดค่าของคุณคุณจะต้องทำงานsafe.confsudo /etc/init.d/openvpn start safe

หากต้องการหยุด OpenVPN คุณต้องเรียกใช้:

sudo /etc/init.d/openvpn stop

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

@YumYumYum ไม่ทราบวิธีใช้ชื่อผู้ใช้ / รหัสผ่านให้ดูที่หน้าคู่มือของ openvpn ( man openvpn) openvpn เวอร์ชันล่าสุดมีความสามารถในการฝังใบรับรองและไฟล์คีย์ดังนั้นอาจเป็นการง่ายกว่าที่จะจัดเตรียมไฟล์การกำหนดค่าเดียวซึ่งมีคำแนะนำให้กับผู้ใช้
Lekensteyn

โปรดทราบว่า Ubuntu รุ่นใหม่ที่มาพร้อมกับ OpenSSL 1.0.1 และการเรียกใช้. varsคำสั่งด้านบนอาจสร้างข้อผิดพลาดที่ "พบไฟล์ openssl.cnf การร้องขอเพิ่มเติมจะล้มเหลว" คุณจำเป็นต้องsudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, แล้วเรียกใช้. varsและคำสั่งอื่น ๆ
Dan Dascalescu

@DanDascalescu สคริปต์whichopensslหาopenssl-1.0.0.cnfไฟล์ได้อย่างถูกต้องสำหรับฉัน (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn

ข้อมูลมากคำตอบอย่างละเอียด คุณสามารถตอบคำถามนี้ได้ไหม
JB0x2D1

8

คุณไม่จำเป็นต้องเล่นซอกับแอปพลิเคชันใด ๆ ใช้งานได้เช่นเดียวกับ VPN

  1. ก่อนติดตั้งtsocksแพคเกจ (ถุงเท้าชั่วคราว):

    sudo apt-get install tsocks
    
  2. จากนั้นแก้ไข/etc/tsocks.confและป้อน

    server = 127.0.0.1
    server_port = 3333
    
  3. ตอนนี้เปิดเทอร์มินัลและพิมพ์ (สิ่งนี้เชื่อมโยงคุณ):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. เรียกใช้ (ผ่านเทอร์มินัลอื่นหรือ ALT-F2):

    tsocks firefox
    

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

มันใช้งานได้เหมือนมีเสน่ห์! อนิจจาโครเมียมไม่ชอบ tsocks แต่เฮ้ Firefox ทำงาน


3
ดูประโยคสุดท้ายของคุณ - ฉันไม่ต้องการตรวจสอบโปรแกรมทั้งหมดของฉันก่อนถ้าพวกเขาทำงานได้ดีกับ tsocks จริง ๆ เมื่อมันเป็นเพียงแค่คลิกเดียวในแอปเพล็ต NetworkManager ด้วย OpenVPN
htorque

ตกลง. คำตอบของฉันอาจเป็นประโยชน์กับผู้ที่ต้องการโซลูชันที่รวดเร็วในการเข้าถึงเว็บไซต์
MarkovCh1

1

โซลูชันอุโมงค์ SSH นั้นง่ายกว่าที่คุณคิด โปรแกรมเช่น gSTM จะเริ่ม / หยุดอุโมงค์สำหรับคุณด้วย GUI จากนั้นเพียงเปิด Network Proxy และเปลี่ยนจากการเชื่อมต่ออินเทอร์เน็ตโดยตรงไปยังการกำหนดค่าพร็อกซีด้วยตนเองกด "ใช้ทั้งระบบ" และแอปทั้งหมดของคุณควรส่งข้อมูลลงไปในอุโมงค์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.