پیکربندی آسان IPTables و نمونه هایی از اوبونتو 16.04

معرفی

iptablesابزاری قدرتمند است که برای پیکربندی فایروال یکپارچه هسته هسته لینوکس استفاده می شود. این برنامه در اکثر توزیع های اوبونتو از قبل نصب شده است ، اما اگر از نسخه شخصی سازی اوبونتو استفاده می کنید یا داخل یک ظرف کار می کنید ، به احتمال زیاد مجبور خواهید بود که آن را به صورت دستی نصب کنید.

sudo apt-get install iptables iptables-persistent

پس از نصب ، از شما سؤال می شود که آیا قوانین فعلی خود را ذخیره کنید ، در حال حاضر فرقی نمی کند زیرا بعداً قصد دارید قوانین جدید را حذف یا ایجاد کنید.

نکات

می توانید از این netcatدستور (بر روی رایانه ای متفاوت از سرور خود) برای آزمایش اینکه کدام یک از درگاه های شما باز یا بسته است استفاده کنید.

nc -z -w5 -v SERVER_IP PORT
  • nc دستور netcat است.
  • -z فقط یک بسته را بدون بار ارسال کنید.
  • -w5 حداکثر 5 ثانیه برای پاسخ صبر کنید.
  • -v حالت فعل
  • SERVER_IPبا آدرس سرور خود جایگزین کنید.
  • در صورت باز بودن PORTبا درگاهی که می خواهید آزمایش کنید (به عنوان مثال 22).

در سرور خود می توانید از این netstatدستور استفاده کنید تا ببینید کدام پورت ها در حال گوش دادن به اتصالات هستند.

sudo netstat -tulpn

توجه: اگرچه netstatبرای یافتن پورت هایی که می خواهید با آنها کار کنید مفید است ، اما باید از برنامه هایی که در حال حاضر روی سرور خود نصب کرده اید آگاه باشید و کدام پورت ها را گوش می دهید ، لازم نیست هر پورت را که در netstatخروجی پیدا می کنید ، مجاز کنید .

نحو

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTیک INPUTزنجیره به زنجیره اضافه کنید ، زنجیره ای گروهی از قوانین است ، مواردی که ما بیشتر از این راهنما استفاده می کنیم INPUT، OUTPUTو PREROUTING.
  • -p tcpمجموعه ای tcpبه عنوان پروتکل این قانون اعمال می شود، شما همچنین می توانید پروتکل های دیگر مانند استفاده از udp، icmpو یا all.
  • -m tcpاز tcpماژول استفاده کنید iptablesاز ویژگی های اضافی از طریق ماژول پشتیبانی می کند ، برخی از آنها قبلاً از قبل نصب شده iptablesو سایر موارد مانند geoipماژول.
  • --dport 22دستورات شروع شده با --گزینه های اضافی را برای ماژول قبلاً استفاده شده نشان می دهند ، در این حالت tcpماژول را به ما می گوییم که فقط برای پورت اعمال شود 22.
  • -m geoipاز geoipماژول استفاده کنید این بسته ها را به صورت کشوری محدود می کند (اطلاعات بیشتر در مرحله 5).
  • --src-cc PEبه geoipماژول بگویید که بسته های ورودی را به مواردی که از پرو وارد می شوند محدود کنید. برای جستجوی کدهای بیشتر کشور ISO 3166 country codesدر اینترنت.
  • -j ACCEPT-jاستدلال می گوید iptablesچه کاری انجام دهید اگر یک بسته منطبق بر محدودیت های مشخص شده در استدلال های قبلی است. در این مورد آن را ACCEPTآن بسته، گزینه های دیگر REJECT، DROPو بیشتر. با جستجو iptables jump targetsدر اینترنت می توانید گزینه های بیشتری پیدا کنید .

1. مبانی

لیست تمام قوانین.

sudo iptables -L

لیست تمام دستوراتی که برای ایجاد قوانین استفاده شده در حال حاضر استفاده شده است ، برای ویرایش یا حذف قوانین مفید است.

sudo iptables -S

برای حذف یک قانون خاص ، یک قانون را انتخاب کرده sudo iptables -Sو -Aبا آن جایگزین کنید -D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

کلیه قوانین شماره گذاری شده در INPUTزنجیره را ذکر کنید.

sudo iptables -L INPUT --line-numbers

یک قانون شماره گذاری شده را حذف کنید.

sudo iptables -D INPUT 2

برای پاک کردن کلیه قوانین

sudo iptables -F

اخطار: در صورت اتصال توسط SSH ممکن است اتصال را از دست دهید .

فقط قوانین را در OUTPUTزنجیره پاک کنید.

sudo iptables -F OUTPUT

2. قوانین اولیه ایجاد کنید

اجازه SSHدر eth0رابط

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 قانون را برای یک رابط خاص اعمال کنید تا از هر رابط این دستور حذف شود.

برای محدود کردن بسته های ورودی به یک IP خاص (به عنوان مثال 10.0.3.1/32).

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 یک IP / زیر شبکه را مشخص می کند تا اتصالات از آن استفاده شود.

قوانین زنجیره پیش فرض را تنظیم کنید.

اخطار: قبل از اقدام ، اطمینان حاصل کنید که در صورت کار روی یک سرور از راه دور ، قوانین صحیح SSH را اعمال کرده اید .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP تمام بسته های دریافتی را انکار می کند (یعنی هیچ کس قادر نخواهد بود به سرورهای در حال اجرا شما مانند Apache ، SQL و غیره وصل شود).
  • -P FORWARD DROP تمام بسته های ارسال شده را رد می کند (یعنی وقتی از سیستم خود به عنوان روتر استفاده می کنید).
  • -P OUTPUT ACCEPTاجازه می دهد تا تمام بسته های خروجی (به عنوان مثال هنگام انجام یک HTTPدرخواست).

اجازه می دهد همه ترافیک رابط حلقه باز ( توصیه می شود ).

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. قوانین را ماندگار کنید

iptablesقوانین فعلی را ذخیره کنید .

sudo netfilter-persistent save
sudo netfilter-persistent reload

اگر درون یک ظرف در حال اجرا هستید ، netfilter-persistentفرمان به احتمال زیاد کار نخواهد کرد ، بنابراین باید پیکربندی مجدد iptables-persistentبسته را انجام دهید.

sudo dpkg-reconfigure iptables-persistent

4- اتصالات خروجی را مجاز کنید

اجازه نمایش داده شد DNS.

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

stateبرای اجازه RELATEDو ESTABLISHEDخروجی بسته ها از ماژول استفاده کنید .

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

درگاه های مورد نظر را مجاز کنید. در این حالت ، HTTPدرگاه ها

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

پورتهای بیشتری که ممکن است بخواهید از آنها استفاده کنید.

  • FTP: tcp در بندر 21
  • HTTPS: tcp در بندر 443
  • DHCP: udp در بندر 67
  • NTP: udp در بندر 123

توجه: اگر می خواهید اجازه دهید apt-getممکن است لازم باشد FTPوHTTPS .

ترافیک برگشتی را فقط برای اتصالات RELATEDو در حال حاضر مجاز کنید ESTABLISHED( توصیه می شود زیرا گاهی اوقات ارتباط دو طرفه لازم است).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
قوانین مفید دیگر

درخواست های پینگ را از خارج مجاز کنید.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

ترافیک در eth0پورت 2200به جلو 10.0.3.21:22(اگر می خواهید سرور SSH را که در داخل یک کانتینر کار می کند) مفید قرار دهید.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

اگر با استفاده از SSH با موفقیت به سرور خود وارد شوید ، یک اتصال پایدار ایجاد می شود (یعنی بدون اتصال بیش از 1 ساعت به اینترنت وصل شوید). اگر شکست بخورید و دوباره به سیستم وارد شوید ، یک اتصال جدید ایجاد می شود. با محدود کردن اتصالات جدید در هر ساعت ، تلاش های مداوم ورود به سیستم SSH مسدود می شود.

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

کلیه درخواستها را 443به پورت تغییر دهید 4430(اگر می خواهید 443بدون اتصال به بندر بپیوندید root) مفید باشد.

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 رابط شبکه
  • -m geoip ماژول بلوک کشور (به مرحله 5 مراجعه کنید).

هشدار: استفاده نکنید lo، سیستم عامل تمام بسته های هدایت شده به رابط حلقه برگشت را دور می زند .

5- به کل کشورها اجازه داده یا مسدود شود

5.1 نصب کنید xtables-addons

شما می توانید xtables-addonsماژول را با استفاده از روش های مختلفی نصب کنید ، با استفاده از روش نصب که برای شما مناسب تر است ، احساس راحتی کنید.

  • با استفاده از نصب کنید apt-get.

    sudo apt-get install xtables-addons-common
    
  • با استفاده از نصب کنید module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • نصب از منبع.

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

ایجاد یک پایگاه داده "کشورها".

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

راه اندازی مجدد سیستم خود را.

sudo reboot

پس از xtables-addonsنصب موفقیت آمیز ، پس از راه اندازی مجدد اولین بار ، اجرا شود depmodدر غیر این صورت مسدود کردن کشور به درستی کار نخواهد کرد (این فقط برای اولین بار لازم است).

sudo depmod 

/etc/cron.monthly/geoip-updaterبرای بروزرسانی geoipماهانه پایگاه داده ، یک اسکریپت ایجاد کنید .

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

را /etc/cron.monthly/geoip-updaterاجرایی.

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 قوانین مثال

_ نکته: اگر هنگام اجرای یک iptables: No chain/target/match by that nameخطا خطایی دریافت کرده geoipاید ، ممکن است که xtables-addonsبه درستی نصب نشده باشد. یک روش نصب دیگر را امتحان کنید.

بسته های ورودی از چین ، هنگ کنگ ، روسیه و کره را مسدود کنید.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

بسته های ورودی را 80از هرجای کشور به غیر از کشورهای فوق مجاز کنید .

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

بسته های ورودی را فقط در پرو از ens3رابط در پورت 22مجاز کنید (احساس کنید کد کشور مورد نظر خود را برای قبول کردن بسته ها از قبیل USایالات متحده انتخاب کنید).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

بسته های ورودی را 443فقط در پرو مجاز کنید .

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

LiteCart یک بستر سبد خرید آزاد و منبع باز است که به زبان های PHP ، jQuery و HTML 5 نوشته شده است. این نرم افزار ساده ، سبک و با کاربرد آسان است.

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

با استفاده از یک سیستم متفاوت؟ Anchor CMS یک سیستم مدیریت محتوا (CMS) بسیار ساده و بسیار سبک ، بسیار آزاد و آزاد است.

اشتراک NFS را در Debian تنظیم کنید

اشتراک NFS را در Debian تنظیم کنید

NFS یک سیستم فایل مبتنی بر شبکه است که به رایانه ها اجازه می دهد تا از طریق شبکه رایانه ای به فایلها دسترسی پیدا کنند. این راهنما توضیح می دهد که چگونه می توانید پوشه ها را روی NF قرار دهید

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

هنگام راه اندازی سرور جدید لینوکس ، به روزرسانی سیستم های هسته و سایر بسته ها تا آخرین نسخه پایدار یک روش توصیه شده است. در این مقاله

نحوه نصب Matomo Analytics در Fedora 28

نحوه نصب Matomo Analytics در Fedora 28

با استفاده از یک سیستم متفاوت؟ Matomo (سابقا پیویک) یک بستر تحلیلی منبع باز است ، یک جایگزین باز برای Google Analytics. منبع Matomo میزبان o

یک سرور TeamTalk را در لینوکس تنظیم کنید

یک سرور TeamTalk را در لینوکس تنظیم کنید

TeamTalk یک سیستم کنفرانس است که به کاربران امکان می دهد مکالمات صوتی / تصویری با کیفیت بالا ، چت متنی ، انتقال فایل ها و صفحه های به اشتراک بگذارند. من

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

Vultr یک ویژگی را فراهم می کند که به شما امکان می دهد با ایجاد یک نمونه جدید ، کلیدهای SSH را از قبل نصب کنید. این اجازه می دهد تا به کاربر root دسترسی داشته باشید ، با این حال ، th

نحوه نصب انجمن NodeBB در FreeBSD 12

نحوه نصب انجمن NodeBB در FreeBSD 12

با استفاده از یک سیستم متفاوت؟ NodeBB یک نرم افزار انجمن مبتنی بر Node.js است. از سوکت های وب برای تعامل فوری و اعلامیه های زمان واقعی استفاده می کند. NodeB

نصب و راه اندازی ZNC در اوبونتو

نصب و راه اندازی ZNC در اوبونتو

ZNC یک پیشرانه پیشرفته شبکه IRC است که تمام وقت بهم متصل می شود تا مشتری IRC بتواند بدون از دست دادن جلسه گپ قطع یا وصل شود.

نحوه نصب Ranger Terminal File Manager در لینوکس

نحوه نصب Ranger Terminal File Manager در لینوکس

رنجر یک مدیر فایل مبتنی بر خط فرمان است که دارای کلیدهای اتصال VI است. این برنامه یک رابط لعنتی مینیمالیستی و زیبا با نمای سلسله مراتب فهرست ارائه می دهد