iptables를 로컬로 사용하여 아웃 바운드 트래픽을 포트 80으로 리디렉션하려면 어떻게해야합니까?


19

을 사용하여 Ubuntu 컴퓨터의 포트를 로컬로 리디렉션하려고합니다 iptables. 투명한 프록시와 유사합니다. 시스템을 포트 80에 남겨두고 원격 호스트 및 포트로 리디렉션하려고하는 모든 것을 잡고 싶습니다.

NAT 및 사전 라우팅 기능을 사용하여이를 달성 할 수 있습니까 iptables?

답변:


30

iptables규칙을 시도하십시오 :

$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination IP:80

위의 내용은 다음과 같습니다.

  • NAT 테이블 ( -t nat)에 다음 규칙을 추가하십시오 .
  • 이 규칙은 -A아웃 바운드 트래픽 ( OUTPUT)에 추가됩니다 ( ).
  • 우리는 TCP 트래픽 ( -p tcp) 에만 관심이 있습니다.
  • 도착 포트가 80 ( --dport 80) 인 트래픽에만 관심이 있습니다 .
  • 일치하면 DNAT ( -j DNAT)로 이동합니다.
  • 이 트래픽을 다른 서버의 IP @ 포트 80 ( --to-destination IP:80)으로 라우팅하십시오 .

DNAT는 무엇입니까?

DNAT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT 
    chains, and user-defined chains which are only called from those chains.
    It specifies that the destination address of the packet should be modified 
    (and all future packets in  this  connection will also be mangled), and
     rules should cease being examined.

참고 문헌


고마워하지만 작동하지 않는 것 같습니다. 그러나 나는 이것이 작동하는 것을 발견했습니다.
pjf

sudo iptables -t nat -A 출력 -p tcp --dport 80 -j DNAT-목적지 xx.xx.xx.xx : 3128
pjf

이것이 게이트웨이를 통하지 않고 로컬이기 때문입니까? SNAT가 게이트웨이를 통해 작동합니까?
pjf

@ pjf-믿습니다. 내 답변을 업데이트했습니다.
slm

@ pjf-두 규칙을 모두 찾았으며 두 가지로 답변을 업데이트하는 중이었습니다. 나는 당신이 어떤 상황에 있는지 확신하지 못했습니다.
slm

6

특정 대상 호스트에 대한 트래픽에서만 작동하도록보다 구체적으로 지정할 수 있습니다. 예를 들어 postfix가 실수를했을 때 대기열에있는 메일을 이전 IP 주소로 보내려고합니다.

iptables -t nat -A OUTPUT -p tcp -d {ONLY_TO_THIS_DESTINATION} --dport 25 -j DNAT --to-destination {NEW_IP}:25

4

이를 통해 포트를 모든 IP 주소로 변환 할 수 있습니다. 여기서 가장 큰 차이점은 --to-destination필드에 IP 주소가 없다는 것입니다 .

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80

매우 유용한 팁; 정확히 내가 필요한 것. 포트 번호를 늘리는 방법이 있습니까? 100 포트 범위가 있고 특정 양만큼 포트를 늘리고 싶다고 가정 해보십시오.
Zdenek

당신이 무슨 뜻인지 확실하지. Bash에서 for-loop를 작성할 수 있습니까?
Felipe Alvarez

100 개의 iptables 규칙을 추가하면 루프가 작동하지만 속도가 느려집니다. 하나의 규칙으로 많은 연속 포트를 증가 시키도록 지시하고 싶습니다.
Zdenek

@ Zdenek iptables로 가능한지 모르겠습니다. 봤어 firewalld?
Felipe Alvarez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.