จะ จำกัด การเข้าถึงอินเทอร์เน็ตของผู้ใช้เป็นระยะเวลาอย่างไร?


12

ฉันต้องการให้ผู้ใช้รายหนึ่ง (ไม่ใช่ในรายการ sudoers) มีอินเทอร์เน็ตตั้งแต่ 14:00 น. ถึง 16:00 น. และ 17:00 น. ถึง 18:30 น. เป็นไปได้ไหม? ฉันสามารถกำหนดช่วงเวลาที่แตกต่างกันสำหรับวันในสัปดาห์ที่แตกต่างกันได้หรือไม่


คุณควรทำสิ่งนี้ให้ดีที่สุดที่ระดับการควบคุมเราเตอร์หรือเกตเวย์แทนที่จะเป็นระบบเอง ... เท่าที่ฉันรู้ไม่มีระบบภายในอูบันตูที่ง่ายต่อการ จำกัด การเข้าถึงอินเทอร์เน็ตในระดับผู้ใช้
Thomas Ward

เมื่อฉันทำในระดับเราเตอร์ผู้ใช้ทุกคนจะถูก จำกัด ...
cupakob

Afaik (และฉันกำลังมองหาวิธีแก้ไขปัญหานี้ตั้งแต่ 9.04) ไม่มีโซลูชันซอฟต์แวร์สำหรับสิ่งนี้ ได้รับในมุ้งของฉันมีผู้ใช้เพียงคนเดียวต่อคอมพิวเตอร์และพวกเขาทั้งหมดเชื่อมต่อผ่านกล่องเซิร์ฟเวอร์ที่ทำหน้าที่เป็นเกตเวย์ กล่องนั้นมี crontab ที่บล็อกการเข้าถึงอินเทอร์เน็ตทั้งหมดบนระบบนั้นแล้วลบออกในภายหลัง ต่อมามันก็ยังทำงานในเวลาที่แตกต่างกันในแต่ละวัน ด้วยความอยากรู้อยากเห็นทำไมคุณต้อง จำกัด การเข้าถึงช่วงเวลาที่เข้มงวดและทำไมคุณต้องทำโดยผู้ใช้
Thomas Ward

ฉันต้องการโดยผู้ใช้เพราะพีซีหนึ่งเครื่องถูกใช้โดยผู้ใช้สองคน และฉันต้องการ จำกัด การเข้าถึงเพราะผู้ใช้คนที่สองต้องเรียนรู้มากขึ้นและไม่ต้องอยู่ใน facebook :) แต่ความคิดของคุณกับ crontab นั้นดีมาก .... คุณใช้อะไรเพื่อปิดกั้นการเข้าถึง? ฉันสามารถทำให้เหมือนกันสำหรับผู้ใช้เมื่อฉันปิดกั้นเราเตอร์ :)
cupakob

เราเตอร์และกล่องเกตเวย์ของฉันแยกจากกัน - เนื่องจากกล่องเกตเวย์กำหนดที่อยู่แบบคงที่ (และจัดการกับข้อมูล) จากกล่องอื่น ๆ ฉันใช้ iptables เพื่อบล็อกที่อยู่ IP ส่วนตัวแบบคงที่ที่กำหนดจากการส่งข้อมูลขาออกหรือขาเข้า บล็อกการรับส่งข้อมูลอินเทอร์เน็ตทั้งหมดลงในช่อง crontabs แต่ละคนใช้คำสั่ง iptables ของตัวเองเพื่อที่จะลบรายการตามกำหนดเวลา มันเป็นระบบที่ไม่สมบูรณ์เพราะฉันสามารถซื้อเราเตอร์ที่ใช้งานได้ดีกว่า: P
Thomas Ward

คำตอบ:


7

คุณสามารถใช้ownerส่วนขยายของ iptables เพื่อบล็อกผู้ใช้จากการเข้าถึงเน็ตเช่น

 sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT

ตอนนี้คุณสามารถใช้ cron เพื่อเพิ่มหรือลบกฎเหล่านั้น (ซึ่งอาจต้องใช้สคริปต์เชลล์เล็กน้อยหากคุณมีกฎ iptable อยู่แล้วหรือต้องการให้ผู้ใช้ที่แตกต่างกันในเวลาที่ต่างกัน)


Ooh ฉันไม่รู้ว่ามีอยู่: P @Florian: (a) เคอร์เนลโมดูลใดที่จำเป็นต้องโหลดสำหรับสิ่งนี้ (b) ใช้กับสิ่งนี้ได้-j REJECT --reject-with <argument>หรือไม่
Thomas Ward

(a) xt_owner โหลดโดยอัตโนมัติ (b) ฉันไม่เห็นเหตุผลว่า - การปฏิเสธด้วยไม่ควรทำงานกับสิ่งนี้ แต่ไม่เคยลองเลย
Florian Diesch

ฉันจะทดสอบในภายหลัง: P มีโมดูลเจ้าของอยู่ใน iptables manpages เพื่อดูรายละเอียดการใช้งานหรือไม่? (หมายเหตุ Side: ฉันถามว่าเคอร์เนลโมดูลเคอร์เนลเพราะฉันจะรวบรวมที่กำหนดเอง: /)
โทมัสวอร์ด

ดูสิ่งที่ฉันกำลังมองหา .... ฉันต้องลอง :)
cupakob

@EvilPhoenix: ใช่มันเป็นเอกสารใน manpage iptables
Florian Diesch

8
  1. เข้าสู่ระบบด้วย root:

    sudo su

  2. ตรวจสอบสถานะไฟร์วอลล์ของคุณ:

    ufw status
    

    หากไฟร์วอลล์ไม่ได้ใช้งานปัญหา:

    ufw enable
    
  3. เพื่อที่จะ จำกัด การใช้วิลเฮล์อินเทอร์เน็ตในวันอาทิตย์, วันอังคาร, วันพุธและวันศุกร์กับช่วงเวลาที่ได้รับอนุญาตให้เวลา (14: 00-16: 00 และ 17: 00-18: 30):

    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 00:00:01 --timestop 14:00:00 -j DROP 
    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 16:00:00 --timestop 17:00:00 -j DROP 
    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 18:30:00 --timestop 23:59:59 -j DROP 
    

    หมายเหตุด้านข้าง : * โปรดทราบการใช้-Iสวิตช์แทน-Aสวิตช์ของiptablesคำสั่ง -Iสวิตช์แทรกกฎระเบียบดังกล่าว (3) ที่จุดเริ่มต้น (บนสุด) ของห่วงโซ่กฎ OUTPUT มากกว่าที่ด้านล่างของห่วงโซ่ การวางกฎที่ผนวกด้วยตนเองไว้ด้านบนของนโยบายไฟร์วอลล์ปกติเป็นสิ่งสำคัญเนื่องจากกฎจะถูกประมวลผลจากบนลงล่าง ถ้ากฎสูงสุดยอมรับแพ็กเก็ตเชน OUTPUT จะไม่ถูกตรวจสอบกฎต่อไปนี้อีกต่อไปซึ่งอาจมี DROPped แพ็กเก็ต

  4. โปรดตรวจสอบให้แน่ใจว่าได้ป้อนกฎอย่างถูกต้องแล้ว:

    iptables -L OUTPUT
    

    เพื่อที่จะลบกฎที่ไม่เหมาะสมพูด (นับ 1 ตามมาจากด้านบนของการปกครองฉบับที่ 1, iptables -v -L OUTPUT) iptables -D OUTPUT 1ปัญหา:

  5. บันทึก iptables สำหรับการกู้คืนในการบูตครั้งถัดไป:

    iptables-save > /etc/iptables.rules
    
  6. ใน/etc/rc.localท้ายบรรทัด:

    iptables-restore < /etc/iptables.rules
    

เสร็จแล้ว

-

ทดสอบกับ Ubuntu 11.10 (oneiric) locale: he


1
คำตอบที่ยอดเยี่ยมด้วยโซลูชั่นที่สมบูรณ์แบบ! แต่ทราบว่าทุกครั้งจะถูกตีความเป็น UTCดังนั้นหนึ่งอาจต้องชดเชยพวกเขาสำหรับเวลาท้องถิ่น - central european summer time -2 hoursในกรณีของฉัน
Penguin Penguin ที่แม่นยำ

ฉันทำทุกขั้นตอนและพวกเขาทำงาน (อินเทอร์เน็ตมี จำกัด ) แต่หลังจากรีสตาร์ทอินเทอร์เน็ตก็เปิดอีกครั้ง ฉันจะตรวจสอบ iptables -L OUTPUT และไม่พบกฎฉันเพิ่ม ...
Lawand

1
อะไรคือเหตุผลที่คุณกำลังเปิดใช้งานufwแม้ว่าคุณจะใช้ในภายหลังiptables?
Balu

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