ฉันจะเปลี่ยนเส้นทางของทราฟฟิกขาออกไปยังพอร์ต 80 โดยใช้ iptables แบบโลคัลได้อย่างไร


19

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 - พอร์ต 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 ทั้งหมด ความแตกต่างที่สำคัญที่นี่คือขาดที่อยู่ IP ใน--to-destinationเขตข้อมูล

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

เคล็ดลับที่มีประโยชน์มาก สิ่งที่ฉันต้องการ มีวิธีเพิ่มหมายเลขพอร์ตหรือไม่ สมมติว่าฉันมีช่วงของพอร์ต 100 และต้องการเพิ่มทั้งหมดด้วยจำนวนเฉพาะ
Zdenek

ไม่แน่ใจคุณหมายถึงอะไร. คุณสามารถเขียน for-loop ใน Bash ได้หรือไม่?
Felipe Alvarez

การวนซ้ำที่เพิ่มกฎ 100 iptables จะใช้งานได้ แต่จะทำให้ช้าลง ฉันอยากจะบอกให้เพิ่มจำนวนพอร์ตต่อเนื่องในกฎเดียว
Zdenek

@Zdenek ฉันไม่ทราบว่าเป็นไปได้ด้วย iptables มีคุณดูfirewalld?
เฟลิเป้อัลวาเรซ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.