צור חומת אש משלך באמצעות iptables באמצעות סקריפט פשוט זה

ביליתי קצת זמן במחשבה על שני דברים לגבי הטבלאות האלה: רוב אלה שמחפשים הדרכות אלה הם מתחילים ושנית, רבים כבר מחפשים משהו פשוט למדי וכבר משוכלל.

דוגמה זו מיועדת לשרת אינטרנט, אך תוכלו להוסיף בקלות כללים נוספים ולהתאים אותם לצרכים שלכם.

כאשר אתה רואה שינוי "x" עבור מכשירי ה- ip שלך


#!/bin/bash

# אנו מנקים שולחנות iptables -F iptables -X # אנו מנקים NAT iptables -t nat -F iptables -t nat -X # שולחן מנגל לדברים כמו PPPoE, PPP ו- iptables של כספומט -t mangle -F iptables -t mangle -X # מדיניות אני חושב שזו הדרך הטובה ביותר למתחילים ו # עדיין לא רע, אני אסביר את הפלט (פלט) הכל בגלל שהם חיבורים יוצאים #, קלט אנחנו זורקים הכל, ושום שרת לא צריך להעביר. iptables -P INPUT DROP iptables -P OUTPUT מקבלים iptables -P FORWARD DROP # אינטראנט LAN אינטראנט = eth0 # Extranet wan extranet = eth1 # שמור על מצב. כל מה שכבר מחובר (הוקם) נותר כמו iptables זה -מצב INPUT -m - state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, אנחנו לא מציינים את הממשק כי # אנחנו רוצים שזה יהיה כל iptables -A INPUT -p tcp --port 80 -j קבל iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh רק באופן פנימי ומתוך טווח זה של iptables ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ אינטראנט --port 7659 -j ACCEPT # ניטור למשל אם יש להם zabbix כמה iptables של שירות snmp אחר - A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j קבל # icmp, פינג טוב זה תלוי בך iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql עם postgres הוא port 5432 iptables -A INPUT -p tcp -s 192.168.xx - sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh אם אתה רוצה לשלוח קצת דואר # iptables -A OUTPUT -p tcp --port 25 -j קבל # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" IP IP של שרת - ה- 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 / XNUMX "# פעולת ברירת מחדל - לביצוע כאשר כלל כלשהו תואם ל- ACTION =" DROP "# חבילות עם אותו IP של השרת שלי דרך iptables wan -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # חבילות עם טווח LAN עבור ה- wan, אני מגדיר את זה ככה למקרה שיש לך # רשת מסוימת, אבל זה מיותר עם כלל # הבא בפנים הלולאה "עבור" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## כל רשתות SPOOF אינן מורשות על ידי wan ל- ip $ SPOOF_IPS לעשות iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION done

כמו תמיד אני ממתין לתגובות שלך, הישאר מעודכן בבלוג זה, תודה


תוכן המאמר עומד בעקרונותינו של אתיקה עריכתית. כדי לדווח על שגיאה לחץ כאן.

12 תגובות, השאר את שלך

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   HO2Gi דיג'ו

    זה עוזר לי להמשיך ללמוד קצת יותר תודות שהועתקו.

    1.    ברודידל דיג'ו

      אתה מוזמן, שמח לעזור

  2.   חאווייר דיג'ו

    אני ממש מצטער, אבל יש לי שתי שאלות (ואחת במתנה 😉):

    האם היית מגיע עם תצורה זו כדי שאפאצ'י יפעל ויסגור את השאר למעט SSH?

    # אנו מנקים שולחנות
    iptables -f
    iptables-X

    אנו מנקים את NAT

    iptables -t nat -F
    iptables -t nat -X

    iptables -A INPUT -p tcp -port 80 -j קבל

    ssh רק באופן פנימי ומתוך מגוון זה של ip

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ אינטראנט -port 7659 -j קבל

    שאלה שנייה: האם 7659 היציאה משמשת ב- SSH בדוגמה זו?

    ושלישי ואחרון: באיזה קובץ יש לשמור תצורה זו?

    תודה רבה על ההדרכה, חבל שאתה כל כך מתחיל ולא יכול לנצל אותה היטב.

    1.    ברודידל דיג'ו

      זה הכלל שאתה צריך עבור http מ- apache
      iptables -A INPUT -p tcp -port 80 -j קבל

      אך עליך גם להצהיר על מדיניות ברירת המחדל של ירידה (זה נמצא בתסריט)
      iptables -P DROP קלט
      iptables -P OUTPUT קבלה
      iptables - P דרופון קדימה

      וזה כי אם אתה מרוחק, זה יזרוק אותך.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j קבלה

      אם 7659 הוא הנמל של ה- ssh בדוגמה, כברירת מחדל הוא 22, אם כי אני ממליץ להחליף ליציאה "לא ידועה"
      איש אני לא יודע, כמו שאתה רוצה ... firewall.sh ואתה שם אותו ב- rc.local (sh firewall.sh) כך שהוא יפעל אוטומטית, זה תלוי באיזו מערכת הפעלה יש לך, יש קבצים שבהם אתה יכול לשים את הכללים ישירות.

  3.   ג'ג ' דיג'ו

    Eii טוב מאוד אחי התסריט שלך, מנתח אותו .... האם אתה יודע כיצד אוכל לדחות את כל בקשות המשתמשים שלי לאתר ספציפי? .... אבל באתר זה יש הרבה שרתים ...

    1.    ברודידל דיג'ו

      אני ממליץ על אפשרויות אחרות:
      1) אתה יכול ליצור אזור מזויף ב- DNS שלך ...
      2) אתה יכול למקם פרוקסי עם acl
      אמברגו חטא
      עבור iptables אתה יכול לחבב את זה ... זה לא תמיד האפשרות הטובה ביותר (יש דרכים נוספות)
      iptables -A INPUT- blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.fromlinux.net -j DROP

      תגיד לי אם זה עבד

  4.   חאווייר דיג'ו

    תודה על התשובה, הכל התבהר. שאלתי לגבי הנמל כי הופתעתי להשתמש ב- 7659, מכיוון שהנמלים הפרטיים מתחילים ב- 49152 וזה יכול להפריע לשירות כלשהו או משהו כזה.
    שוב, תודה על הכל, זה נחמד!

    ברכות.

  5.   כך במקור דיג'ו

    ברודידל, איך אוכל ליצור איתך קשר? מאוד מעניין את התסריט שלך.

  6.   קרלוס דיג'ו

    השורה הקודמת "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" היא למנוע מזיוף של המכונה שלך? או שמא ייתכן שחבילה מורעלת כלשהי נכנסת ויכולה לצאת עם אותו מקור מורעל ולכן הכלל נכלל גם ב- OUTPUT?
    תודה רבה על ההבהרה !!!

  7.   פראן דיג'ו

    זהו סקריפט ה- iptables שלי, הוא שלם מאוד:

    # franes.iptables.airoso
    # doc.iptables.airoso: iptables למורשת ול nft
    #
    # יציאות חומת אש
    ##############################
    #! / bin / bash
    #
    # נקה את המסך
    ################################# התחלת /etc/f-iptables/default.cfg |||||
    ברור
    # השאירו שורה ריקה
    הד
    ייצא כן = »» לא = »הד כבוי»
    # המשתנים שניתן לשנות כדי לאפשר גישה
    ####################### משתנים לשינוי עם $ yes או $ no
    ייצוא hayexcepciones = »$ no»
    # יש יוצאים מן הכלל: $ כן כדי לאפשר למארחים יוצאי דופן ו- $ לא להשבית
    יצוא הייפ = »$ no»
    # הייפ: $ כן כדי לאפשר פינג לצדדים שלישיים ו- $ לא להכחיש
    ייצוא haylogserver = »$ no»
    # haylogeosserver: $ כן כדי להיות מסוגל להיכנס tcp $ לא כדי לא להיות מסוגל להיכנס tcp
    ######
    ###################### משתנים לשינוי הוספת "," או עם טווחי ":"
    חריגים מייצוא = »baldras.wesnoth.org»
    # חריגים מאפשרים מארחים בודדים או מרובים מחומת האש או ללא ערך
    ייצא שרת יומן = מחק, ipp, dict, ssh
    # יציאות שרת tcp שנרשמות כשחבילות נכנסות
    שרת אדום לייצא = 0/0
    # redserver: הרשת ליציאות שרתים עדיפה רשת מקומית או מספר ips
    לקוח ייצוא אדום = 0/0
    # clientnet: הרשת ליציאות הלקוח עדיפה על כל הרשתות
    ייצא servidortcp = מחק, ipp, dict, 6771
    # servidortcp: יציאות שרת ה- tcp שצוינו
    ייצא serverudp = מחק
    #udpserver: יציאות שרת udp שצוינו
    ייצוא clientudp = תחום, bootpc, bootps, ntp, 20000: 45000
    #udp client: יציאות הלקוח udp שצוינו
    ייצא clienttcp = דומיין, http, https, ipp, git, dict, 14999: 15002
    # tcp client: יציאות הלקוח tcp שצוינו
    ############################### סוף סוף /etc/f-iptables/default.cfg |||||
    ################################## סוף סוף המשתנים לשינוי
    חומת אש לייצא = $ 1 משתנים = $ 2
    אם ["$ variables" = "$ NULL"]; ואז מקור /etc/f-iptables/default.cfg;
    מקור אחר / etc / f-iptables / $ 2; fi
    ################################## או יחליף את המשתנים בקובץ .cfg
    ################################################################ ###################################################
    חומת אש לייצוא = $ 1 משתני יצוא = $ 2
    ################################################ משתני מערכת אוטומטיים
    אם ["$ firewall" = "מנותק"]; ואז מהדהד חומת אש מנותקת;
    ייצוא activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "לקוח"]; ואז מהדהד את הלקוח של חומת האש;
    ייצוא activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "שרת"]; ואז מהדהד את שרת האש;
    ייצוא activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "לקוח ושרת"]; ואז מהדהד את הלקוח ואת השרת;
    שרת הפעלת ייצוא = »»; ייצוא activateclient = »»; ייצוא wet = »$ no»;
    elif ["$ firewall" = "מותר"]; ואז מהדהד חומת אש מותרת;
    ייצוא activateserver = »$ no» activateclient = »$ no» wet = »»;
    אחר
    $ check sudo echo iptables-legacy:
    $ check 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
    הד "יצוק ללא פרמטרים הוא רשימת טבלאות ipt."
    הד "הפרמטר הראשון (אפשר iptables): מנותק או לקוח או שרת או לקוח ושרת או מותר."
    הד "הפרמטר השני: (אופציונלי): קובץ default.cfg בוחר /etc/f-iptables/default.cfg"
    הד "הגדרות משתנות:" $ (ls / etc / f-iptables /)
    יציאה 0; fi
    ##################
    הד
    הד זורק 0 $ מנותקים או לקוח או שרת או לקוח ושרת או מתירנים או משתנים או מבלי להשתמש בפרמטר לרשימת iptables.
    הד הקובץ $ 0 מכיל בתוכו כמה משתנים הניתנים לעריכה.
    #################################### המשתנים לעיל הופעלו
    #####################################
    הד הגדרת משתני ה- iptables
    משתנים שהופעלו על ידי הד
    הד
    ############################# כללי ה- iptables
    הד הגדרת 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 multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ exceptions -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ הפעל את השרת sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport-sports $ clientudp -m state-state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport-sports $ clienttcp -m state-state established -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
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exceptions -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport-sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport-sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -port ספורט $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp מסוג בקשת הד -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    הד 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 מנגל -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t מנגל -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A OUTPUT -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 קבל> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ exceptions -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport -dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport -dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport-sports $ clientudp -m state-state established -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport -ports $ clienttcp -m state-state established -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 קבל> / dev / null
    $ יש חריגים sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport-sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ הפעל שרת sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport-sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport -port ספורט $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type הד-בקשה -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -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-state שנקבע -j ACCEPT> / dev / null
    $ sudo רטוב / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ סודו רטוב / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ סודו רטוב / 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-state שנקבע -j ACCEPT> / dev / null
    $ סודו רטוב / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ סודו רטוב / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    #############################
    הד זרקת $ 0 $ 1 $ 2
    # יוצא מהתסריט
    צא מ- 0

  8.   לואיס דוראן דיג'ו

    איך הייתי מגדיר כלל אם חומת האש הזו משתמשת בו לשער שלי והיה לו דיונון בתוך ה- LAN ???