GNU/Linux >> Belajar Linux >  >> Linux

iptables mengalihkan koneksi lokal ke sistem / port jarak jauh

Saya tidak sepenuhnya yakin apakah saya mengerti, tetapi saya pikir Anda berada di rantai yang salah. :-) Saya juga bingung ketika pertama kali menggunakan iptables. Tapi cara untuk maju lokal port ${LOCAL UNPRIV PORT} adalah pernyataan di bawah ini:

$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT} 
     -j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}

Ini adalah campuran antara masalah semantik dan cara kerja netfilter:Di masa lalu meneruskan port lokal melibatkan koneksi ke kotak yang meneruskan, ditambah koneksi kedua ke tujuan. Iptables melakukan ini dalam satu langkah. Jadi alih-alih dua koneksi - Anda meneruskan lalu lintas ke port itu langsung ke tujuan. Netfilter melakukan semua pemeriksaan kewarasan dan pembukuan:hanya paket milik koneksi yang valid yang diberi NAT dan karenanya dapat diteruskan.

Mengaktifkan DNAT tidak mengizinkan paket apa pun untuk diteruskan. Anda juga harus menambahkan aturan:

$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP

$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT

$IPT -A INET-PRIV -j DROP

Dan Anda harus mengaktifkan penerusan tentunya.

echo "1" > /proc/sys/net/ipv4/ip_forward

Pro iptables :lebih aman, lebih fleksibel, lebih sedikit memori dan CPU yang digunakan per koneksi

Contra iptables :meneruskan koneksi dari mesin internal ke mesin internal (mengumpankannya kembali ke eth0) tidak masuk akal dengan iptables (tentu saja Anda selalu dapat terhubung secara langsung), meneruskan lalu lintas yang dihasilkan secara lokal tidak berfungsi (port meneruskan daemon mungkin membantu - tetapi biasanya tidak masuk akal)

Mungkin inilah masalahnya :Anda mencoba menggunakan NAT pada non-router, jadi Anda harus menggunakan daemon penerusan atau lewati penerusan port tambahan ini sepenuhnya dan lakukan:

ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box

Pada kotak-vpn-khusus, Anda hanya dapat mengizinkan koneksi masuk dari router dan koneksi keluar ke ${ANOTHER SYSTEM}:${REMOTE PORT} menggunakan iptables. Dengan demikian, pengguna kotak-vpn-khusus hanya dapat mengakses ${ANOTHER SYSTEM}:${REMOTE PORT} dan tidak akan dapat melakukan apa pun jika mereka tidak dipercaya.


Inilah yang saya lakukan khusus untuk penerusan localhost:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

sysctl -w net.ipv4.conf.all.route_localnet=1

Pastikan Anda mengganti ip.ip.ip.ip untuk IP publik asli Anda dan juga --dport 3306 untuk port yang ingin Anda teruskan.

Terakhir jalankan perintah sysctl dan perbarui juga /etc/sysctl.conf Anda

Anda dapat memperbarui sysctl.ctl untuk mengizinkan perutean localhost dengan perintah berikut:

echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf

Sekarang ini semua tampak sederhana dan bagus tetapi memang perlu penelitian dan perburuan. Berhati-hatilah dan pahami bahwa meneruskan localhost/127.0.0.1 memerlukan metode ini dan contoh tipikal lainnya tidak berfungsi. Beberapa contoh solusi yang tidak berfungsi dengan localhost:

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE

http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles


# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING  -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}

iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}

Linux
  1. Pengalihan IP/Port dengan csf

  2. Cara Memeriksa Port Terbuka pada Sistem Linux Jarak Jauh

  3. Mendapatkan MongoDB di Linux untuk mendengarkan koneksi jarak jauh

  1. Cara membuka port di Linux

  2. Tolak semua koneksi masuk dengan iptables?

  3. Alihkan konsol ke port serial

  1. REJECT vs DROP saat menggunakan iptables

  2. Penerusan port di Linux tanpa iptables?

  3. Tidak dapat mengakses port 80 dari lokasi jauh tetapi berfungsi di lokal?