![나가는 트래픽을 로컬 서버로 리디렉션](https://linux55.com/image/60377/%EB%82%98%EA%B0%80%EB%8A%94%20%ED%8A%B8%EB%9E%98%ED%94%BD%EC%9D%84%20%EB%A1%9C%EC%BB%AC%20%EC%84%9C%EB%B2%84%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
포트 4000을 수신하는 Apache 웹 서버 세트가 있고 이 (로컬) 서버를 일종의 프록시로 사용하고 싶습니다.
아이디어는 모든 로컬로 나가는 HTTP 트래픽(포트 80
)을 내 서버(위치)로 리디렉션하는 것입니다 127.0.0.1:4000
. 물론 서버는 해당 포트에서 요청을 보낼 수 있어야 합니다 80
.
다음과 같이 업데이트 하려고 합니다 iptables
.
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
내 서버의 트래픽도 자체적으로 리디렉션되기 때문에 작동하지 않는 것 같습니다.
문제는: 내 서버에서 HTTP 요청만 승인하려면 어떻게 해야 합니까?
예:
- www.google.com으로 요청이 전송되었습니다.
- 요청이 내 서버(
127.0.0.1:4000
) 로 리디렉션됩니다. - 서버는 요청을 받고, 어떤 작업을 수행한 다음 www.google.com으로 요청을 보냅니다.
첫 번째 부분(2.)을 완료했지만 내 서버가 www.google.com 자체로 리디렉션되기 때문에 www.google.com에 액세스할 수 없습니다.
답변1
이를 위해 netfilter를 사용하는 것은 좋은 생각이 아닙니다. nginx나 apache와 같은 역방향 프록시[1]가 필요합니다.
iptable을 사용하려면 다음과 같이 수신 인터페이스에서 필터링할 수 있습니다.
iptables -t nat -A OUTPUT -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
답변2
@Bratchley의 의견에 따라 해당 옵션을 추가하여 작동하도록 만들었습니다 --uid-owner
.
이것은 내가 사용하는 명령입니다:
iptables -t nat -A OUTPUT -m owner --uid-owner 1000 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
Apache 서버에는 특정 사용자가 있으므로 uid 1000의 트래픽만 리디렉션됩니다.