أنشئ جدار الحماية الخاص بك باستخدام iptables باستخدام هذا البرنامج النصي البسيط

كنت أفكر في شيئين حول iptables لفترة من الوقت: معظم أولئك الذين يبحثون عن هذه الدروس هم مبتدئون وثانيًا ، كثير منهم يبحثون بالفعل عن شيء بسيط إلى حد ما ومفصل بالفعل.

هذا المثال لخادم الويب، ولكن يمكنك بسهولة إضافة المزيد من القواعد وتكييفها مع احتياجاتك.

عندما ترى تغيير "x" لملكية الفكرية الخاصة بك


#!/bin/bash

# نقوم بتنظيف جداول iptables -F iptables -X # نقوم بتنظيف NAT iptables -t nat -F iptables -t nat -X # mangle table لأشياء مثل PPPoE و PPP و ATM iptables -t mangle -F iptables -t mangle -X # Policies أعتقد أن هذه هي أفضل طريقة للمبتدئين و # لا تزال ليست سيئة ، سأشرح الإخراج (الإخراج) جميعًا لأنها اتصالات صادرة # ، ومدخلات نتجاهل كل شيء ، ولا يجب إعادة توجيه أي خادم. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Keep state. يتم ترك كل شيء متصل بالفعل (تم إنشاؤه) على النحو التالي: iptables -A INPUT -m state - State ESTABLISHED، RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http، https ، لا نحدد الواجهة لأن # نريدها أن تكون كلها iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh داخليًا فقط ومن هذا النطاق لـ iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # المراقبة على سبيل المثال إذا كان لديهم zabbix أو غيره snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp ، ping جيدًا الأمر متروك لك iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql with postgres is port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh إذا كنت تريد إرسال بعض البريد #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - عنوان wan ip الحقيقي لخادمك LAN_RANGE = "192.168.xx / 21" # نطاق LAN من شبكتك أو شبكة vlan # Ip التي يجب ألا تدخل الشبكة الخارجية أبدًا ،هو استخدام القليل من # منطق إذا كان لدينا واجهة WAN بحتة ، فلا يجب أبدًا إدخال حركة مرور من نوع LAN من خلال تلك الواجهة SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 / 16 "# الإجراء الافتراضي - يتم تنفيذه عندما تتطابق أي قاعدة مع ACTION =" DROP "# Packets بنفس عنوان IP لخادمي من خلال wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Packets with the LAN Range for the wan ، أضعها على هذا النحو في حال كان لديك # أي شبكة معينة ، لكن هذا زائد عن الحاجة مع قاعدة # التالية داخل الحلقة " لـ "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## لا تسمح شبكة WAN لجميع شبكات SPOOF للملكية الفكرية في $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ تم تنفيذ الإجراء

كما هو الحال دائمًا ، أنتظر تعليقاتكم ، ترقبوا هذه المدونة ، شكرًا لك


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   HO2Gi قال

    يساعدني على مواصلة التعلم أكثر بقليل من نسخ الشكر.

    1.    بروديال قال

      على الرحب والسعة ، يسعدني تقديم المساعدة

  2.   كزافييه قال

    أنا آسف حقًا ، لكن لدي سؤالان (وآخر كهدية 😉):

    هل ستصل بهذا التكوين لتشغيل Apache وإغلاق الباقي باستثناء SSH؟

    # نحن ننظف الطاولات
    يبتابليس-F
    يبتابليس-X

    نقوم بتنظيف NAT

    iptables - نات - F.
    iptables -t nat -x.x

    iptables -A INPUT -p tcp –dport 80 -j ACCEPT

    ssh داخليًا فقط ومن هذا النطاق من IP

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet -dport 7659 -j ACCEPT

    السؤال الثاني: هل 7659 هو المنفذ المستخدم في SSH في هذا المثال؟

    والثالث والأخير: في أي ملف يجب حفظ هذا التكوين؟

    شكرًا جزيلاً لك على البرنامج التعليمي ، فمن العار أنك مبتدئ ولا يمكنك الاستفادة منه جيدًا.

    1.    بروديال قال

      هذه هي القاعدة التي تحتاجها لـ http من اباتشي
      iptables -A INPUT -p tcp –dport 80 -j ACCEPT

      ولكنك تحتاج أيضًا إلى إعلان إسقاط السياسات الافتراضية (في النص البرمجي)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P إسقاط للأمام

      وهذا لأنك إذا كنت بعيدًا ، فسوف يرميك بعيدًا.
      iptables -A INPUT -m state -state ESTABLISHED، RELATED -J ACCEPT

      إذا كان 7659 هو منفذ ssh هذا في المثال ، فهو 22 افتراضيًا ، على الرغم من أنني أوصيك بالتغيير إلى منفذ "غير معروف جيدًا"
      رجل لا أعرف ، كما تريد ... firewall.sh وقمت بوضعه في rc.local (sh firewall.sh) بحيث يتم تشغيله تلقائيًا ، ويعتمد ذلك على نظام التشغيل لديك ، وهناك ملفات يمكنك من خلالها وضع القواعد مباشرةً.

  3.   جي قال

    مرحبًا ، البرنامج النصي الخاص بك جيد جدًا ، يتم تحليله…. هل تعرف كيف يمكنني رفض جميع الطلبات من المستخدمين إلى موقع ويب معين؟…. لكن هذا الموقع يحتوي على الكثير من الخوادم….

    1.    بروديال قال

      أوصي بخيارات أخرى:
      1) يمكنك إنشاء منطقة وهمية في نظام أسماء النطاقات الخاص بك ...
      2) يمكنك وضع وكيل مع ACL
      خطيئة الحظر
      بالنسبة إلى iptables ، يمكنك الإعجاب بهذا ... ليس دائمًا الخيار الأفضل (هناك طرق أخرى)
      مدونة iptables -A INPUT -s.desdelinux.ne -j قطرة
      مدونة iptables -A OUTPUT -d.desdelinux.net -j دروب

      قل لي إذا كان يعمل

  4.   كزافييه قال

    شكرا على الإجابة ، كل شيء واضح. كنت أسأل عن المنفذ لأنني فوجئت باستخدام 7659 ، حيث تبدأ المنافذ الخاصة في 49152 ، ويمكن أن تتداخل مع بعض الخدمات أو شيء من هذا القبيل.
    مرة أخرى ، شكرًا على كل شيء ، هذا لطيف!

    تحية.

  5.   هكذا قال

    بروديال كيف يمكنني التواصل معك؟ نصك مثير جدا للاهتمام.

  6.   كارلوس قال

    ما قبل السطر الأخير "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" هو منع جهازك الخاص من الانتحال؟ أو هل من الممكن أن تدخل بعض العبوات المسمومة ويمكن أن تغادر مع هذا المصدر المسموم ولهذا السبب تم تضمين القاعدة أيضًا في الإخراج؟
    شكرا جزيلا للتوضيح!!!

  7.   فران قال

    هذا هو سكربت iptables الخاص بي ، وهو مكتمل جدًا:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables للإرث و nft
    #
    # منافذ جدار الحماية
    ###########################
    #! / بن / باش
    #
    # امسح الشاشة
    ############################### بداية /etc/f-iptables/default.cfg |||||
    واضح
    # اترك سطرًا فارغًا
    صدى
    تصدير نعم = »» لا = »إيقاف الصدى»
    # المتغيرات التي يمكنك تغييرها للسماح بالوصول
    ###################### يمكن تعديل المتغيرات باستخدام $ yes أو $ no
    تصدير hayexcepciones = »لا دولار»
    # هناك استثناءات: $ yes للسماح بمضيفين استثنائيين و $ no للتعطيل
    تصدير hayping = »$ no»
    # hayping: $ yes للسماح بأصوات طرف ثالث و $ no للرفض
    تصدير haylogserver = »$ no»
    # haylogeosserver: $ نعم لتتمكن من تسجيل tcp $ no حتى لا تتمكن من تسجيل برنامج tcp
    ######
    ###################### تعديل المتغيرات بإضافة "،" أو بنطاقات ":"
    استثناءات التصدير = »baldras.wesnoth.org»
    # استثناءات تسمح لمضيف واحد أو عدة مضيفين من جدار الحماية أو بدون قيمة
    تصدير خادم السجل = تجاهل ، ipp ، ديكت ، ssh
    # منافذ خادم tcp التي يتم تسجيلها عند دخول الحزم
    تصدير redserver = 0/0
    # redserver: الشبكة لمنافذ الخادم أفضل شبكة محلية أو عدة IPS
    تصدير العميل الأحمر = 0/0
    #clientnet: أفضل شبكة لمنافذ العميل على جميع الشبكات
    تصدير servidortcp = تجاهل ، ipp ، dict ، 6771
    # servidortcp: منافذ خادم TCP المحدد
    خادم التصديرudp = تجاهل
    #udpserver: منافذ خادم udp المحددة
    تصدير clientudp = المجال ، bootpc ، bootps ، ntp ، 20000: 45000
    #udp client: منافذ عميل udp المحددة
    تصدير clienttcp = المجال ، http ، https ، ipp ، git ، dt ، 14999: 15002
    # tcp client: منافذ عميل tcp المحددة
    ############################## نهاية /etc/f-iptables/default.cfg |||||
    ################################ نهاية المتغيرات المراد تعديلها
    جدار حماية التصدير = متغيرات $ 1 = $ 2
    إذا ["$ variables" = "$ NULL"] ؛ ثم المصدر /etc/f-iptables/default.cfg ؛
    else source / etc / f-iptables / $ 2 ؛ فاي
    ################################ أو ستكتب فوق المتغيرات بملف .cfg
    ################################################## ###########################################
    جدار حماية التصدير = متغيرات تصدير $ 1 = $ 2
    ########################################## متغيرات النظام التلقائية
    إذا ["$ firewall" = "غير متصل"] ؛ ثم صدى الجدار الناري مفصول ؛
    تصدير activateserver = »$ no» activateclient = »$ no» wet = »$ no»؛
    elif ["$ firewall" = "client"] ؛ ثم صدى FIREWALL CLIENT ؛
    تصدير Activateserver = »$ no» activateclient = »» رطب = »$ no»؛
    elif ["$ firewall" = "الخادم"] ؛ ثم صدى FIREWALL SERVER ؛
    تصدير activateserver = »» activateclient = »$ no» رطب = »$ no»؛
    elif ["$ firewall" = "العميل والخادم"]؛ ثم صدى FIREWALL CLIENT AND SERVER ؛
    تصدير تنشيط الخادم = »» ؛ تصدير activateclient = »» ؛ تصدير رطب = »لا دولار» ؛
    elif ["$ firewall" = "permissive"]؛ ثم صدى الجدار الناري الدائم ؛
    تصدير activateserver = »$ no» activateclient = »$ no» wet = »»؛
    آخر
    check sudo echo iptables-legacy:
    تحقق من sudo iptables-legacy -v -L INPUT
    check sudo iptables-legacy -v -L OUTPUT
    check sudo echo iptables-nft:
    تحقق من sudo iptables-nft -v -L INPUT
    تحقق من sudo iptables-nft -v -L OUTPUT
    صدى _____ معلمات __ $ 0 $ 1 $ 2
    صدى "cast without parameters is to list iptables."
    صدى "المعلمة الأولى (تمكين iptables): مفصول أو عميل أو خادم أو عميل وخادم أو مسموح به."
    صدى "المعامل الثاني: (اختياري): يختار الملف default.cfg /etc/f-iptables/default.cfg"
    صدى "الإعدادات المتغيرة:" $ (ls / etc / f-iptables /)
    خروج 0 ؛ فاي
    ##################
    صدى
    echo يلقي $ 0 غير متصل أو عميل أو خادم أو عميل وخادم أو متسامح أو متغيرات أو بدون استخدام معلمة لسرد iptables.
    echo يحتوي الملف $ 0 على بعض المتغيرات القابلة للتحرير بالداخل.
    ################################# تم تفعيل المتغيرات المذكورة أعلاه
    ###############################
    صدى ضبط متغيرات iptables
    المتغيرات المنشطة بالصدى
    صدى
    ############################# قواعد iptables
    echo إعداد iptables-legacy
    sudo / usr / sbin / iptables-legacy -t filter -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filter -F
    sudo / usr / sbin / ip6tables-legacy -t nat -F
    sudo / usr / sbin / ip6tables-legacy -t mangle-F.
    sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multort –dports $ logserver -j LOG> / dev / null
    استثناءات $ haye sudo / usr / sbin / iptables-legacy -A INPUT -s $ استثناءات -j ACCEPT> / dev / null
    تنشيط خادم sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multort –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    تنشيط الخادم sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multort –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multort –sports $ clientudp -m state-state-مؤسس -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multort –sports $ clienttcp -m state-state-مؤسس -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    استثناءات $ hay sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ استثناءات -j ACCEPT> / dev / null
    تنشيط خادم sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multort –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    تنشيط الخادم sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multort –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multort –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multort –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    تمكين echo iptables-legacy
    صدى
    ضبط الصدى iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle-F.
    sudo / usr / sbin / ip6tables-nft -t filter-F.
    sudo / usr / sbin / ip6tables-nft -t nat-F.
    sudo / usr / sbin / ip6tables-nft -t mangle-F.
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A الإخراج -j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multort –dports $ logserver -j LOG> / dev / null
    استثناءات $ haye sudo / usr / sbin / iptables-nft -A INPUT -s $ استثناءات -j ACCEPT> / dev / null
    تنشيط الخادم sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multort –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    تنشيط الخادم sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multort –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multort –sports $ clientudp -m state-state-Based -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multort –sports $ clienttcp -m state-state-selected -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ هناك استثناءات sudo / usr / sbin / iptables-nft -A OUTPUT -d $ استثناءات -j ACCEPT> / dev / null
    تنشيط الخادم sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multort –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    تنشيط الخادم sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multort –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multort –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multort –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A الإخراج -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    تمكين صدى iptables-nft
    صدى
    $ wet sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state- الحالة التي تم إنشاؤها -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m state- الحالة التي تم إنشاؤها -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    ###########################
    صدى لقد رميت $ 0 $ 1 $ 2
    # يخرج من البرنامج النصي
    خروج 0

  8.   لويس دوران قال

    كيف يمكنني وضع قاعدة إذا استخدمها جدار الحماية هذا لبوابي وكان لديه حبار داخل الشبكة المحلية ؟؟؟