Tuesday, August 19, 2014

جابه جایی پورت در لینوکس یا Port Forwarding

به کمک iptables لینوکس می خوایم یک پورت مشخص مثل 9090 رو به یه آدرس ای پی و پورت مشخص دیگه وصل کنیم.
با Port Forwarding کار های زیادی می شه انجام داد مثل :

  • جدا کردن سرور آپاچی و سرور دیتابیس (Load Balancing)
  • در مواقعی که فیلتر شکن ها اجازه نمی دن سرور خارجی بهمون وصل بشه با جابه جایی مبدا می شه فیلتر شکن رو گول زد
  • به عنوان سرور آینه (Server Mirroring)
  • و ...


برای شروع به یک سرور لینوکسی نیاز داریم،  
اول از همه ip forward رو با دستور زیر فعال می کنیم :
sudo sysctl net.ipv4.ip_forward=1 

حالا باید رول ها رو تنظیم کنیم :
sudo iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 80 -j DNAT --to-destination y.y.y.y:8014 

x.x.x.x: این آدرسه خود سرور پراکسی هستش که روی پورت ۸۰ تنظیم شده
y.y.y.y: این هم آدرس کلاینتم هستش که روی پورت ۸۰۱۴ تنظیم شده

بعد از اجرا کردن دستور بالا دستور زیر رو اجرا کنید:
iptables -t nat -A POSTROUTING -j MASQUERADE 

با دستور بالا مبدا رو عوض می کنیم و کلاینت ها فکر می کنن از خود سرور پراکسی ما دارن داده ها رو دریافت می کنن

تمام ، با این کار اگه به سرور x.x.x.x روی پورت 80 وصل بشیم سرور ما رو جا به جا می کنه و پاکت های ارسالی رو برای y.y.y.y روی پورت 8014 ارسال می کنه

برای دیدن لیست Rule‌ ها دستور زیر رو بزنید:
iptables -t nat --line-numbers -L

و برای پاک کردنشون هم دستور زیر رو همراه با شماره خط دستور قبلی وارد کنید :
iptables -t nat -D PREROUTING 6


برای استفاده از روش SNAT به جایه MASQUERADE از دستور زیر استفاده کنید:
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source x.x.x.x

با دستور بالا آدرس مبدا پاکت ها رو به x.x.x.x تغییر می دهیم