iptables 규칙은 인터넷 액세스 차단을 해제하고 3600초 후에 다시 차단합니다.

iptables 규칙은 인터넷 액세스 차단을 해제하고 3600초 후에 다시 차단합니다.

나는 아들의 터미널에서 때때로 인터넷에 액세스할 수 있도록 하기 위해 이 작업을 수행합니다(기본적으로 비활성화되어 있음).

./unblockinternet.sh
<enter password>

다음 스크립트를 사용하세요.

su -c "iptables -D OUTPUT -m owner --uid-owner son -j REJECT"

1시간 후에 네트워크를 자동으로 다시 차단하려면 어떻게 해야 합니까?(이미 재부팅 후 사용자에 대해 다시 차단하고 있는데 son3600초 후에도 차단하고 싶습니다.)

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/0hash:net 유형의 컬렉션에 추가하는 것은 불가능하므로 두 개의 항목이 필요합니다. options 를 추가하여 시간 초과를 사용자 정의할 수도 있습니다 timeout SECONDS.)

IPv6를 사용하는 경우 플래그를 사용하여 다른 ipset를 생성하고 family inet6iptables 규칙을 추가한 다음 차단 해제 스크립트에서 ::/18000::/1세트에 추가합니다.

관련 정보