OpenSnitch ไฟร์วอลล์แอปพลิเคชันแบบโต้ตอบสำหรับ GNU/Linux
(github.com/evilsocket)- OpenSnitch เป็นไฟร์วอลล์แอปพลิเคชันสำหรับ GNU/Linux ที่เน้นการกรองการเชื่อมต่อภายนอกของแอปพลิเคชันแบบโต้ตอบ
- สามารถบล็อก โดเมนโฆษณา·ตัวติดตาม·มัลแวร์ ได้ทั้งระบบ และยังตั้งค่าไฟร์วอลล์ระบบที่อิงกับ nftables ได้จาก GUI
- GUI รองรับการกำหนดค่า กฎของระบบ เช่น การตั้งค่านโยบายขาเข้าและการอนุญาตบริการขาเข้า รวมถึงจัดการหลายโหนดจากศูนย์กลางได้
- การติดตั้งทำได้โดยดาวน์โหลดแพ็กเกจ deb/rpm แล้วติดตั้งด้วย
aptหรือdnfจากนั้นรันopensnitch-uiหรือเปิด GUI จากเมนูแอปพลิเคชัน - มีพื้นที่สนทนา Show and tell สำหรับแชร์กรณีที่ตรวจจับการเชื่อมต่อที่ไม่คาดคิดได้ และมีความสามารถในการเชื่อมต่อกับ SIEM เพื่อนำไปใช้เฝ้าระวังการเชื่อมต่อในสภาพแวดล้อมการใช้งานจริง
OpenSnitch ทำอะไร
- OpenSnitch เป็นไฟร์วอลล์แอปพลิเคชันสำหรับ GNU/Linux
- ความสามารถหลักคือการกรอง การเชื่อมต่อขาออก ของแอปพลิเคชันแบบโต้ตอบ
- รองรับการบล็อกโฆษณา ตัวติดตาม และโดเมนมัลแวร์ทั้งระบบ
ความสามารถด้านไฟร์วอลล์และการจัดการโหนด
- สามารถกำหนดค่าไฟร์วอลล์ระบบได้จาก GUI
- จัดการการตั้งค่าที่อิงกับ nftables
- ตั้งค่านโยบายขาเข้า การอนุญาตบริการขาเข้า และอื่น ๆ ได้
- สามารถจัดการหลายโหนดได้จาก GUI ส่วนกลาง
- รองรับการเชื่อมต่อกับ SIEM
ดาวน์โหลดและติดตั้ง
- ดาวน์โหลดแพ็กเกจ deb/rpm ได้จาก GitHub Releases
- ติดตั้งแพ็กเกจ deb:
sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
- ติดตั้งแพ็กเกจ rpm:
sudo dnf install opensnitch*.rpm
- หลังติดตั้ง ให้รัน
opensnitch-uiหรือเปิด GUI จากเมนูแอปพลิเคชัน - ดูข้อมูลการติดตั้งเพิ่มเติมได้ในเอกสาร
กรณีใช้งานและการมีส่วนร่วม
- ตัวอย่างที่ OpenSnitch ตรวจจับการเชื่อมต่อที่ไม่คาดคิดได้ถูกรวบรวมไว้ในการสนทนา Show and tell
- หากพบการเชื่อมต่อที่ไม่คาดคิด สามารถส่งเป็นการสนทนาใหม่ได้
ข้อมูลโครงการ
- OpenSnitch ใช้สัญญาอนุญาต GPL3
- สามารถสนับสนุนได้จากส่วน Sponsor this project ทางด้านขวาของที่เก็บ GitHub
- ผู้ดูแลโครงการปัจจุบันตรวจสอบได้จากประวัติการคอมมิตของสาขา master
- ดูรายชื่อผู้มีส่วนร่วมได้จากกราฟ contributors
- งานแปลดำเนินการผ่าน Weblate
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เคยพยายามใช้ OpenSnitch เป็น ไฟร์วอลล์แบบโต้ตอบ อยู่หลายครั้ง แต่มีปัญหาที่ไม่รู้ด้วยซ้ำว่าแก้ได้ไหม ซึ่งไม่ใช่ความผิดของ OpenSnitch โดยตรง
เช่น ถ้ารัน
curlในเทอร์มินัล ก็ต้องตัดสินใจอนุญาตทุกครั้ง หรือไม่ก็ใส่ไว้ในรายการอนุญาตถาวรแต่ถ้าอนุญาตเครื่องมือเอนกประสงค์อย่าง
curlหรือwgetไปแล้ว มัลแวร์บนเครื่องที่ถูกเจาะก็สามารถใช้เครื่องมือเหล่านั้นออกอินเทอร์เน็ตได้โดยไม่มีการแจ้งเตือนจากไฟร์วอลล์ เท่ากับ เปิดประตูทิ้งไว้เต็มที่ความอุ่นใจที่ว่าถ้ามีการเข้าถึงใหม่ ระบบจะถามว่าจะอนุญาตไหม ทำให้ความยุ่งยากช่วงแรกคุ้มค่า และพอชินแล้วก็จัดการได้ค่อนข้างง่าย
กฎที่หมดอายุก็ใช้บ่อย เช่น ถ้าเชื่อถือโปรแกรมติดตั้งและอยากปล่อยให้ทำงานได้อิสระชั่วคราว ก็เปิดกฎสำหรับไฟล์ executable นั้นให้หมดอายุในอนาคตอันใกล้ ตัวเลือกมีทั้งถาวร, จนกว่าจะรีบูต, 30 วินาทีถัดไป, 5 นาทีถัดไป ฯลฯ ทำให้งานที่มี endpoint จำนวนมากง่ายขึ้นมาก และไม่ทิ้งช่องโหว่ถาวรไว้
devอนุญาตทราฟฟิกcurl/wgetทั้งหมดได้ ส่วนผู้ใช้normalก็ยังตรวจจับต่อไปงานพัฒนาก็รันด้วยรูปแบบ
su -c curl … devถ้าโปรแกรมอันตรายกำลังรันอยู่ในพื้นที่ของผู้ใช้ทั่วไป แอปไฟร์วอลล์ก็น่าจะจับการใช้
curlและwgetได้อย่างเหมาะสมการต้องใส่รหัสผ่านทุกครั้งน่ารำคาญ จึงอาจตั้งค่า PAM ให้ใช้ YubiKey หรือการยืนยันตัวตนแบบไบโอเมตริกได้ และผู้ใช้นี้ควรล็อกอินไม่ได้และไม่มีรหัสผ่านด้วย
curlหรือwgetได้ผมใช้ไฟร์วอลล์ระดับแอปบนมือถือ แต่ไม่ได้ใส่ชื่อโปรแกรมไว้ในรายการอนุญาต หากเป็นการอนุญาตให้โปรแกรมเฉพาะเข้าถึง โดเมน/IP address เฉพาะ
จากประสบการณ์ วิธีที่ง่ายที่สุดในการบล็อกการสื่อสารออกภายนอกของโปรแกรมหรือมัลแวร์คือ บล็อกการเข้าถึง DNS ทำแบบนั้นมาหลายสิบปีแล้ว และยังทำงานได้สมบูรณ์ “99%” ของโปรแกรม/มัลแวร์ที่สื่อสารออกภายนอกพึ่งพา DNS ไม่ใช่ IP ที่ hardcode ไว้
โปรแกรม/มัลแวร์ส่วนน้อยที่ไม่ต้องใช้ DNS ก็ตรวจจับได้ง่าย และใน DNS ก็อนุญาตเฉพาะบางโดเมนเท่านั้น ทุกวันนี้ไม่ได้ใช้ local zone file ที่มี IP address ที่จำเป็นแล้วด้วยซ้ำ แต่ให้ forward proxy จัดการ mapping โดเมน→IP รายการอนุญาตที่ proxy อ่านจะคล้าย zone file แต่เป็นไฟล์ข้อความที่ง่ายกว่า
bash/zshที่ผู้ใช้เป็นเจ้าของ ก็ปล่อยcurlผ่าน ไม่อย่างนั้นก็บล็อก แต่ก็ดูค่อนข้างยุ่งยากเช่น ถ้า
curlถูกเรียกใช้ และเมื่อไล่ย้อนรายการ parent ขึ้นไปเจอโปรเซส/usr/bin/trustedก็ควรประกาศได้ว่าให้อนุญาตการเรียกcurlครั้งนี้ แบบนั้นตราบใดที่ parent ของสคริปต์ bash คือ/usr/bin/trustedก็จะอนุญาตให้สคริปต์นั้นรันcurlได้นี่เป็นเหตุผลที่ทำให้สุดท้ายย้ายไป NixOS
สมัยก่อนตอนใช้ไฟร์วอลล์ระดับแอป มีการตั้งค่าเยอะ อัปเดตที path เปลี่ยนก็พังบ่อย และทุกครั้งที่ย้ายไปเครื่องใหม่ต้องทำใหม่ทั้งหมด เกิด churn และความสูญเปล่าเยอะมาก
พอผสานเข้ากับ package manager ปัญหาพวกนั้นก็หายไป หลังตั้งค่ารายการอนุญาตเริ่มต้นเสร็จแล้ว เวลาเพิ่มแพ็กเกจใหม่ใน config ของ nix ก็ต้องทำงานเพิ่มอีกนิดหน่อยเท่านั้น
ถ้าขี้เกียจเพิ่มรายการอนุญาตใน config ของ nix ก็ใส่รายการอนุญาตชั่วคราวที่คงอยู่จนถึงการรีบูตครั้งถัดไปได้ ช่วงเรียนรู้ชันและงานก็เยอะ แต่ตอนนี้บำรุงรักษาง่ายมาก
เหมาะสำหรับจับ แอปห่วย ๆ ที่สร้างการเชื่อมต่อมากเกินไป Thunderbird นายนั่นแหละ
ชอบนะ แต่ก็มีความไม่สะดวกเล็กน้อย กฎชั่วคราวที่หมดอายุแล้วไม่ถูกลบหรือไม่แสดงในอินเทอร์เฟซ เลยต้องรีสตาร์ต GUI เพื่อล้างเป็นครั้งคราว
บน Fedora แนะนำตัวนี้ได้มากกว่าการไปงมกับ firewalld/firewall-config
dnfที่ทุกครั้งที่อัปเดตก็ไล่เชื่อมต่อไปทั่วทั้งทวีป?https://news.ycombinator.com/item?id=41124755
จะอนุญาตไปเลยก็ได้ แต่ไม่อยากทำแบบนั้น
อยากให้มีฟีเจอร์แบบนี้เวลารัน API หรือเว็บเซอร์วิสใน Docker container
containerA: อนุญาตทราฟฟิกขาออกทั้งหมดcontainerB: บล็อกทราฟฟิกขาออก ยกเว้นกรณีตอบกลับ clientcontainerC: เข้าถึงได้เฉพาะupdates.example.comนี่ก็แค่ iptables แยกตาม container หรือเปล่า? น่าจะยัด iptables เข้าไปใน image เดิมได้ แต่ดูงานเยอะ หรือควรจัดการด้วย iptables บน host?
บนโทรศัพท์ Android มีอะไรแบบนี้ไหม? อยากได้คำแนะนำดี ๆ
https://netguard.me
ใช้ AFWall+ มานาน การควบคุมว่าแต่ละแอปจะอนุญาตหรือบล็อก Wi-Fi, cellular, LAN นั้นทำได้เรียบร้อยดี เป็น frontend ของ iptables/nftables จึงปรับแต่งกฎได้มากเท่าที่ต้องการ: https://github.com/ukanth/afwall
ทำงานตั้งแต่ Android 2+
ถ้าไม่มี root ก็ทำได้แค่โซลูชันแบบ VPN อย่าง Adguard
ถ้าต้องการสถิติ ก็มี GlassWire เวอร์ชัน Android เคยลองแค่ beta เลยไม่รู้สถานะปัจจุบัน แต่ก็น่าลองดู
"Rethink: DNS + Firewall + VPN"มีฟีเจอร์คล้ายกันเปลี่ยนมาใช้ตัวนี้จาก NetGuard ที่พูดถึงด้านบน
อยากให้มีแพ็กเกจสำหรับ Arch และ OpenSUSE ด้วย
opensnitchและใน AUR มีopensnitch-ebpf-moduleเทียบกับของอย่าง UFW แล้วเป็นยังไง? สงสัยว่าแก่นหลักคือ UI สำหรับดู activity ที่กำลังเกิดขึ้นหรือเปล่า
ถ้าแอปใด ๆ เรียก telemetry อะไรทำนองนั้น ก็เลือก whitelist/greylist ได้ละเอียด เช่น จะอนุญาตเฉพาะการเชื่อมต่อจาก executable นี้ไปยัง address นี้ไหม หรือจะอนุญาต address นี้เสมอไหม และยังมีตัวเลือกระยะเวลา เช่น ครั้งเดียว, 15 วินาที, จนกว่าจะรีบูต
ถ้าผ่านด่านแรกของการใส่แอปที่ใช้และเชื่อถือไว้ในรายการอนุญาตไปได้ ก็ถือว่าดีมาก และช่วยให้เห็นว่าแอปหรือเกมกำลังทำอะไรที่เราไม่เคยรู้มาก่อน
มีแผนพอร์ตไป macOS ไหม? เคยใช้ Little Snitch อยู่พักหนึ่ง แต่ชอบ โอเพนซอร์ส มากกว่า ด้วยเหตุผลที่ไม่เกี่ยวกับการจ่ายเงิน
เคยลองใช้เป็นพัก ๆ หลายครั้ง แต่มี แครชแบบสุ่ม เยอะเกินไป จนใช้งานค่อนข้างลำบาก