ฉันจะมั่นใจได้อย่างไรว่าการรับส่งข้อมูลใช้ VPN


31

ฉันต้องการตรวจสอบให้แน่ใจว่าการส่งรับ / ส่งทราฟฟิกเมื่อเซิร์ฟเวอร์ที่ทำงานอยู่เชื่อมต่อกับ VPN เท่านั้น

ฉันพบคำถามนี้ซึ่งคล้ายกันแต่ฉันไม่ต้องการบังคับให้ปริมาณการใช้งานทั้งหมดผ่าน VPN และฉันไม่สามารถหาคำแนะนำที่ดีเกี่ยวกับวิธีใช้ firestarter จากบรรทัดคำสั่ง

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

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

sudo ufw enable
sudo ufw deny port tcp from localhost to any port 33442
sudo ufa allow port tcp from localhost to VPNIP port 33442
sudo ufw deny port udp from localhost to any port 33442
sudo ufa allow port udp from localhost to VPNIP port 33442

ตรรกะนี้มีเกลืออยู่หรือไม่? คุณจะทำอย่างไร ฉันจะใช้อะไรกับ VPNIP, IP สาธารณะของเซิร์ฟเวอร์ VPN หรือฉันควรระบุช่วงเครือข่ายย่อยที่ VPN เชื่อมต่อกับฉัน

ขอบคุณสำหรับความช่วยเหลือของคุณ!

คำตอบ:


25

สร้างvpnrouteกลุ่ม:

sudo groupadd vpnroute

เพิ่มiptablesกฎที่ปฏิเสธการเชื่อมต่อเครือข่ายขาออกใด ๆ ที่ทำโดยสมาชิกของvpnrouteกลุ่มที่ไม่ผ่านtun0ส่วนต่อประสาน:

sudo iptables -A OUTPUT -m owner --gid-owner vpnroute \! -o tun0 -j REJECT

เริ่มกระบวนการส่งในฐานะสมาชิกของvpnrouteกลุ่ม:

sudo -g vpnroute transmission-gtk &

1
นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ!
Taeram

3
คำเตือน: สิ่งนี้ใช้ไม่ได้กับ Deluge, AFAICT เนื่องจาก Deluge จะออกจากกระบวนการ sup ฉันทดสอบอย่างรอบคอบแล้วและการตั้งค่าของฉันถูกต้อง - sudo -g vpnroute ping google.com จะแสดง 'ปลายทางเข้าไม่ถึง' จนกว่าฉันจะเปิดใช้งาน VPN บน tun0 แต่ Deluge UI สามารถดาวน์โหลดเพลงได้ไม่ว่าจะเชื่อมต่อ VPN หรือไม่ก็ตาม ด้วย pgrep -G vpnroute ฉันพบว่าเป็นเพราะกระบวนการเริ่มต้น / usr / bin / python เท่านั้นที่ทำงานภายใต้ vpnroute GID กระบวนการ spugeed deluge-gtk ดูเหมือนจะไม่เป็นเช่นนั้น
happyskeptic

10
มีใครอธิบายได้บ้างว่าแต่ละขั้นตอนเหล่านี้ทำอะไรกันแน่
ohnoplus

2
การส่งผ่านมีความสามารถในการฟังที่อยู่เฉพาะ - แต่ไม่ใช่ไปยังอินเทอร์เฟซเฉพาะ เมื่อเริ่มต้นจากบรรทัดคำสั่ง--bind-address-ipv4 $IP_ADDRจะบอกการส่งที่อยู่ที่จะผูกกับ จากนั้นต้องใช้กฎการกำหนดเส้นทางที่ถูกต้องเพื่อให้แน่ใจว่าทราฟฟิกเข้าถึงที่ที่ถูกต้อง ลองดูที่คำถามนี้เพื่อดูว่าฉันจะจัดการได้อย่างไร
seanlano

3
@ohnoplus สร้างกลุ่มชื่อ "vpnroute"; เพิ่มกฎไฟร์วอลล์ที่ปฏิเสธการเชื่อมต่อเครือข่ายขาออกใด ๆ ที่ทำโดยสมาชิกของกลุ่มที่ไม่ผ่าน VPN (กำหนดไว้ที่นี่เป็นอินเทอร์เฟซ "tun0" แต่บางระบบอาจแตกต่างกัน); เริ่มกระบวนการส่งกำลังทำงานในฐานะสมาชิกของกลุ่ม "vpnroute"
TommyPeanuts

4

มันใช้งานได้กับการส่งแบบไร้หัวผม จำกัด การรับส่งข้อมูลจากผู้ใช้ที่ใช้บริการส่งสัญญาณ 10.0.0.0/8เป็นเครือข่ายภายในของคุณที่คุณควรเปลี่ยนให้ตรงกับเครือข่ายtun0ของคุณคืออินเทอร์เฟซ OpenVPN eth0ของคุณคือการเชื่อมต่อ LAN ของคุณ

เพิ่มsudoไปยังคำสั่งถ้าคุณไม่รูท:

iptables -F (เราใช้สวิตช์ -F เพื่อล้างกฎที่มีอยู่ทั้งหมดดังนั้นเราจึงเริ่มต้นด้วยสถานะใหม่ที่จะเพิ่มกฎใหม่)

iptables -L (รายการการตั้งค่าปัจจุบัน)

NET=10.0.0.0/8
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT

ทำให้ iptables คงอยู่หลังจากรีสตาร์ท

apt-get install iptables-persistent
service iptables-persistent start

อันนี้ให้ฉันต่อไปนี้: $ sudo iptables -A เอาท์พุท -d 10.0.0.0/8 -p tcp - port 9091 -m owner --gid-owner debian-transmission -o eth0 -j ACCEPT iptables v1.4.12: owner : ค่าต่ำสำหรับตัวเลือก "--gid-owner": "debian-transmission" ฉันทำอะไรหายไปหรือเปล่า
ohnoplus

ใช่ @ohnoplus :) คุณต้องสร้างกลุ่ม (หรือเจ้าของ) การส่งเดเบียนก่อน และให้แน่ใจว่าคุณกำลังใช้งานแอปพลิเคชันในกลุ่มนี้หรือผู้ใช้: กลุ่ม
โจอาคิม

นี่คือสิ่งที่ฉันต้องการเพื่อเปิดใช้งานเว็บอินเตอร์เฟสการส่งข้อมูลระยะไกลขอบคุณ!
Zane Hooper

4

นี่คือ 'วิธีการ' ที่สมบูรณ์แบบสำหรับ NOOBS (โดยใช้เดเบียน) เพื่อให้แน่ใจว่ากลุ่มผู้ใช้ที่ส่งผ่านเดเบียน (เช่นการส่งข้อมูล) จะกำหนดเส้นทางข้อมูลผ่าน VPN เท่านั้น

อย่าใช้ 'วิธีการ' ที่ยาวขึ้นสำหรับ vpn โดยใช้สคริปต์ของระบบที่ซับซ้อน ... ! iptables เป็นวิธีที่ดีที่สุด (และเข้าใจผิดได้) !!! - การใช้กฎ IPTABLE เพียงเล็กน้อยตามผู้ใช้การส่งและกลุ่มเพื่อควบคุม vpn (ไม่เหมือนกับวิธีการแฮ็คที่ซับซ้อนกว่าซึ่งใช้สคริปต์ systemd สคริปต์ขึ้นและลง ฯลฯ )และมันง่ายมาก!

ขั้นตอนที่ 1 - การติดตั้ง: (สมมติว่ามีการติดตั้งการส่งผ่านและผู้ใช้ส่งผ่านเดเบียนจึงมีอยู่!)

sudo apt-get install iptables
sudo apt-get install iptables-persistent

ขั้นตอนที่ 2 - สร้างไฟล์ transmission-ip-rules

sudo nano transmission-ip-rules

และเพิ่มข้อความในบล็อครหัสด้านล่างโดยเริ่มจาก #!/bin/bash

สิ่งสำคัญ

  • หากเครือข่ายท้องถิ่นของคุณไม่อยู่ในรูปแบบ 192.168.1.x เปลี่ยนตัวแปร NET เพื่อให้สอดคล้องกับรูปแบบที่อยู่เครือข่ายท้องถิ่นของคุณ !!
  • นอกจากนี้ยังต้องระวังของการเล่นโวหารที่ 192.168.1.0/25 ให้จริงช่วงที่ 192.168.1.0-255!
  • บางครั้งอินเทอร์เฟซของคุณ eth0, tun0 (ซึ่งเป็น vpn) ฯลฯ อาจแตกต่างกัน - ตรวจสอบด้วย 'ifconfig' และเปลี่ยนหากจำเป็น
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD

บันทึกไฟล์แล้วเรียกใช้

sudo iptables -F 
sudo chmod +x transmission-ip-rules
sudo ./transmission-ip-rules

จากนั้นตรวจสอบให้แน่ใจว่ากฎเหล่านี้ยังคงอยู่ระหว่างการรีบูตด้วย:

sudo dpkg-reconfigure iptables-persistent

และแตะใช่เพื่อแจ้งให้ทั้งสอง ทำ!

สิ่งที่ดีเกี่ยวกับสคริปต์นี้คือมันจะติดตามข้อมูลทั้งหมดผ่านอุปกรณ์! เมื่อคุณออก

sudo iptables -L -v

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

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
1749K  661M ACCEPT     all  --  tun0   any     anywhere             anywhere                                                                                            
3416K 3077M ACCEPT     all  --  eth0   any     anywhere             anywhere                                                                                            
 362K  826M ACCEPT     all  --  lo     any     anywhere             anywhere                                                                                            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
    0     0            all  --  any    any     anywhere             anywhere                                                                                            

Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
 1260  778K ACCEPT     tcp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       tcp spt:9091 owner GID match debian-transmission
    0     0 ACCEPT     udp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT     all  --  any    tun0    anywhere             anywhere                                                                                                     owner GID match debian-transmission
 8880  572K ACCEPT     all  --  any    lo      anywhere             anywhere                                                                                                     owner GID match debian-transmission
13132  939K REJECT     all  --  any    any     anywhere             anywhere                                                                                                     owner GID match debian-transmission reject-with icmp-port-unreachable

สคริปต์นี้ได้รับการทดสอบอย่างละเอียดในการเชื่อมต่อตัดการเชื่อมต่อเริ่มต้นใหม่จาก vpn มันใช้งานได้ดี การส่งสามารถใช้ VPN เท่านั้น ข้อได้เปรียบที่ดีของสคริปต์นี้เหนือผู้อื่นคือฉันได้ทำให้แน่ใจว่าคุณสามารถดู (ผ่านiptables -L -v) ว่าข้อมูลของคุณนับเป็นสิ่งที่ดึงผ่านการส่งข้อมูล (โดยเพิ่มกฎ INPUT (ทั้งหมด) และส่งต่อ (ทั้งหมด) สำหรับแต่ละอินเตอร์เฟส eth0, vpn (tun0)) ดังนั้นคุณรู้ว่าเกิดอะไรขึ้น !!! ผลรวมของข้อมูลจะไม่ตรงกับการส่ง - น่าเสียดายที่ฉันไม่สามารถแยกแยะด้าน INPUT ลงไปยังผู้ใช้ที่ส่งเดเบียนและจะมีทั้งค่าใช้จ่ายเพิ่มเติมและกระบวนการอื่น ๆ ที่ใช้ VPN เดียวกัน แต่คุณจะเห็นข้อมูลคร่าวๆ ทางด้านอินพุตและอยู่ประมาณครึ่งหนึ่งของเอาท์พุทสำหรับ VPN ที่ยืนยันการทำงาน สิ่งอื่นที่ควรทราบ - ใช้เวลาสักครู่ในการยกเลิกการเชื่อมต่อ VPN (การรับส่งข้อมูลทั้งหมดหยุดลงเมื่อมีการส่งสัญญาณ) และเชื่อมต่อใหม่เพื่อส่งข้อมูลเพื่อ 'รับไป' บน VPN ใหม่ดังนั้นไม่ต้องกังวลหากใช้เวลาประมาณ 5 นาที .

เคล็ดลับ - google 'MAN iptables' และดูบทความเกี่ยวกับการตรวจสอบแบนด์วิดท์หากคุณต้องการทราบทีละบรรทัดว่าสคริปต์นี้ทำงานอย่างไร ...


3

เป็นการดีที่คุณควรใช้ไคลเอนต์ฝนตกหนักที่มีคุณสมบัติในการผูกกับอินเทอร์เฟซเฉพาะ (อินเทอร์เฟซ VPN)

ในบรรดาลูกค้าฝนตกหนักน้ำท่วมทำเช่นนี้ ดังนั้นคุณสามารถติดตั้ง Deluge และกำหนดค่าอินเทอร์เฟซในการตั้งค่าและคุณถูกตั้งค่า!


ขอบคุณสำหรับคำตอบ. จริง ๆ แล้วฉันเริ่มใช้การส่งในเวลานี้คุณรู้ไหมว่าเป็นไปได้หรือไม่ที่จะผูกกับอินเทอร์เฟซหรือช่วง IP ที่เฉพาะเจาะจง (ดังนั้นมันจึงใช้ VPN) กับการส่งสัญญาณเท่านั้น? ขอบคุณ!
Evan

2
@ user4124 คุณรู้วิธีผูก Deluged ไปยังอินเทอร์เฟซเครือข่ายเฉพาะผ่านบรรทัดคำสั่งหรือ webui หรือไม่ ดูเหมือนจะไม่มีใครรู้วิธีการใช้เกียร์ฉันจึงลองใช้ Deluge แต่ยังไม่มีโชค ขอบคุณ!
Evan

3
@Evan คุณสามารถระบุที่อยู่ IP ที่จะผูกไว้ใน Deluge ด้วย listen_interfaceใน deluge-console หรือ Interface ในตัวเลือกเครือข่าย
Cas

แม้ว่านี่จะเป็นจริงฉันคิดว่านี่ยังเป็นคำแนะนำที่ไม่ดีแม้ว่าจุดประสงค์เพียงอย่างเดียวของคุณคือการซ่อนการดาวน์โหลดฝนตกหนักผิดกฎหมายคุณควรทำให้ anonymity VPN ของคุณไม่เป็นที่รู้จักและมองหาวิธีแก้ปัญหาที่ครอบคลุมทั้งระบบ
redanimalwar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.