저는 세 개의 가상 머신(A, B, C)을 가지고 있으며 모두 데비안에서 실행됩니다. A와 B 사이의 트래픽을 라우팅하도록 C를 설정했습니다. 또한 C에는 두 개의 인터페이스가 있습니다: enp0s3
및 enp0s8
이 경우에 중요한지 확실하지 않습니다. 라우팅이 잘 작동하고 있습니다.
하지만 이제 포트 8080으로 전송된 요청을 제외한 모든 수신 요청을 차단하기 위해 라우터에 iptables를 설정하고 싶습니다.
내가 한 일은 다음과 같습니다.
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT
그러나 A를 사용하여 A에서 B의 포트(8080 포함)에 연결하려고 하면 nc {host} {port}
입력이 A에서 B로 변환되지 않습니다.
나는 또한 이것을 시도했고 그 반대의 경우도 마찬가지였습니다.
iptables -P FORWARD ACCEPT
iptables -A FORWARD -p tcp ! --dport 8080 -j DROP
하지만 그것도 작동하지 않습니다.
출력을 확인하면 iptables -L -v
일부 패킷이 체인에서 허용됩니다 FORWARD
.
답변1
iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT
이 규칙은 포트 8080으로 향하는 모든 패킷이 전달되도록 허용합니다. 그러나 포트 8080의 패킷(SYN 패킷에 대한 응답)은 요청이 포트 8080에서도 이루어지지 않는 한 전달되지 않습니다. 한 댓글에서 언급했듯이 이는 사실이 아닐 가능성이 높습니다!두 번째 규칙이 필요합니다.
iptables -A FORWARD -p tcp --sport 8080 -j ACCEPT
이 규칙은 포트 8080의 모든 패킷 전달을 허용합니다.
제안에 따르면, 설정에 더 많은 보안이 필요한 경우 규칙에 컴퓨터의 IP 주소를 추가하겠습니다. 이 두 규칙을 사용하면 소스 포트가 8080인 한 누군가가 다른 포트와 통신할 수 있습니다.
그래서 내 최종 규칙은 다음과 같습니다.
iptables -A FORWARD -p tcp --sport 8080 -s IPOFMACHINEA -j ACCEPT
iptables -A FORWARD -p tcp --dport 8080 -d IPOFMACHINEA -j ACCEPT
iptables -A FORWARD -p tcp --sport 8080 -s IPOFMACHINEB -j ACCEPT
iptables -A FORWARD -p tcp --dport 8080 -d IPOFMACHINEB -j ACCEPT
ip를 제공하지 않았기 때문에 교체해야 합니다.