2008/11/26

Menggunakan link selain default gateway untuk SMTP

Gak yakin juga apakah trik di dalam tulisan ini bisa disebut port based routing atau bukan. Tapi yang pasti bisa memenuhi kebutuhan untuk melarikan arah route jika ingin mengirimkan paket ke port tertentu.

Kasus: saya punya server yang selain berfungsi sebagai webserver dan mail server. Ada sekitar 200 akun email di server itu, yang tiap harinya maenan milis terus menerus. Bandwidth IIX sih berlimpah, permasalahannya adalah bandwidth internasional yang bener2 irit (mahalll). Masalah akses web memang lancar, karena pengakses hanya dari Indonesia. Tapi kan penyedia milis paling terkenal adalah raksasa yahoogroups dan googlegroups. Jelas bw internasional di sini yang berperan.

Solusi: akhirnya saya putuskan menambah link untuk server itu dari ISP lain yang menyediakan bw int'l yang lebih murah.

Nah, saya ingin agar link baru dengan bw int'l yang lumayan besar ini hanya digunakan untuk pengiriman email. Kalau soal nerima email mah gampang, tinggal ganti record MX dari domain yg saya kelola supaya mengarah ke IP dari link baru ini. Untuk itu kemudian saya cari cara supaya hanya paket yang ditujukan ke server lain dengan port tujuan 25, ie. pengiriman email, di-route-kan lewat link baru ini.

Cari2 di google, ternyata agak sulit mencari solusi yg tepat. Atau karena saya yg kurang tajem dalam hal pencarian ya? Hahaha, intinya adalah tidak ketemu, heup dugi ka dinya.

Akhirnya buka2 lagi catetan, dan menemukan artikel tentang proxy transparan dengan server proxy yang beda dengan router. Saya rasa intinya sama, yaitu ingin melarikan route paket yang dikirim ke port 80 lewat IP lain. Perbedaannya adalah: port tujuan adalah 25, server yang sama tapi IP beda (link dari ISP lain).

Untuk itu, saya ikuti tutorial tersebut tapi diubah2 sedikit sesuai kebutuhan.

Dengan konfigurasi seperti:
IP LAMA (default gateway): eth0 10.34.86.77, semua paket keluar lewat link ini.
IP BARU (link dari ISP baru): eth1 192.168.79.3

Saya buat packet marking di tabel mangle iptables, khusus untuk paket keluar dengan port tujuan 25. Perintahnya:

iptables -t mangle -A OUTPUT -p tcp --dport 25 -d ! 10.34.86.77 -j MARK --set-mark 25
iptables -t mangle -A OUTPUT -p tcp --dport 25 -d ! 192.168.79.3 -j MARK --set-mark 25
iptables -t mangle -A OUTPUT -p tcp --dport 25 -d ! 127.0.0.1 -j MARK --set-mark 25


Saya buat 3 rule karena di server ada 3 IP (yg satu localhost), dan kita ingin melarikan paket yang dikirim bukan ke IP server, ya iyalah namanya juga ngirim. Angka 25 untuk set mark bisa diganti jika angka tersebut sudah digunakan untuk marking paket lain. Angka berapa saja yg bisa digunakan saya kurang tahu, males buka2 manual iptables.

Setelah paket ditandai (marking), saya membuat rule supaya paket tersebut di-route-kan lewat IP BARU. Pertama saya pastikan iproute2 sudah terinstal. Pakai apt, yum, synaptic, urpmi, atau apapun. Lalu buatlah sebuah route table khusus. Caranya tambahkan baris seperti ini (baris tersendiri) pada file /etc/iproute2/rt_tables:

25 mailgate

Angka 25 bisa diganti, angka yang boleh digunakan adalah antara 1-252. Kata "mailgate" juga boleh diganti. Dan berikut adalah perintah iproute untuk melarikan rute paket yang telah ditandai ke IP BARU (yg bukan default gateway):

ip rule add fwmark 25 table mailgate
ip route add default via 192.168.79.3 dev eth1 table mailgate


Angka 25 pada fwmark disesuaikan dengan set mark pada iptables.

Dan selesailah sudah. Sekarang semua pengiriman email dilarikan lewat link dari ISP yang baru. Tinggal membuat supaya perintah2 tadi dieksekusi tiap kali boot. Itu mah bisa di /etc/rc.local.

Bisa juga sih packet marking ditambahi supaya pengiriman email ke luar negeri saja yang melewati link baru ini, sementara kalau email ke IIX bisa pakai link default. Tapi ini aja tulisannya udah lumayan panjang. Males kalau harus nulis lebih panjang lagi.

No comments: