진행 중인 인터넷 액세스를 차단하고 로컬 호스트 연결을 허용하는 방법

진행 중인 인터넷 액세스를 차단하고 로컬 호스트 연결을 허용하는 방법

Docker에서 2개의 프로세스를 실행하는 Python 프로그램이 있습니다.

  1. 내 서버는 8080을 수신합니다.
  2. 8000을 수신하는 애플리케이션

두 번째 프로세스에 대한 인터넷 액세스를 차단하려고 합니다. unshare명령을 사용하여 이를 달성 할 수 있습니다 .

그러나 내 서버(첫 번째 프로세스)는 두 번째 프로세스를 호출해야 합니다. 이 명령은 또한 localhost 연결을 차단하는 것으로 보입니다.

첫 번째 프로세스에서 127.0.0.1:8000을 호출하면

HTTPConnectionPool(host='0.0.0.0', port=8000): url: /api/v1/upload 최대 재시도 횟수가 초과되었습니다(NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ffb48c59b20>으로 인해 발생): 새 연결) : [Errno 111] 연결이 거부되었습니다.'))"

시도해 보고 ip link set dev lo up127.0.0.1에 ping을 보낼 수 있었지만 127.0.0.1:8000에 전화하려고 하면 여전히 같은 오류가 발생합니다.

답변1

usergroup을 사용하여 이 문제를 해결했습니다.

  1. "no-external-internet" 그룹을 추가하고 여기에 사용자를 추가하세요.

    sudo addgroup no-external-internet
    sudo adduser $USER no-external-internet
    
  2. {PORT}에서 {HOST}로 나가는 트래픽을 허용하고 다른 모든 아웃바운드 연결을 거부하는 iptables 규칙을 추가하세요.

    sudo iptables -A OUTPUT -m owner --gid-owner no-external-internet -s {HOST} -p 
    tcp --sport {PORT} -j ACCEPT; 
    sudo iptables  -A OUTPUT -m owner --gid-owner no-external-internet -j REJECT; 
    sudo ip6tables -A OUTPUT -m owner --gid-owner no-external-internet -j REJECT; 
    
  3. 사용자 그룹을 사용하여 하위 프로세스를 실행합니다.

    sg no-external-internet "your command to run child process"

관련 정보