시간 간격 동안 사용자의 인터넷 액세스를 제한하는 방법은 무엇입니까?


12

sudoers 목록에없는 사용자 중 하나가 14:00에서 16:00까지 그리고 17:00에서 18:30까지 인터넷에 액세스하기를 원합니다. 가능합니까? 주마다 다른 시간 간격을 설정할 수 있습니까?


시스템 자체가 아닌 라우터 또는 게이트웨이 제어 수준에서이 작업을 수행하는 것이 가장 좋습니다. 내가 아는 한 우분투에는 사용자 수준에서 인터넷 액세스를 제한하는 쉬운 시스템이 없습니다.
토마스 워드

내가 라우터 수준에서 만들면 모든 사용자가 제한됩니다 ...
cupakob

Afaik (그리고 9.04 이후로 이것에 대한 해결책을 찾고 있습니다)에는 이것에 대한 소프트웨어 솔루션이 없습니다. 내 네트워크에는 컴퓨터 당 한 명의 사용자 만 있으며 모두 게이트웨이 역할을하는 서버 상자를 통해 연결됩니다. 이 상자에는 해당 시스템의 모든 인터넷 액세스 를 차단 하고 나중에 제거 하는 crontab이 있습니다. 그 후 매일 다른 시간에 실행됩니다. 호기심 때문에, 왜 엄격한 기간 동안 액세스를 제한해야합니까? 그리고 왜 사용자가해야합니까?
토마스 워드

하나의 PC가 두 명의 사용자가 사용하기 때문에 사용자가 필요합니다. 그리고 두 번째 사용자가 훨씬 더 많은 것을 배우고 페이스 북에 머물지 않아야하기 때문에 액세스를 제한하고 싶습니다. :) crontab에 대한 아이디어는 훌륭합니다. 내가 라우터를 차단할 때 사용자를 위해 동일하게 만들 수 있습니다 :)
cupakob

내 라우터와 게이트웨이 상자는 분리되어 있습니다. 게이트웨이 상자가 다른 상자에서 고정 주소를 할당하여 데이터를 처리 할 때 iptables를 사용하여 고정 할당 개인 IP 주소가 아웃 바운드 또는 인바운드 데이터를 보내지 못하도록 차단합니다. 상자에 대한 모든 인터넷 트래픽을 차단합니다. crontab은 각각 스케줄에서 항목을 제거하기 위해 자체 iptables 명령을 사용합니다. 그것은 더 잘 작동하는 라우터를 구입할 수 있기 때문에 불완전한 시스템입니다. P
Thomas Ward

답변:


7

iptables의 owner확장을 사용 하여 다음과 같이 사용자가 인터넷에 액세스하는 것을 차단할 수 있습니다

 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>합니까?
토마스 워드

(a) xt_owner가 자동으로로드됩니다. (b) --reject-with가 이것과 함께 작동하지 않지만 시도하지 않은 이유는 없습니다.
Florian Diesch 2018 년

나중에 이것을 테스트 할 것이다 : P 소유자 모듈이 iptables 맨 페이지에 존재 하는가? (Side Note : 커널이 커스텀 컴파일되어 있기 때문에 어떤 커널 모듈을 요청했는지 : /)
Thomas Ward

내가 찾고있는 것을 정확하게 찾습니다 .... 나는 그것을 시도해야합니다 :)
cupakob

@EvilPhoenix : 예, iptables 맨 페이지에 문서화되어 있습니다
Florian Diesch

8
  1. 루트로 로그인하십시오 :

    수도

  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스위치 OUTPUT 규칙 체인의 시작 (위)에서가 아닌 쇄의 하단에 상기 규칙 (3)를 삽입한다. 규칙은 위에서 아래로 처리되므로 수동 방화벽 규칙을 일반 방화벽 정책 위에 배치하는 것이 중요합니다. 최상위 규칙이 패킷을 수락하면 체인 OUTPUT에서 더 이상 패킷을 삭제했을 수있는 다음 규칙을 검사하지 않습니다.

  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
    

끝난

-

우분투 11.10 (oneiric)에서 로케일 테스트 :


1
완벽한 솔루션으로 훌륭한 답변! 그러나 모든 시간은 UTC로 해석 되므로 필자의 경우 현지 시간으로 수동으로 오프셋해야 할 수도 있습니다 central european summer time -2 hours.
정확한 펭귄

나는 모든 단계를 밟았고 그들은 일했다 (인터넷 액세스는 제한적이었다). iptables -L OUTPUT을 확인했는데 추가 한 규칙을 찾지 못했습니다 ...
Lawand

1
ufw나중에 사용하더라도 활성화하는 이유는 무엇입니까 iptables?
balu

--kerneltz옵션 으로 고칠 수있는 @PrecisePenguin ( "UTC 대신 커널 시간대 사용")
waldyrious
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.