Ubuntu 17.04에서는 IP 테이블을 사용하여 프로세스의 인터넷 연결을 차단하려고 시도했지만 localhost, 특히 127.0.0.1:5500(프로세스가 생성한 서버)은 허용했습니다.
프로세스가 인터넷에 액세스할 수 없지만 127.0.0.1:5500에 대한 액세스 시간이 초과되었습니다. 127.0.0.1로 ping을 시도하면 "ping: sendmsg: Operation not permitted"
.
나는 다음 단계를 따랐습니다. https://ubuntuforums.org/showthread.php?t=1188099.
내 IP 테이블 파일은 다음과 같습니다.
#!/bin/bash
iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
나는 그것을 실행하는 데 사용 sudo -g no-internet <command>
합니다 sudo -g no-internet firefox
.
내가 뭔가 잘못하고 있는 걸까요, 아니면 단순히 불가능한 걸까요? 더 좋은 방법이 있나요?
답변1
이것이 새로운 nftables 솔루션입니다. 그러나 Ubuntu 17.04는 너무 오래되었을 수 있습니다. 데비안에는 최신 버전에서 기본적으로 nftables만 설치되어 있습니다.
그것은 내 시스템과 비슷한 것에서 적응되었습니다. 있는 그대로 테스트하지는 않았지만(특히 다음 줄 dport
: I don't have this) 작동해야 합니다.
#!/usr/sbin/nft -f
table ip my_table {}
flush table my_table
table ip my_table {
chain output {
type filter hook output priority 0; policy accept;
skuid "other" jump restrict_chain; #user to restrict
}
chain restrict_chain {
counter;
oifname != "lo" jump reject_chain;
tcp dport != 5500 jump reject_chain; #line not tested
accept;
}
}
nftables의 장점은 더 간단하고 (이 스크립트가) 원자적일 수 있다는 것입니다.
나머지 텍스트에서 언급하지 않았기 때문에 코드에서와 같이 로컬 네트워크를 다루지 않았습니다.