나는 아들의 터미널에서 때때로 인터넷에 액세스할 수 있도록 하기 위해 이 작업을 수행합니다(기본적으로 비활성화되어 있음).
./unblockinternet.sh
<enter password>
다음 스크립트를 사용하세요.
su -c "iptables -D OUTPUT -m owner --uid-owner son -j REJECT"
1시간 후에 네트워크를 자동으로 다시 차단하려면 어떻게 해야 합니까?(이미 재부팅 후 사용자에 대해 다시 차단하고 있는데 son
3600초 후에도 차단하고 싶습니다.)
su -c "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
더 정확하게 는 지금 비밀번호를 입력하지 않고 3600초 후에 실행되도록 타이머를 추가하려면 어떻게 해야 합니까 ? 분명히 난 안 그럴 거야정확하게3600초 후, 그의 단말기가 나타났다.
답변1
당신이 사용할 수있는at
:
sudo at next hour -f myiptablesscript
액세스를 비활성화하는 명령은 어디에 myiptablescript
있습니까? 아니면 다음과 같은 줄에 있습니다.
sudo at next hour -f /dev/stdin <<< "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
당신은 결합할 수 있습니다터놓다그리고차단하다두 줄짜리 스크립트로 작성되었습니다:
#!/bin/bash
iptables -D OUTPUT -m owner --uid-owner son -j REJECT
at next hour -f /dev/stdin <<< "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
실행 권한을 사용하여 이 스크립트를 저장하면 unblockinternet
다음과 같이 호출할 수 있습니다.
sudo ./unblockinternet
이렇게 하면 차단 규칙이 즉시 제거되며 복원되기까지 1시간 동안 대기하게 됩니다.
답변2
systemd가 있는 경우 /etc/systemd/system/unblockinternet.service
다음 과 같은 작은 단위 파일을 작성할 수 있습니다.
[Unit]
Description=unblock internet 1 hour
[Service]
Type=simple
ExecStartPre=/usr/sbin/iptables ...
ExecStart=/usr/bin/sleep 3600
ExecStop=/usr/bin/iptables ...
시작하려면 이를 입력 systemctl restart unblockinternet
하면 루트로 인증하라는 메시지가 표시됩니다.
답변3
ipset을 사용할 수도 있습니다. 이는 약간 더 복잡하지만 시간 초과는 전적으로 커널에 의해 처리됩니다. 한 가지 장점은 대기 중인 명령 취소에 대해 걱정할 필요 없이 시간 초과를 업데이트할 수 있다는 것입니다.
세트를 생성하고 해당 iptables 규칙을 추가합니다.
ipset create son_allowed hash:net timeout 3600
iptables -A OUTPUT -m owner --uid-owner son -m set --match-set son_allowed dst -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner son -j REJECT
이제 차단 해제 스크립트는 모든 IP를 컬렉션에 추가합니다.
ipset add son_allowed 0.0.0.0/1 -exist
ipset add son_allowed 128.0.0.0/1 -exist
(참고: 불행하게도 0.0.0.0/0
hash:net 유형의 컬렉션에 추가하는 것은 불가능하므로 두 개의 항목이 필요합니다. options 를 추가하여 시간 초과를 사용자 정의할 수도 있습니다 timeout SECONDS
.)
IPv6를 사용하는 경우 플래그를 사용하여 다른 ipset를 생성하고 family inet6
iptables 규칙을 추가한 다음 차단 해제 스크립트에서 ::/1
및 8000::/1
세트에 추가합니다.