در این پست قصد دارم در مورد نحوه محدود کردن دسترسی به VPS فقط برای آی پی های ایران صحبت کنم. از مشکلاتی که برای VPS و به وجود میاد این هست که مدام توسط نرم افزارهای مختلف از سرتاسر جهان در حال اسکن شدن هستن تا با کشف یک باگ امنیتی اون VPS رو هک کن. یکی از راه هایی که برای کم کردن این مشکلات هست، استفاده از iptables برای محدود کردن دسترسی به این VPS است.
فرض کنید یک VPS از هر کشوری که دوست دارید خریدید و VPS شما بر اساس نوع کارکردی که داره فقط برای ایران باز است (البته این میتونه برای هر کشور دیگه ای هم تنظیم بشه.) و قرار نیست از جای دیگه ای به این VPS خدمات داده بشه. بهترین کار این هست که این VPS فقط به IP های ایران دسترسی بده. برای این کار نیاز است تا مراحل زیر را دنبال کنید.
در مرحله اول باید نرم افزار iptables نصب بشه. برای این کار دستورات زیر را اجرا کنید.
sudo apt install -y iptables iptables-persistent
در مرحله بعد لازم است تا ماژول geoip برای iptables نصب شود. برای این کار آخرین نسخه این ماژول رو از آدرس زیر دانلود کنید.
http://inai.de/files/xtables-addons/
در زمان نوشتن این پست آخرین ورژن 3.22 است. این نسخه را دانلود و نصب کنید.
wget https://inai.de/files/xtables-addons/xtables-addons-3.22.tar.xz
tar xf xtables-addons-3.22.tar.xz
cd xtables-addons-3.22
./configure
make
sudo make install
sudo depmod -a
sudo modprobe x_tables
sudo modprobe xt_geoip
cd geoip
wget http://45.85.48.11/geoip/GeoLite2-Country-CSV.zip
unzip GeoLite2-Country-CSV.zip
cd GeoLite2-Country-CSV_*
sudo mkdir -p /usr/share/xt_geoip
sudo ../xt_geoip_build_maxmind -D /usr/share/xt_geoip/
در صورتی که تمام مراحل بالا را با موفقیت اجرا کرده باشید VPS شما آماده تنظیم iptables است. برای این منظور دستورات زیر را اجرا کنید.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -d 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
iptables -A INPUT -s 172.17.0.0/16 -j ACCEPT
iptables -A INPUT -m limit --limit 5/min -m comment --comment Manual-Rule -j LOG --log-prefix "GEO_LOG iptables LOG" --log-level 7
iptables -A INPUT -m geoip ! --src-cc IR -j DROP
در اینجا لازم است بخش های مختلف رو توضیح بدم. اگی در VPS خودتون داکر نصب کردید، حتما 4 خط اول رو وارد کنید تا سرویس های داکری از کار نیوفتن. در اینجا رنج آی پی های داکر 172.17.0.0/16 است.
بخش دوم صرفا برای لاگ انداختن است و تمام ترافیکی که سمت VPS میاد رو لاگ میندازه.
خط آخر مهمترین بخش هست. در این خط تنظیم شده در صورتی ترافیکی که به سمت VPS میاد از سمت ایران نباشه رو DROP کنه. به این ترتیب تمام ترافیکی که از خارج از ایران به سمت VPS شما میاد بلاک میشه. حال فرض کنید شما چند VPS دارید که خارج از ایران هست و میخواید به این VPS شما دسترسی داشته باشه. برای اینکه به اون ماشین دسترسی بدید کافی هست قبل از بخش مربوط به لاگ این خط رو اضافه کنید.
iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
که در اون بجای xxx.xxx.xxx.xxx آی پی VPS دوم رو قرار میدید.
در صورتی که همه مراحل بالا به خوبی پیش رفت و دسترسی ssh شما به ماشین قطع نشده، ( در صورت قطع شدن دسترسی به ماشین، از طریق پنل هاست ماشین رو ریست کنید تا iptable ها پاک بشن) لازم است تا این تنظیمات پایدار بشن. در حال حاضر با ریست شدن ماشین تمام دستورات بالا پاک میشن. برای حفظ تنظیمات این دستور را اجرا کنید.
iptables-save > /etc/iptables/rules.v4
در صورتی که تو VPS داکر نصب کردید فایل بالا را باز کنید و هر تنظیمی غیر از تنظیمات خودتون رو حذف کنید. با این تنظیم با هر بار ریستارت شدن ماشین تنظیمات iptables به حالت مورد نظر شما برمیگرده.