Anonim

ปี 2017 และการใช้ VPN ได้กลายเป็นเรื่องง่าย ระหว่างความกังวลด้านข้อมูลส่วนบุคคลภายนอกกับ ISP ของคุณที่สามารถขายประวัติการเข้าชมของคุณได้จริง ๆ แล้วไม่มีเหตุผลที่จะไม่ใช้

แน่นอนว่าคุณสามารถชำระค่าบริการ VPN ได้หนึ่งในร้อยของบริการนั้น แต่อีกครั้งคุณพึ่งพาข้อมูลของคุณกับคนอื่น ส่วนใหญ่ดีมากในความเป็นจริง แต่ถ้าคุณต้องการการควบคุมอย่างสมบูรณ์คุณสามารถสร้าง VPN ของคุณเองบน V irtual P rivate S erver (VPS) หรือเช่าเซิร์ฟเวอร์ส่วนตัวของคุณเองถ้าคุณรู้สึกว่ามันไม่ยอมใครง่ายๆกับมันจริงๆ

สิ่งที่คุณต้องสร้าง VPN คือซอฟต์แวร์โอเพ่นซอร์ส OpenVPN และ Linux (หรือ BSD) การกำหนดค่าสามารถมีส่วนร่วม แต่ก็เป็นไปไม่ได้สำหรับบางคนที่มีทักษะพื้นฐานแม้กระทั่ง Linux เพื่อดึงการแจกจ่ายเช่น Ubuntu

สำหรับคู่มือนี้คุณต้องใช้ VPS ที่ใช้งาน Ubuntu คุณสามารถเลือกอย่างง่ายดายจากใครบางคนเช่น DigitalOcean หรือ Linode ทำตามคำแนะนำด้านความปลอดภัยขั้นพื้นฐานของพวกเขาสำหรับการตั้งค่า ตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำผิดพลาดขั้นพื้นฐานเช่นการอนุญาตให้รูทผ่าน SSH

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

ได้รับสิ่งที่คุณต้องการ

ลิงค์ด่วน

  • ได้รับสิ่งที่คุณต้องการ
  • ตั้งค่าไฟร์วอลล์
    • ค้นหาส่วนต่อประสาน
    • พื้นฐาน Iptables
    • ตั้งค่ากฎของคุณ
      • ย้อนกลับ
      • ปิง
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • TUN
      • เข้าสู่ระบบ
      • ปฏิเสธทุกอย่างอื่น
      • การปลอมแปลง NAT
    • ส่งต่อการรับส่งข้อมูล IPv4
    • หยุดการเชื่อมต่อ IPv6 ทั้งหมด
    • นำเข้าและบันทึกลงใน Iptables

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

$ sudo apt ติดตั้ง openvpn easy-rsa

ตั้งค่าไฟร์วอลล์

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

Iptables เป็นไฟร์วอลล์หลักสำหรับ Linux และเป็นตัวเลือกที่ดีที่สุดในการควบคุมการเข้าถึงพอร์ตของ Ubuntu คุณจะได้ติดตั้งไว้แล้วเพื่อให้คุณสามารถเริ่มต้นตั้งค่ากฎไฟร์วอลล์ของคุณได้

ค้นหาส่วนต่อประสาน

ก่อนที่คุณจะเริ่มเขียนกฎลงใน iptables ค้นหาอินเทอร์เฟซเซิร์ฟเวอร์ของคุณที่เชื่อมต่อกับอินเทอร์เน็ตด้วย รัน ifconfig เพื่อแสดงอินเตอร์เฟสเครือข่ายของคุณ ที่อยู่ที่มี inet addr: การจับคู่ที่อยู่ IP ที่คุณเชื่อมต่ออยู่นั้นเป็นอินเทอร์เฟซที่ถูกต้อง

พื้นฐาน Iptables

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

ลองดูตัวอย่างของกฎ iptables นี้

-A INPUT -i eth0 -p tcp -m state – state ESTABLISHED –sport 443 -j ACCEPT

เอาล่ะดังนั้น -A หมายความว่าคุณกำลังจะผนวกกฎใหม่ จากนั้น INPUT หมายถึงมันจะเกี่ยวกับอินพุตของเซิร์ฟเวอร์ของคุณ นอกจากนี้ยังมีเอาท์พุท แฟล็ก -i บอก iptables ว่ากฎนี้มีอินเตอร์เฟสแบบใด คุณสามารถระบุโปรโตคอลที่ใช้สำหรับ -p กฎนี้จัดการ tcp -m ระบุเงื่อนไขที่การเชื่อมต่อต้องเป็นไปตาม ในกรณีนี้จะต้องตรงกับสถานะที่ระบุไว้ แน่นอนว่า - รัฐจะระบุสถานะในกรณีนี้คือการเชื่อมต่อ ESTABLISHED ส่วนถัดไปจะบอก iptables ว่ากฎนี้ใช้สำหรับพอร์ตใด มันคือพอร์ต 443, พอร์ต HTTPS ที่นี่ ธงล่าสุดคือ -j มันย่อมาจาก "กระโดด" และมันบอก iptables ว่าจะทำอย่างไรกับการเชื่อมต่อ หากการเชื่อมต่อนี้ตรงตามข้อกำหนดทั้งหมดในกฎ iptables จะยอมรับมัน

ตั้งค่ากฎของคุณ

ดังนั้นคุณควรมีความคิดทั่วไปว่ากฎ iptables ทำงานอย่างไร ส่วนที่เหลือของส่วนนี้จะบอกวิธีตั้งค่ากฎของคุณทีละชิ้น

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

สร้างไฟล์ในไดเร็กทอรี / tmp เพื่อสร้างกฎของคุณ

$ vim / tmp / ipv4

เริ่มต้นไฟล์นั้นด้วยตัวกรอง * สิ่งนี้บอก iptables ว่าสิ่งต่อไปนี้จะเป็นกฎสำหรับการกรองแพ็คเก็ต

ย้อนกลับ

ส่วนแรกของกฎจะล็อคอินเทอร์เฟซย้อนกลับ พวกเขาบอก iptables ว่าเซิร์ฟเวอร์ควรยอมรับทราฟฟิกจากตัวเองบนอินเตอร์เฟสย้อนกลับ ควรปฏิเสธการรับส่งข้อมูลที่มาจากตัวเองที่ไม่ได้มาจากลูปแบ็ค

-A-INPUT -i Lo -j ACCEPT -A-INPUT! -i lo -s 127.0.0.0/8 -j ปฏิเสธการทำงานเอาท์พุท -o แท้จริง -j การยอมรับ

ปิง

ถัดไปอนุญาตให้ ping คุณควรจะ ping เซิร์ฟเวอร์ของคุณเพื่อให้แน่ใจว่ามันออนไลน์ในกรณีที่ไม่สามารถเข้าถึงได้ ในกรณีนี้อนุญาตเฉพาะเสียงสะท้อนที่ร้องขอและเซิร์ฟเวอร์จะอนุญาตให้ตัวเองส่งออก ICMP

-A INPUT -p icmp -m state - รัฐใหม่ --icmp-type 8 -j ACCEPT -A-INPUT -p icmp -m state - state - สถานะถูกสร้าง, ที่เกี่ยวข้อง -j ACCEPT -P ICMP -j ACCEPT

SSH

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

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

-A อินพุต -i eth0 -p tcp -m state - รัฐใหม่, ที่สร้างแล้ว --dport 22 -j ACCEPT -A-OUTPUT -o eth0 -p tcp -m สถานะ - รัฐที่ถูกสร้างขึ้น --sport 22 -j ACCEPT

OpenVPN

ส่วนต่อไปนี้ช่วยให้การรับส่งข้อมูลไปและกลับจากเซิร์ฟเวอร์ OpenVPN ผ่าน UDP

-A INPUT -i eth0 -p udp -m state - state ใหม่, สร้างแล้ว --dport 1194 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state - state ESTABLISHED --sport 1194 -j ยอมรับ

DNS

ตอนนี้อนุญาตการเชื่อมต่อ DNS ผ่าน UDP และ TCP คุณต้องการให้ VPN จัดการ DNS ไม่ใช่ ISP ของคุณ นั่นเป็นส่วนหนึ่งของเหตุผลที่คุณตั้งค่า VPN ตั้งแต่แรก

-A อินพุต -i eth0 -p udp -m state - สถานะที่ถูกสร้าง --sport 53 -j ACCEPT -A-OUTPUT -o eth0 -p udp -m สถานะ -state - สถานะใหม่, สร้าง --dport 53 -j ACCEPT -A อินพุต -i eth0 -p tcp -m state - state ESTABLISHED --sport 53 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m state - รัฐใหม่, สร้างแล้ว --dport 53 -j ACCEPT

HTTP / S

เพื่อให้ Ubuntu สามารถอัปเดตตัวเองได้คุณต้องเพิ่มชุดของกฎเพื่ออนุญาตการเชื่อมต่อ HTTP และ HTTPS โปรดทราบว่ากฎเหล่านี้อนุญาตให้เซิร์ฟเวอร์เริ่มการเชื่อมต่อ HTTP เท่านั้นดังนั้นคุณจึงไม่สามารถใช้เป็นเว็บเซิร์ฟเวอร์หรือเชื่อมต่อผ่านพอร์ต 80 หรือพอร์ต 443

-A INPUT -i eth0 -p tcp -m state - สถานะที่ถูกสร้าง --sport 80 -j ACCEPT -A-INPUT -i eth0 -p tcp -m สถานะ - สถานะที่ถูกสร้าง --sport 443 -j ACCEPT-OUT - o eth0 -p tcp -m state - รัฐใหม่, สร้างแล้ว - พอร์ต 80 -j ยอมรับ -A เอาท์พุท -o eth0 -p tcp -m รัฐ - รัฐใหม่, ถูกสร้างขึ้น - พอร์ต 443 -j ยอมรับ

NTP

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

-A INPUT -i eth0 -p udp -m state - สถานะที่ถูกสร้าง --sport 123 -j ACCEPT -A-OUTPUT -o eth0 -p udp -m state - state ใหม่, ถูกสร้างขึ้น --dport 123 -j ACCEPT

TUN

เลิกบล็อกอินเตอร์เฟส TUN ที่ OpenVPN ใช้เพื่อรับส่งข้อมูลในอุโมงค์

-A อินพุต -i tun0 -j ACCEPT -A ไปข้างหน้า -i tun0 -j ACCEPT -A เอาท์พุท -o tun0 -j ACCEPT

คุณต้องอนุญาตให้ TUN ส่งต่อทราฟฟิกไปยังอินเทอร์เฟซปกติของคุณสำหรับ VPN คุณจะพบที่อยู่ IP นั้นในการกำหนดค่า OpenVPN หากคุณเปลี่ยนในการกำหนดค่าให้เปลี่ยนในกฎของคุณด้วย

-A ไปข้างหน้า -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT -A ไปข้างหน้ารัฐ -m - รัฐที่จัดตั้งขึ้นที่เกี่ยวข้องที่เกี่ยวข้อง -j ยอมรับ

เข้าสู่ระบบ

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

- อินพุต -m จำกัด - เปิด 3 / นาที -j ล็อก - ล็อก - คำนำหน้า“ iptables_INPUT_denied:” –log-level 4
-A ไปข้างหน้า - จำกัด ขีด จำกัด - เปิด 3 / นาที -j เข้าสู่ระบบ - คำนำหน้าล็อก "iptables_FORWARD_denied:" - บล็อกระดับ 4
-A เอาท์พุท -m จำกัด - เปิด 3 / นาที -j เข้าสู่ระบบ - ล็อก - คำนำหน้า "iptables_OUTPUT_denied:" - บล็อกระดับ 4

ปฏิเสธทุกอย่างอื่น

ในที่สุดคุณต้องปิดกั้นอะไรที่ไม่เข้ากับกฎของคุณ นั่นคือจุดประสงค์ของการมีไฟร์วอลล์ตั้งแต่แรก

-A-INPUT -j REJECT -A ไปข้างหน้า -j REJECT -A เอาท์พุท -j REJECT

ปิดไฟล์ด้วย COMMIT เพื่อบอก iptables ให้ยอมรับกฎทั้งหมด

การปลอมแปลง NAT

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

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

ส่งต่อการรับส่งข้อมูล IPv4

คุณจะต้องเปิดใช้งานการส่งต่อทราฟฟิกของ IPv4 เพื่อให้สามารถผ่านระหว่าง VPN และอินเทอร์เฟซเครือข่ายจริงของเซิร์ฟเวอร์ของคุณ เปิด /etc/sysctl.d/99-sysctl.conf ด้วย sudo

ค้นหาบรรทัดด้านล่างและยกเลิกการใส่เครื่องหมายข้อคิดเห็นโดยการลบ #

net.ipv4.ip_forward = 1

หยุดการเชื่อมต่อ IPv6 ทั้งหมด

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

ก่อนที่จะตั้งค่ากฎสำหรับ iptables คุณต้องปิดการใช้งาน IPv6 ที่อื่นในระบบ

เพิ่มบรรทัดต่อไปนี้ใน /etc/sysctl.d/99-sysctl.conf หากคุณปิดมันจากส่วนก่อนหน้าให้เปิดใหม่ด้วย sudo

net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1

เปิดใช้งานการเปลี่ยนแปลงของคุณ

$ sudo sysctl -p

แสดงความคิดเห็นบรรทัด IPv6 ทั้งหมดใน / etc / hosts คุณจะต้องมี sudo ด้วยเช่นกัน

# :: 1 ip6-localhost ip6-loopback # fe00 :: 0 ip6-localnet # ff00 :: 0 ip6-mcastprefix # ff02 :: 1 ip6-allnodes # ff02 :: 2 ip6-allrouters

ในที่สุดคุณสามารถเขียนกฎ IPv6 iptables สร้างไฟล์สำหรับพวกเขาที่ / tmp / ipv6

* ตัวกรอง - อินพุต -j ปฏิเสธ - ไปข้างหน้า -j ปฏิเสธ - เอาท์พุท -j ปฏิเสธความมุ่งมั่น

ดูสิว่ามันง่าย ปฏิเสธทุกอย่าง

นำเข้าและบันทึกลงใน Iptables

คุณต้องนำเข้ากฎเหล่านั้นเพื่อให้พวกเขาทำอะไรก็ได้ ดังนั้นถึงเวลาแล้วที่จะทำเช่นนั้น

เริ่มต้นด้วยการล้างทุกอย่างที่มีอยู่ คุณไม่ต้องการกฎเก่า ๆ ที่ขวางทาง

$ sudo iptables -F && sudo iptables -X

นำเข้าทั้งกฎ IPv4 และ IPv6 ของคุณ

$ sudo iptables-restore </ tmp / ipv4 $ sudo iptables- กู้คืน </ tmp / ipv6

คุณอาจ ไม่ ต้องการทำเช่นนั้นอีก ดังนั้นคุณจะต้องมีแพ็คเกจใหม่เพื่อบันทึกกฎของคุณอย่างถาวร

$ sudo apt ติดตั้ง iptables-persistent

ระหว่างการติดตั้งแพคเกจจะขอให้คุณบันทึกกฎที่มีอยู่ของคุณ ตอบ“ ใช่”

หากคุณทำการเปลี่ยนแปลงในภายหลังคุณสามารถอัปเดตการกำหนดค่าที่บันทึกไว้ได้เช่นกัน

บริการ $ sudo บันทึก netfilter-persistent

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

คลิกที่นี่: หน้าถัดไป

ทุกอย่างเกี่ยวกับ VPN: วิธีการตั้งค่า VPN ของคุณเองด้วย openvpn (ตอนที่ 3)