Bagaimana saya bisa mengarahkan lalu lintas keluar ke port 80 menggunakan iptables secara lokal?

19

Saya mencoba untuk mengarahkan ulang porta lokal menggunakan mesin Ubuntu saya iptables. Mirip dengan proxy transparan. Saya ingin menangkap apa pun yang mencoba meninggalkan sistem saya di port 80 dan mengarahkannya ke host dan port jarak jauh.

Dapatkah saya mencapai ini menggunakan fungsi NAT dan pre-routing iptables?

pjf
sumber

Jawaban:

30

Coba iptablesaturan ini :

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

Di atas dikatakan:

  • Tambahkan aturan berikut ke tabel NAT ( -t nat).
  • Aturan ini akan ditambahkan ( -A) ke lalu lintas keluar ( OUTPUT).
  • Kami hanya tertarik pada lalu lintas TCP ( -p tcp).
  • Kami hanya tertarik pada lalu lintas yang memiliki port tujuan 80 ( --dport 80).
  • Ketika kami memiliki kecocokan, lompat ke DNAT ( -j DNAT).
  • Rutekan lalu lintas ini ke beberapa IP @ port 80 server lain ( --to-destination IP:80).

Apa itu 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.

Referensi

slm
sumber
terima kasih untuk itu tetapi sepertinya tidak berhasil. Namun saya telah menemukan ini yang bekerja.
pjf
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination xx.xx.xx.xx: 3128
pjf
Apakah itu karena ini secara lokal dan bukan melalui gateway? SNAT Anda akan bekerja melalui gateway?
pjf
@ pjf - Saya percaya begitu. Saya telah memperbarui jawaban saya.
slm
@ pjf - Saya menemukan kedua aturan dan sedang dalam proses memperbarui jawaban saya dengan keduanya. Saya tidak yakin dalam situasi apa Anda berada.
slm
6

Ini dapat dibuat lebih spesifik untuk beroperasi hanya pada lalu lintas ke host tujuan tertentu. Misalnya ketika postfix membuat kesalahan dan mail dalam antrian ingin dikirim ke alamat ip lama.

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

Ini memungkinkan Anda menerjemahkan port ke semua alamat IP. Perbedaan utama di sini adalah tidak adanya alamat IP di --to-destinationlapangan.

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80
Felipe Alvarez
sumber
Tip yang sangat berguna; persis apa yang saya butuhkan. Apakah ada cara untuk menambah nomor port? Katakanlah saya memiliki kisaran 100 port dan ingin meningkatkan semuanya dengan jumlah tertentu.
Zdenek
Tidak yakin apa yang kamu maksud. Bisakah Anda menulis for-loop di Bash?
Felipe Alvarez
Sebuah loop menambahkan 100 aturan iptables akan berfungsi, tetapi akan memperlambatnya. Saya lebih suka untuk bisa mengatakannya untuk meningkatkan banyak port berturut-turut dalam satu aturan.
Zdenek
@ Zdenek Saya tidak tahu apakah itu mungkin dengan iptables. Sudahkah Anda melihat firewalld?
Felipe Alvarez