목표는 내 서버에서 실행되는 Docker 컨테이너 서비스/포트에 대한 특정 네트워크 액세스만 허용하는 것입니다.
INPUT 필터 체인에 ACCEPT 규칙을 추가해 보세요. 이는 도움이 되지 않습니다. 허용된 규칙이 없는 네트워크라도 여전히 Docker 서비스/포트에 액세스할 수 있습니다.
FORWARD 체인에 ACCEPT 및 DROP 규칙을 추가해 보았더니 효과가 있었습니다. 그러나 여기에는 docker가 다시 시작될 때 규칙이 삭제되거나 재배치되는 등 많은 단점이 있습니다. docker 컨테이너가 재배포되고 런타임에 다른 IP를 얻는 경우 규칙이 유효하지 않게 될 수 있습니다.
계획은 FORWARD 체인에 도달하기 전에 이를 차단하는 것입니다.
따라서 NAT 테이블에 새로운 체인이 추가되어 허용된 네트워크에서 오는 경우 트래픽을 DOCKER 체인으로 리디렉션하고, 다른 네트워크에서 오는 경우 BLOCKHOLE IP에 DNAT를 추가합니다. PREROUTING에서 첫 번째 규칙은 체인으로 점프하는 것입니다. 이것은 작동하는 것 같습니다.
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1234 ~:0.0.0.1
하지만 이 트래픽을 어떤 방식으로든 거부하여 클라이언트가 해당 트래픽이 허용되지 않음을 알 수 있도록 하고 따라서 BLOCKHOLE로 리디렉션하는 대신 거부할 수 있습니까?
답변1
이것은 특별히 좋은 것은 아니지만 PREROUTING의 어딘가에서 블랙홀 주소로 트래픽을 DNAT하는 경우(예: 192.0.2.1에서 예약된 네트워크 주소 선택)https://en.wikipedia.org/wiki/Reserved_IP_addresses) 그런 다음 필터 테이블에서 FORWARD를 거부/제거할 수 있습니다. 이렇게 하면 하나의 규칙만 필요하며 해당 규칙이 대상 변경되는 것을 피하는 것이 더 좋습니다.