프로세스에 대한 인터넷 액세스를 비활성화하고 localhost를 허용하는 방법은 무엇입니까?

프로세스에 대한 인터넷 액세스를 비활성화하고 localhost를 허용하는 방법은 무엇입니까?

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의 장점은 더 간단하고 (이 스크립트가) 원자적일 수 있다는 것입니다.

나머지 텍스트에서 언급하지 않았기 때문에 코드에서와 같이 로컬 네트워크를 다루지 않았습니다.

관련 정보