Network Namespace
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
네트워크 네임스페이스는 네트워크 스택의 격리를 제공하는 리눅스 커널 기능으로, 각 네트워크 네임스페이스가 독립적인 네트워크 구성, 인터페이스, IP 주소, 라우팅 테이블 및 방화벽 규칙을 가질 수 있도록 합니다. 이 격리는 각 컨테이너가 다른 컨테이너 및 호스트 시스템과 독립적인 네트워크 구성을 가져야 하는 컨테이너화와 같은 다양한 시나리오에서 유용합니다.
새로운 네트워크 네임스페이스가 생성되면, 완전히 격리된 네트워크 스택으로 시작하며, 루프백 인터페이스(lo) 외에는 네트워크 인터페이스가 없습니다. 이는 새로운 네트워크 네임스페이스에서 실행되는 프로세스가 기본적으로 다른 네임스페이스나 호스트 시스템의 프로세스와 통신할 수 없음을 의미합니다.
veth 쌍과 같은 가상 네트워크 인터페이스를 생성하고 네트워크 네임스페이스 간에 이동할 수 있습니다. 이를 통해 네임스페이스 간 또는 네임스페이스와 호스트 시스템 간의 네트워크 연결을 설정할 수 있습니다. 예를 들어, veth 쌍의 한 쪽 끝을 컨테이너의 네트워크 네임스페이스에 배치하고, 다른 쪽 끝을 호스트 네임스페이스의 브리지 또는 다른 네트워크 인터페이스에 연결하여 컨테이너에 네트워크 연결을 제공합니다.
네임스페이스 내의 네트워크 인터페이스는 자신의 IP 주소, 라우팅 테이블 및 방화벽 규칙을 가질 수 있으며, 다른 네임스페이스와 독립적입니다. 이를 통해 서로 다른 네트워크 네임스페이스의 프로세스가 서로 다른 네트워크 구성을 가질 수 있으며, 마치 별도의 네트워크 시스템에서 실행되는 것처럼 작동할 수 있습니다.
프로세스는 setns()
시스템 호출을 사용하여 네임스페이스 간에 이동하거나, unshare()
또는 clone()
시스템 호출을 사용하여 CLONE_NEWNET
플래그와 함께 새로운 네임스페이스를 생성할 수 있습니다. 프로세스가 새로운 네임스페이스로 이동하거나 생성할 때, 해당 네임스페이스와 관련된 네트워크 구성 및 인터페이스를 사용하기 시작합니다.
새로운 인스턴스의 /proc
파일 시스템을 --mount-proc
매개변수를 사용하여 마운트하면, 새로운 마운트 네임스페이스가 해당 네임스페이스에 특정한 프로세스 정보에 대한 정확하고 격리된 뷰를 갖도록 보장합니다.
또한, 루트 사용자일 때만 다른 프로세스 네임스페이스에 들어갈 수 있습니다. 그리고 디스크립터 없이 다른 네임스페이스에 들어갈 수 없습니다 (예: /proc/self/ns/net
).
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)