실행 중인 프로세스에 대한 인터넷 액세스 차단 및 차단 해제

실행 중인 프로세스에 대한 인터넷 액세스 차단 및 차단 해제

프로세스에 대한 인터넷 액세스를 차단하고 프로세스가 계속 실행되는 동안 차단을 해제할 수 있습니까?

답변1

대답은 "상황에 따라 다르다"이다.

  1. 애플리케이션이 알려진 원격 서비스 세트에 액세스합니까, 아니면 특정(고유) 포트 세트를 사용합니까? 두 경우 모두 이러한 원격 주소나 포트에 대한 액세스만 차단하는 규칙을 만들 수 있습니다.

  2. 자신의 네트워크 네임스페이스에서 프로세스를 시작하는 경우(아마도 외부 세계에 액세스하기 위해 가장함) 애플리케이션별 규칙을 생성하는 것은 매우 쉽습니다. 왜냐하면 (a) 네임스페이스-로컬 넷필터 규칙을 생성할 수 있고 (b) 글로벌 넷필터를 생성할 수 있기 때문입니다. IP 또는 장치별로 애플리케이션 네임스페이스를 참조하는 규칙입니다. 자체 네트워크 네임스페이스 내에서 프로세스를 실행하는 가장 일반적인 방법은 Docker 또는 Podman과 같은 컨테이너 런타임을 사용하는 것입니다. 그러나 Linux 시스템에서 이미 사용 가능하거나 unshare를 사용하여 수동으로 수행 할 수도 있습니다. ip수동으로 설정하는 것은 까다로울 수 있습니다.

  3. 애플리케이션이 특정 사용자 또는 그룹 ID로 실행 중인 경우 iptables owner모듈을 사용하여 이러한 조건을 사용하여 일치시킬 수 있습니다.

답변2

이를 달성하기 위해 cgroup2 및 iptables를 사용할 수 있습니다. firefox프로세스에 대한 모든 네트워크 액세스(루프백 포함)를 차단한다고 가정해 보겠습니다 .

# CGROUP_MOUNT_POINT=/sys/fs/cgroup

create cgroup

# mkdir $CGROUP_MOUNT_POINT/disable-network

add iptables rule to disable network access from cgroup

# iptables -A OUTPUT -m cgroup --path disable-network/ -j REJECT

add firefox processes to created cgroup

# for pid in $(pidof firefox); do echo $pid > $CGROUP_MOUNT_POINT/disable-network/cgroup.procs; done

remove firefox processes from cgroup, moving them to root cgroup

# for pid in $(pidof firefox); do echo $pid > $CGROUP_MOUNT_POINT/cgroup.procs; done

그러나 몇 가지 함정이 있습니다. cgroup을 수동으로 관리하는 것은 어렵고 기존 소켓은 새 cgroup과 연결되지 않습니다. systemd를 사용하고 슬라이싱 및 systemd-run영구 iptables 규칙을 사용하여 cgroup을 관리하는 것을 선호할 수 있습니다 .

답변3

모든 프로세스에 적용되는 것은 아니지만 컴퓨터에서 네트워킹을 끄고 언제든지 다시 가져올 수 있습니다. 그러나 이는 실행 중인 모든 응용 프로그램에 적용됩니다.

예를 들어 네트워크 카드 eth0(유선 네트워크의 기본 이름) 를 중지하고 시작할 수 있습니다.

# ifconfig eth0 down
# ifconfig eth0 up

또는 모든 네트워크 인터페이스를 동시에:

# /etc/init.d/network stop
# /etc/init.d/network start
   - or depending on OS that can be
# service network stop 
# service network start

물론 이러한 명령에는 루트 액세스가 필요하므로 루트 액세스로 전환하거나 sudo.

관련 정보