วิธีการควบคุมการเข้าถึงอินเทอร์เน็ตสำหรับแต่ละโปรแกรม?


59

ฉันต้องการใช้ซอฟต์แวร์เพื่อควบคุมโปรแกรมที่อาจเชื่อมต่อกับอินเทอร์เน็ต ฉันรู้ว่าพฤติกรรมนี้เกี่ยวข้องกับคำว่า "ไฟร์วอลล์" แต่ผู้ใช้ Linux บางรายรู้สึกไม่พอใจหากใครต้องการไฟร์วอลล์ส่วนบุคคล ฉันไม่ต้องการที่จะทำให้คุณโกรธด้วยความต้องการโปรแกรมดังกล่าว
ฉันไม่ต้องการ "รักษาความปลอดภัยพอร์ต" หรือสิ่งอื่น ๆ ที่ไฟร์วอลล์ส่วนบุคคลสัญญาไว้ใน Windows ฉันดูiptablesแต่มันไม่ตรงกับความต้องการของฉัน

ฉันเห็นคำตอบที่ยอดเยี่ยมที่นี่ ( "วิธีปิดกั้นการเข้าถึงอินเทอร์เน็ตสำหรับแอปพลิเคชันไวน์" ) แต่ก็ไม่สะดวกใจที่จะตั้งค่านี้

มีซอฟต์แวร์ที่ถามแต่ละโปรแกรมว่าสามารถใช้งานอินเทอร์เน็ตหรือไม่?


บน mac มีซอฟต์แวร์ที่เรียกว่าsnitch น้อยที่ทำสิ่งนี้ ผมคิดว่ามีเวอร์ชัน windows ยัง ...
อัลวาร์

คำตอบ:


6

มีสคริปต์ Perlในฟอรัม Ubuntu ของเยอรมัน ( แปลจาก Google เป็นภาษาอังกฤษ ) ซึ่งดูเหมือนว่าจะเป็นเช่นนั้น ฉันไม่เคยลองเลยและฉันก็ไม่ได้ลองดูสคริปต์ แต่มันอาจจะเหมาะกับคุณ คำอธิบายเป็นภาษาเยอรมันเท่านั้นดังนั้นคุณอาจต้องใช้บริการแปลภาษา (เช่น Google Translate; ดูด้านบน)


ฉันจะดูมัน มันน่าสนใจและอาจเป็นเครื่องมือที่เหมาะสม แต่น่าเสียดายที่ไม่มีกุย แต่ก็ไม่ควรหยุดฉัน :)
guerda

34

ในกรณีที่คุณยังคงมองหาแอปพลิเคชันประเภทนี้อยู่ในขณะนี้ฉันกำลังพัฒนาแอพพลิเคชั่นอย่างแน่นอน: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

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

ดูที่เว็บไซต์ ;-)

ภาพหน้าจอ


เย็น! ฉันดูที่ ppa ด้วย แต่ไม่มีแพ็คเกจแม้จะมีแอปพลิเคชันที่สร้างขึ้น นอกจากนี้ฉันสงสัยว่ามันสามารถแสดง IP ที่ได้รับการแก้ไขเป็นชื่อไซต์ที่อ่านได้หรือไม่? และฉันจะทำตามคำแนะนำในการรวบรวมฉันเห็นเคล็ดลับมากมายสำหรับแพคเกจ ubuntu dep และฉันจะใช้ checkinstall เพื่อสร้างสำเนาของแพคเกจ. deb ภายในเครื่องของฉันเพื่อจัดการการอัปเกรด (ลบ / ติดตั้ง) ได้อย่างง่ายดาย อาจจะใช้ checkinstall เพื่อสร้างการแจกจ่ายของคุณด้วยฉันคิดว่า
กุมภ์

คุณสามารถเปิดคำขอคุณสมบัติใน Github ( github.com/Douane/Douane/issues ) :)
ZedTuX

2
เอ่อดูเหมือนสิ่งที่ฉันต้องการ !! แต่ฉันไม่พบแพ็คเกจที่จะติดตั้งบน Ubuntu
azerafati

ยังไม่ได้แพคเกจสำหรับ Ubuntu?
อันวาร์

1
Douaneapp.com กลับมาแล้ว! :)
ZedTuX

26

ฉันพบวิธีแก้ไขปัญหาที่สะดวกซึ่งแก้ปัญหาได้ คุณสร้างกลุ่มที่ไม่ได้รับอนุญาตให้ใช้อินเทอร์เน็ตและเริ่มโปรแกรมในฐานะสมาชิกของกลุ่มนี้

  1. no-internetสร้างกลุ่ม ไม่ได้เข้าร่วมกลุ่มนี้

    sudo addgroup no-internet
    
  2. เพิ่มกฎใน iptables ที่ป้องกันไม่ให้กระบวนการทั้งหมดที่อยู่ในกลุ่มno-internetใช้เครือข่าย (ใช้ip6tablesเพื่อป้องกันการรับส่งข้อมูล IPv6 ด้วย)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. ดำเนินการแทนsudo -g no-internet YOURCOMMANDYOURCOMMAND

คุณสามารถเขียนสคริปต์ wrapper ที่ใช้ sudo ให้คุณได้อย่างง่ายดาย คุณสามารถกำจัดการแจ้งรหัสผ่านโดยการเพิ่ม

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

หรือสิ่งที่คล้ายกับ sudo visudo

ใช้iptables-saveและiptables-restoreเพื่อคงกฎไฟร์วอลล์


1
ฉันลองไกด์ของคุณแล้วsudo -g no-internet firefoxเชื่อมต่อเร็วกว่ามือใหม่ มันไม่ทำงาน
kenn

1
@ เคนฉันบอกได้แค่ว่ามันใช้งานได้ดีที่นี่ ฉันเดาว่าคุณกำลังทำอะไรผิดพลาดเมื่อสร้างกฎ ไม่บันทึกกฎไม่ทำให้สคริปต์ทำงานได้หรืออะไรทำนองนั้น
ทิม

ฉันรีบูตและใช้กฎข้างต้นอีกครั้งโดยไม่มีโชค
เคน

1
ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันแม้กับ Firefox ขอขอบคุณ!
Kostanos

1
ดูเหมือนว่ามันจะไม่ทำงานสำหรับฉันเช่นกันบน Ubuntu 19.04 ฉันต้องติดตั้ง iptables-persistent เพื่อให้สามารถบันทึกการเปลี่ยนแปลงระหว่างการรีบูตได้ (ดังนั้นคุณอาจต้องการเพิ่มเข้าไปในโซลูชันด้านบน) อย่างไรก็ตาม sudo -g no-internet firefox ไม่ได้ จำกัด Firefox ไม่ให้เข้าถึงอินเทอร์เน็ต แนวคิดนี้ดูเหมือนว่ามันจะทำงานได้ดี มีสิ่งพื้นฐานที่ถูกมองข้ามหรือไม่? ตัวอย่างเช่นเราจำเป็นต้องตั้งค่าทั้งสอง ipv4 และ ipv6 เพื่อให้ใช้งานได้หรือไม่
PJ Singh

5

มีไฟร์วอลล์ใน Ubuntu อยู่ufwแล้ว แต่ถูกปิดใช้งานตามค่าเริ่มต้น คุณสามารถเปิดใช้งานและใช้งานได้โดยบรรทัดคำสั่งหรือส่วนหน้าของgufwที่สามารถติดตั้งได้โดยตรงจากศูนย์ซอฟต์แวร์ Ubuntu

หากคุณต้องการปิดกั้นการเข้าถึงอินเทอร์เน็ตไปยังแอปพลิเคชั่นที่เฉพาะเจาะจงคุณสามารถลองLeopardFlowerซึ่งยังอยู่ในรุ่นเบต้าและไม่สามารถใช้ได้ใน Ubuntu Software Center:


4

การรันโปรแกรมภายใต้ผู้ใช้รายอื่นจะใช้ไฟล์กำหนดค่าสำหรับผู้ใช้นั้นไม่ใช่ของคุณ

นี่คือโซลูชันที่ไม่จำเป็นต้องแก้ไขกฎไฟร์วอลล์และทำงานภายใต้ผู้ใช้รายเดียวกัน (ผ่านsudo) ด้วยสภาพแวดล้อมที่ดัดแปลงซึ่งผู้ใช้ของคุณmy_userและแอพที่คุณต้องการเรียกใช้คือmy_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

สำหรับรายละเอียดเพิ่มเติมดูman unshareและคำตอบนี้

ไฟร์วอลล์ Linux GUI

หากคุณกำลังมองหาไฟร์วอลล์ GUI ฉันได้ผลลัพธ์ที่ดีกับOpenSnitch - ยังไม่ได้อยู่ในอูบุนตู repos และฉันจะไม่เรียกมันว่าเป็นระดับการผลิต แต่ทำตามขั้นตอนการสร้างจากหน้าGitHub ที่ทำงานให้ฉัน


3

@psusi: ฉันหวังว่าผู้คนจะไม่ยุ่งกับข้อมูลที่ไม่ดีและไม่เป็นประโยชน์ IPTables อนุญาตให้ทำสิ่งนี้ได้ดังนั้นฉันจึงแทบจะไม่คิดว่า "บ้าบิ่น" เพียงแค่พูดว่า "ไม่" โดยไม่เข้าใจกรณีการใช้งานจะค่อนข้างแคบ http://www.debian-administration.org/article/120/Application_level_firewalling

แก้ไข bodhi.zazen

หมายเหตุ - ตัวเลือกนี้ถูกลบจาก IPTABLES ในปี 2005 8 ปีก่อนคำตอบนี้ถูกโพสต์

ดู - http://www.spinics.net/lists/netfilter/msg49716.html

กระทำ 34b4a4a624bafe089107966a6c56d2a1aca026d4 ผู้แต่ง: Christoph Hellwig วันที่: อาทิตย์ 14 ส.ค. 17:33:59 น -0700

[NETFILTER]: ลบการละเมิด tasklist_lock ในเจ้าของ ipt {, 6}

ตัดออกการจับคู่ cmd / sid / pid เนื่องจากมันไม่สามารถแยกออกได้ และย่อมาจากการล็อคการเปลี่ยนแปลง tasklist_lock

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
เพื่อให้ทุกคนพิจารณาการตั้งค่าสถานะนี้นี้ไม่ควรจะแสดงความคิดเห็นแทนก็ตอบคำถามที่ถูกถาม @ user141987 ฉันขอแนะนำให้ขยายสิ่งนี้เพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่าiptablesเพื่อใช้งานข้อ จำกัด ต่อแอปพลิเคชัน ฉันขอแนะนำให้รวมถึงข้อมูลที่สำคัญในคำตอบของคุณ (และยังคงให้ลิงค์สำหรับการอ้างอิง)
Eliah Kagan

2
iptables ไม่กรองตามแอปพลิเคชัน
Panther

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

3
@psusi คุณกำลังพูดว่า "หากเคอร์เนลของคุณถูกคอมไพล์ด้วย CONFIG_IP_NF_MATCH_OWNER คุณสามารถกำหนดค่าไฟร์วอลล์ iptables ของคุณเพื่ออนุญาตหรือปฏิเสธแพ็กเก็ตตามคำสั่ง" ไม่ถูกต้อง? หรือว่าเมล็ดส่วนใหญ่ไม่มีตัวเลือกล่ะ? หากไม่ถูกต้องจะมีแหล่งข้อมูลที่ debunk มัน? (นอกจากนี้โปรดทราบว่าวัตถุประสงค์หลักของข้อ จำกัด ไฟร์วอลล์ต่อแอพพลิเคชั่นนั้นไม่ได้พยายามทำให้ปลอดภัยอย่างสมบูรณ์ในการรันแอปพลิเคชั่นที่ไม่น่าเชื่อถือวัตถุประสงค์หลักเพื่อให้ผู้ใช้สามารถวัดการควบคุมได้ )
Eliah Kagan

ตัวเลือกนี้ถูกลบออกจากเคอร์เนลในปี 2005 8 ปีก่อนที่จะได้รับคำตอบนี้ - spinics.net/lists/netfilter/msg49716.htmlและแม้ว่าการอ้างสิทธิ์ในทางตรงกันข้ามจะไม่ถูกต้องคุณไม่สามารถกรองแอปพลิเคชันด้วย iptables ได้
Panther

3

ตัวเลือกหนึ่งคือfirejail มันรันแอปพลิเคชั่นภายในแซนด์บ็อกซ์ที่คุณควบคุมว่าแอปพลิเคชันสามารถเห็นเครือข่ายได้หรือไม่:

firejail --net=none firefox

คำสั่งนี้จะเริ่มเบราว์เซอร์ Firefox โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต โปรดทราบว่าการแจกจ่าย firejail ใน repo Ubuntu นั้นล้าสมัย - ควรดาวน์โหลด LTS เวอร์ชันล่าสุดจากหน้าแรกของ firejail


2

ฉันพบวิธีแก้ไขปัญหาที่โพสต์ที่นี่เพื่อเป็นวิธีที่ดี มันเกี่ยวข้องกับการสร้างกลุ่มผู้ใช้ที่อนุญาตการเข้าถึงอินเทอร์เน็ตและการตั้งค่ากฎไฟร์วอลล์เพื่ออนุญาตการเข้าถึงสำหรับกลุ่มนี้เท่านั้น วิธีเดียวสำหรับแอปพลิเคชันในการเข้าถึงอินเทอร์เน็ตคือหากมีการดำเนินการโดยสมาชิกของกลุ่มนี้ sudo -g internet -sคุณสามารถเรียกใช้โปรแกรมภายใต้กลุ่มนี้โดยการเปิดเปลือกด้วย

ในการสรุปสิ่งที่อยู่ในโพสต์ที่ฉันลิงก์ด้านบน:

  1. สร้างกลุ่ม "อินเทอร์เน็ต" โดยพิมพ์ข้อความต่อไปนี้ลงในเชลล์: sudo groupadd internet

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

  3. สร้างสคริปต์ที่มีสิ่งต่อไปนี้และเรียกใช้:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. เมื่อเรียกใช้สคริปต์ข้างต้นคุณจะมีเชลล์ที่คุณสามารถเรียกใช้แอปพลิเคชันที่มีการเข้าถึงอินเทอร์เน็ต

โปรดทราบว่าสคริปต์นี้ไม่ได้ทำอะไรเพื่อบันทึกและกู้คืนกฎไฟร์วอลล์ของคุณ คุณอาจต้องการแก้ไขสคริปต์เพื่อใช้คำสั่งiptables-saveและiptables-restoreเชลล์


1

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

เครื่องมือที่นำเสนอฟังก์ชั่นนี้ใน Linux คือ Apparmor, Selinux และ Tomoyo

ไม่มีเครื่องมือเหล่านี้ที่ง่ายต่อการเรียนรู้และมีข้อดีและข้อเสีย ส่วนตัวฉันชอบ SELinux แม้ว่า SELinux จะมีช่วงการเรียนรู้ที่ชันกว่า

ดู:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

มีแอพพลิเคชั่นที่ถูกอ้างอิงแล้วเสือดาวฟลาวเวอร์ ฉันไม่แน่ใจว่าสถานะ / การบำรุงรักษา


1

มันอยู่ใน iptables จนถึงเคอร์เนลเวอร์ชัน 2.6.24 หากคุณใช้งานเครื่อง 2.x - 2.6.24 และเคอร์เนลของคุณได้ปฏิบัติตามคุณสามารถทำได้ ด้วยเหตุผลบางอย่างที่พวกเขานำมันออกมาดังนั้นจึงไม่ใช่ไมโครซอฟท์ http://cateee.net/lkddb/web-lkddb/IP_NF_MATCH_OWNER.html




0

ไม่เป็นไปไม่ได้ มันไม่ได้เป็นส่วนหนึ่งของนิยามดั้งเดิมของไฟร์วอลล์ เป็นสิ่งที่ Microsoft เกิดขึ้นเมื่อไม่นานมานี้เพื่อพยายามแก้ไขปัญหาด้านความปลอดภัยของระบบปฏิบัติการที่ใช้งานไม่ได้ มันถือว่าบ้าบิ่นและใช้การไม่ได้ในชุมชน Linux เพราะโปรแกรมหนึ่งที่ไม่ได้รับอนุญาตสามารถเรียกใช้โปรแกรมอื่นที่เป็นและเข้าถึงวิธีนั้นได้

หากคุณไม่ชอบสิ่งที่โปรแกรมกำลังทำอยู่บนเครือข่ายเมื่อคุณรันโปรแกรมอย่ารันโปรแกรมนั้น


7
ไฟร์วอลล์ของ Microsoft ไม่ใช่ไฟร์วอลล์หลักตัวแรกที่นำเสนอฟังก์ชันนี้ ไม่ใช่แม้แต่ไฟร์วอลล์Windows ตัวแรกที่ให้บริการ BlackIce Defender, ZoneAlarm และไฟร์วอลล์ซอฟต์แวร์อื่น ๆ อีกมากมายสำหรับ Windows จะมีการแนะนำไฟร์วอลล์ Windows Internet Connection ไว้หลายปี นอกจากนี้ยังไม่มีฉันทามติดังกล่าวในชุมชน Linux เรามักจะใช้ AppArmor (หรือ SELinux) เพื่อ จำกัด พฤติกรรมของแอปพลิเคชัน (และฉันสงสัยว่า AppArmor สามารถปรับให้เข้ากับวัตถุประสงค์นี้ ... ) ไม่มีเหตุผลที่จะ "ผิด" เพื่อต้องการควบคุมว่าแอปใดที่สามารถเข้าถึงอินเทอร์เน็ตได้
Eliah Kagan

และเป็นคำตอบอื่น ๆ อีกหลายสามารถยืนยันต่อโปรแกรมข้อ จำกัด ไฟร์วอลล์เป็นไปได้มากทีเดียว ; ฟังก์ชั่นนี้สร้างขึ้นใน iptables / netfilter!
Eliah Kagan

ไม่ได้ netfilter หรือ iptables ไม่สามารถกรองแอปพลิเคชันได้ พวกเขาสามารถกรองตามผู้ใช้และพอร์ต แต่ไม่ได้สำหรับแต่ละแอปพลิเคชัน
Panther

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