Systemd 개인 네트워크 네임스페이스에 액세스할 수 있도록 만드는 방법

Systemd 개인 네트워크 네임스페이스에 액세스할 수 있도록 만드는 방법

0.0.0.0그래서 포트(TCP)를 바인딩하고 수신하는 애플리케이션이 있습니다 . 통신은 암호화되지 않고 승인되지 않았으므로 너무 깊이 들어가지 않고 이 문제를 해결하고 싶습니다.

127.0.0.1다음을 수행할 수 있도록 바인딩하고 싶습니다.SSH 전달인증 및 암호화에 대한 팁을 얻으세요.

0.0.0.0그러나 프로세스가 외부에서 바인딩되고 액세스 가능해야 한다는 문제가 남아 있습니다 .

내 아이디어 중 하나는 Systemd를 사용하는 것입니다.PrivateNetwork네트워크를 격리합니다(다른 방법으로도 애플리케이션을 샌드박스에 적용하고 싶습니다). 하지만 SSH가 계속 작동하도록 하는 방법을 모르겠습니다. 어쩌면 실행 sshd하고가입하다네트워크 네임스페이스? 그러면 sshd"외부"에서 연결에 어떻게 액세스할 수 있습니까?

얻는 것보다 더 쉬운 방법이 있나요?LD_예압참여하거나 해라소켓장난? 바람직하게 systemd는 어떤 방식으로든 단위/서비스를 포함합니다.이 socat 답변.

답변1

따라서 우선 0.0.0.0에 바인딩되어 구성할 수 없는 웹 애플리케이션은 내 책에서는 치명적인 오류로 간주될 것이며, 활용 능력이 있다면 개발자가 수정해야 할 문제가 될 것입니다. (FOSS 유지관리자/개발자로서 이는 문제가 된 적이 없습니다. 최악의 경우에는 한 줄로 직접 해결할 수 있습니다.)

고려할 수 있는 한 가지 옵션은 호출 을 하이재킹하는 아주 작은 라이브러리를 미리 로드하고 TCP 소켓을 0.0.0.0에 바인딩하는지 확인한 다음 실제 호출을 실제 함수에 바인딩하여 바인딩 LD_PRELOAD되는 트릭 입니다. 원하는 주소.libcbindbind

더 간단한 방법은 공용 인터페이스에서 포트 연결을 허용하지 않는 방화벽 규칙을 제거하여 루프백 연결만 작동하도록 하는 것입니다.

이 문제를 해결하고 잠재적으로 나중에 마이그레이션/유지 관리 노력을 줄이는 고도로 캡슐화된 방법은 애플리케이션을 Linux 컨테이너(예: 에서 실행 podman)에 넣은 다음 포트를 내부적으로 게시하는 것입니다. (그러한 컨테이너와 자동 시작 인프라에 대한 시스템 단위 파일 생성을 잘 활용할 수 podman generate있으며 특별한 권한 없이 이러한 작업을 실행할 수도 있습니다. 이는 솔직히 잘 작성되지 않은 네트워크에 매우 유용합니다. 보안입니다. 지금 할 수 있는 앱의 이점).

모든 것을 포괄하는 이 시스템에는 아무것도 암호화되지 않은 솔루션이 있을 수 있습니다.라인배커 매뉴얼를 사용하면 기본 네임스페이스에서 실행 중인 모든 프로그램에서 컴퓨터의 물리적 인터페이스를 가져와 별도의 네임스페이스에 푸시하고 VPN 터널 연결(와이어가드 인터페이스)만 해당 프로그램과 상호 작용하도록 허용할 수 있습니다. SSH 솔루션은 아니지만 wireguard가 시나리오에 적합한 경우 이것이 옵션이 될 수 있습니다.

내가 가진 한 가지 아이디어는 Systemd의 PrivateNetwork를 사용하여 네트워크를 격리하는 것이었지만(다른 방법으로 응용 프로그램을 샌드박스에 적용하고 싶습니다) SSH가 계속 작동하도록 하는 방법을 모르겠습니다.

저것정말 훌륭한 접근 방식입니다! 슬프게도 PrivateNetwork=격리는 매우 성공적이었다고 생각합니다모두네트워크의 경우 임시 네트워크 NS 이름을 추출하여 다른 유닛에 전달하는 프로그램을 작성해야 합니다. 그런 다음 브리지(일반적으로 :macvlan ip link구성)를 설정하고 해당 네임스페이스로 전송합니다. 약간의 오버헤드.

당신은 당신이 가지고있는 설정을 가질 수 있습니다

  1. ip네임스페이스를 생성하고, 기기를 내부적으로 설정하고 lo, 새 네임스페이스를 자신에게 바인딩하는 일회성 단위입니다 . 그 다음에,
  2. NetworkNamespacePath=귀하의 의심스러운 서비스가 이 네임스페이스에서 사용됩니다 .
  3. 다른 일회용 유닛의 해당 네임스페이스에 브리지를 추가합니다.

하나 있다내가 찾은 기사그것은 그것을 거의 설명합니다.


iptables결론: 단일 / 규칙을 사용하는 것이 가장 쉽다고 생각 nftables하지만 브리지 네임스페이스를 설정해야 한다면 가능할 것입니다. 그러나 사람들이 일반적으로 컨테이너를 던지는 사용 사례에 매우 가깝습니다. 이는 아마도 가장 유연한 솔루션일 것입니다.

관련 정보