IP 주소 집합으로 나가는 연결을 제한하는 간단한 iptables 구성을 만들려고 합니다. 그러나 OUTPUT 규칙을 구성하려고 할 때마다 SSH 연결이 종료됩니다.
이 문제를 해결하기 위해 들어오는 모든 트래픽을 허용하고 포트 53에서 IP 8.8.8.8에 대한 나가는 트래픽만 허용한다고 가정해 보겠습니다.
이것은 내 시작 iptables 구성입니다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere ip-172-17-0-2.eu-central-1.compute.internal tcp dpt:9090
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
이제 다음과 같이 나가는 트래픽을 제한하려고 합니다.
iptables -I OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
두 번째 명령을 실행하는 인스턴스에서 SSH 연결이 차단되어 서버를 다시 시작해야 합니다.
어쩌면 iptables나 ssh에 대한 나의 이해가 잘못되었을 수도 있습니다. 내 생각에는 OUTPUT 체인이 서버에서 시작된 나가는 연결을 제어하며 포트 22에서 서버에 연결하는 기능에 영향을 주어서는 안 된다는 것입니다. 또한 포트 80 및 443의 다른 모든 수신 연결이 종료되므로 SSH만이 아닙니다.
답변1
이제 이해가 된 것 같습니다.
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
이렇게 하면 서버에서 시작된 연결에서 나가는 모든 트래픽이 차단됩니다. 그러나 들어오는 연결에 의해 시작된 연결에는 적용되지 않습니다.