일부 제한이 있는 Iptables 포트 전달

일부 제한이 있는 Iptables 포트 전달

한 서비스에는 IP 기반 ACL(화이트리스트)을 설정하고 다른 서비스에는 설정하지 않으려는 서비스 세트가 있습니다. 서비스가 내부적으로 동일한 포트(포트 80)에서 실행될 때 문제가 나타나는 것 같지만 게이트웨이에서 다른 포트를 사용하여 액세스합니다.

게이트웨이의 포트 8088 -> 10.0.0.A의 포트 80(IP 화이트리스트 포함)
게이트웨이의 포트 80 -> 10.0.0.B의 포트 80

그리고 다음 규칙에 따라 열려 있는 모든 항목에 대해 이 작업을 수행할 수 있습니다.

iptables -t nat -A 사전 설정 -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80
iptables -t nat -A 사전 설정 -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.B
iptables -A FORWARD -p tcp -i eth0 --dport 80 -j 수락

문제는 FORWARD ACCEPT 규칙이 게이트웨이의 수신 포트(80 대 8088) 대신 대상 포트(--dport 80)를 기반으로 하는 것처럼 보이므로 이러한 nat 규칙을 모두 포함한다는 것입니다.

80과 8088에서 게이트웨이로 들어오는 연결에 대해 서로 다른 동작을 가질 수 있도록 FORWARD 규칙을 2개의 개별 규칙으로 다시 작성하는 방법을 알 수 없습니다.

추가 정보:

lsb_release -d
설명: Debian GNU/Linux 7.5(wheezy)
iptables --버전
iptables v1.4.14

1차 해결 시도 체인을 스핀오프하고 그곳에서 라우팅을 수행할 수 있었지만 다음 오류 메시지로 인해 ACL(거부) 라인을 추가할 수 없습니다.

x_tables: ip_tables: REJECT 대상: NAT가 아닌 필터 테이블에서만 유효합니다.

내가 넣은 내용은 다음과 같습니다.

iptables -t nat -N 화이트리스트
iptables -t nat -A 화이트리스트 -p tcp -j DNAT --to 10.0.0.A:80
iptables -t nat -A 화이트리스트 -s <whatsmyip.org> -j RETURN
iptables -t nat -A 화이트리스트 -j 거부
iptables -t nat -A 사전 설정 -i eth0 -p tcp --dport 8088 -j 화이트리스트

nat 내부의 REJECT가 실패하는 4행까지는 모든 것이 잘 작동합니다. REJECT 라인을 주석 처리하면 로직의 나머지 부분이 작동하고 거부된 항목이 없기 때문에 포트가 일반에 공개되는 것을 확인할 수 있습니다.

다음 해결 시도 적절하게 설정된 별도의 체인을 사용하여 작업하는 동안 원래 문제가 발생한 것 같습니다. 상단에서 바로 포트를 변경하는 PREROUTING 규칙은 여전히 ​​비 NAT ACL 시도에 문제를 일으키는 것으로 보입니다. ACL 규칙은 아무런 영향을 미치지 않으며 포트는 공개적으로 열려 있습니다.

iptables -N 화이트리스트
iptables -A 화이트리스트 -s <whatsmyip.org> -j RETURN
iptables -A 화이트리스트 -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j 화이트리스트
iptables -t nat -A 사전 설정 -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

해결 시도 #3 먼저 화이트리스트 설정을 시도하고, 화이트리스트 해결 후 포트 리디렉션을 시도했습니다. 규칙이 로드되는 동안 트래픽이 화이트리스트에 있는 IP에서 의도한 대상에 도달하지 않으므로 의도한 효과가 없습니다. 실제로 그 행동이 실제로 무엇인지 100% 확신할 수는 없지만. iptables에서 트래픽이 거부되는지, 아니면 포트 변경 없이 연결이 승인되어 포트 8088의 대상으로 푸시되는지 알 수 없습니다. 포트 리디렉션이 실제로 수행되고 있는지 확인하는 방법을 잘 모르겠습니다. 이 시도에 대한 규칙은 다음과 같습니다.

iptables -N 화이트리스트
iptables -A 화이트리스트 -s <whatsmyip.org> -j RETURN
iptables -A 화이트리스트 -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j 화이트리스트
iptables -t nat -A 사전 설정 -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A
iptables -t nat -A OUTPUT -p tcp --dport 8088 -j REDIRECT --to-ports 80

현재 상태 해결되지 않았습니다. 화이트리스트 이후에 포트를 리디렉션하는 다른 방법을 알아낼 수 있는지, 아니면 현재 솔루션이 어디에서 실패하는지 확인할 수 있는 쉬운 방법이 있는지 확인해야 하는지 확실하지 않습니다(80 리디렉션 없이 8088을 통해 전달하는 것인지 아니면 단순히 막힌?)

답변1

변화

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

ACL을 구현하는 사용자 정의 체인으로 이동합니다. 예:

iptables -t nat -N foo
iptables -t nat -A foo --source 192.168.0.0/24 -j RETURN
iptables -t nat -A foo -j REJECT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j foo

편집하다:

iptables -N foo
iptables -A foo --source 192.168.0.0/24 -j RETURN
iptables -A foo -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j foo

수행 중인 NAT를 완전히 무시하고 패킷 필터링을 설계합니다.

관련 정보