Vytvorte si vlastný firewall s iptables pomocou tohto jednoduchého skriptu

Strávil som čas premýšľaním nad dvoma vecami o iptables: väčšina z tých, ktorí hľadajú tieto návody, sú začiatočníci a po druhé, mnohí už hľadajú niečo celkom jednoduché a už prepracované.

Tento príklad je pre webový server, ale môžete ľahko pridať ďalšie pravidlá a prispôsobiť ich svojim potrebám.

Keď uvidíte zmenu „x“ pre vašu adresu IP


#!/bin/bash

# Čistíme iptables tabuľky -F iptables -X # Čistíme NAT iptables -t nat -F iptables -t nat -X # mangle tabuľka pre veci ako PPPoE, PPP a ATM iptables -t mangle -F iptables -t mangle -X # Politiky Myslím, že toto je najlepší spôsob pre začiatočníkov a # stále to nie je zlé, vysvetlím výstup (výstup), všetko preto, že sú to odchádzajúce spojenia #, vstup všetko zahodíme a žiadny server by nemal ďalej postupovať. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Zachovať stav. Všetko, čo je už pripojené (založené), zostane takto: iptables -A INPUT -m stav --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, neurčujeme rozhranie, pretože # chceme, aby to bolo pre všetky iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh iba interne a z tohto rozsahu iptable ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoring napríklad ak majú zabbix alebo nejaká iná snmp služba iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping dobre, záleží len na vás iptables -A INPUT -p icmp -s 192.168. xx / 24 - i $ intranet -j ACCEPT # mysql s postgresom je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh ak chcete poslať nejaký mail #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - skutočná IP adresa vášho servera LAN_RANGE = "192.168.xx / 21 "# LAN rozsah vašej siete alebo vášho vlan # IP, ktoré by nikdy nemali vstúpiť do extranetu,je použiť trochu # logiky, ak máme čisto rozhranie WAN, nikdy by nemalo vstupovať do prenosu typu LAN cez toto rozhranie 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 "# Predvolená akcia - vykoná sa, keď sa nejaké pravidlo zhoduje ACTION =" DROP "# Pakety s rovnakou IP môjho servera cez wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A VÝSTUP -o $ extranet -s $ SERVER_IP -j $ AKCIA # Pakety s LAN rozsahom pre wan, dal som to takto pre prípad, že máte # ľubovoľnú konkrétnu sieť, ale toto je nadbytočné s nasledujúcim # pravidlom vo vnútri slučka „pre“ iptables -A VSTUP -i $ extranet -s $ LAN_RANGE -j $ AKCIA iptables -A VÝSTUP -o $ extranet -s $ LAN_RANGE -j $ AKCIA ## Všetky siete SPOOF nepovoľuje wan pre ip v $ SPOOF_IPS do iptables -A VSTUP -i $ extranet -s $ ip -j $ AKCIA iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCIA hotová

Ako vždy čakám na vaše komentáre, sledujte tento blog, ďakujeme


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   HO2Gi dijo

    Pomáha mi to pokračovať v učení o trochu viac vďaka kopírovaniu.

    1.    brodydalle dijo

      nie ste vítaní, radi vám pomôžeme

  2.   xavier dijo

    Je mi to naozaj ľúto, ale mám dve otázky (a jednu ako darček 😉):

    Prišli by ste s touto konfiguráciou, aby bol spustený Apache a zavreli zvyšok okrem SSH?

    # Čistíme stoly
    iptables -F
    iptables -X

    Čistíme NAT

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

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

    ssh iba interne a z tohto rozsahu ip

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

    Druhá otázka: Je v tomto príklade použitý port 7659 v SSH?

    A tretí a posledný: do ktorého súboru by sa mala uložiť táto konfigurácia?

    Ďakujem pekne za návod, je škoda, že ste taký nováčik a nemôžete ho dobre využiť.

    1.    brodydalle dijo

      toto je pravidlo, ktoré potrebujete pre http z apache
      iptables -A INPUT -p tcp –port 80 -j ACCEPT

      ale musíte tiež deklarovať drop default politiky (je to v skripte)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P VPRED DROP

      a to preto, že ak ste vzdialení, vyhodí vás to.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT

      ak je v príklade 7659 port tohto ssh, štandardne je to 22, aj keď vám odporúčam zmeniť na port „nie veľmi známy“
      človeče neviem, ako chceš ... firewall.sh a vložíš to do rc.local (sh firewall.sh) tak, aby sa to spúšťalo automaticky, záleží to na tom, aký máš operačný systém, sú súbory, kde môžeš dať pravidlá priamo.

  3.   jge dijo

    Eii veľmi dobrý váš skript, ktorý ho analyzuje ... Viete, ako by som mohol poprieť všetky požiadavky svojich používateľov na konkrétnu webovú stránku? .... ale tento web má veľa serverov….

    1.    brodydalle dijo

      Odporúčam ďalšie možnosti:
      1) Vo svojich DNS môžete vytvoriť falošnú zónu ...
      2) Môžete umiestniť proxy s acl
      embargo na hriechy
      Pre iptables sa vám to môže páčiť ... nie je to vždy najlepšia voľba (existuje viac spôsobov)
      iptables -A INPUT -s blog.desdelinux.ne -j KAPKA
      iptables -A VÝSTUP -d blog.desdelinux.net -j DROP

      Povedzte mi, či to fungovalo

  4.   xavier dijo

    Ďakujem za odpoveď, všetko sa vyjasnilo. Pýtal som sa na port, pretože som bol prekvapený, že používam 7659, pretože súkromné ​​porty začínajú na 49152 a mohol by prekážať nejakej službe alebo niečomu.
    Opäť ďakujem za všetko, to je pekné!

    Zdravím.

  5.   sic dijo

    BrodyDalle, ako sa s tebou môžem spojiť? Veľmi zaujímavý váš scenár.

  6.   Carlos dijo

    Je predošlým posledným riadkom „iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCIA“ zabránenie falšovaniu vášho vlastného počítača? Alebo je možné, že vstúpi nejaký otrávený paket a môže odísť s týmto otráveným zdrojom, a preto je pravidlo súčasťou aj VÝSTUPU?
    Dakujem pekne za objasnenie !!!

  7.   fran dijo

    toto je môj vlastný skript iptables, je to veľmi úplné:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables pre staršie a pre nft
    #
    # porty brány firewall
    ##############################
    #! / Bin / bash
    #
    # vyčistite obrazovku
    ################################# začiatok /etc/f-iptables/default.cfg |||||
    zrejmý
    # nechajte prázdny riadok
    minúť
    export áno = »» nie = »ozvena vypnutá»
    # premenné, ktoré môžete zmeniť, aby ste povolili prístup
    ####################### premenné, ktoré chcete upraviť pomocou $ yes alebo $ no
    exportovať hayexcepciones = »$ no»
    # existujú výnimky: $ yes umožňujúce výnimočné hostiteľa a $ no deaktivovať
    exportovať kupovanie = »$ nie»
    # hayping: $ yes umožniť ping tretích strán a $ no odmietnuť
    exportovať haylogserver = »$ no»
    # haylogeosserver: $ yes, aby som sa mohol prihlásiť tcp $ no, aby som sa mohol prihlásiť tcp
    ######
    ######################## premenné na úpravu pridania znakov „,“ alebo s rozsahmi „:“
    export výnimky = »baldras.wesnoth.org»
    # výnimky povoľujú jedného alebo viacerých hostiteľov z brány firewall alebo žiadna hodnota
    export logserver = zahodiť, ipp, dict, ssh
    # porty servera tcp, ktoré sa zaznamenávajú, keď prichádzajú pakety
    export redserver = 0/0
    # redserver: sieť pre porty servera, prednostne lokálna sieť alebo niekoľko ips
    export klient červený = 0/0
    #clientnet: sieť pre klientske porty je výhodnejšia pre všetky siete
    export servidortcp = zahodiť, ipp, dict, 6771
    # servidortcp: zadané porty servera tcp
    export serverudp = zahodiť
    #udpserver: zadané porty servera udp
    export clientudp = doména, bootpc, bootps, ntp, 20000: 45000
    #udp client: zadané porty klienta udp
    export clienttcp = doména, http, https, ipp, git, dict, 14999: 15002
    # tcp client: zadané porty klienta tcp
    ############################### koniec /etc/f-iptables/default.cfg |||||
    ################################# koniec premenných, ktoré sa majú upraviť
    export firewall = $ 1 premenné = $ 2
    if ["$ variables" = "$ NULL"]; potom source /etc/f-iptables/default.cfg;
    else zdroj / etc / f-iptables / $ 2; fi
    ################################# alebo prepíše premenné súborom .cfg
    ##################################################### #############################################
    export firewall = $ 1 export premenných = $ 2
    ############################################# automatické systémové premenné
    if ["$ firewall" = "odpojený"]; potom ozvena PIRÁŽA ODPOJENÁ;
    export activateserver = »$ no» activclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient"]; potom zopakujte KLIENT FIREWALL;
    export activateserver = »$ no» activclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; potom echo FIREWALL SERVER;
    export activateserver = »» activclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient a server"]; potom ozvite KLIENT A SERVER POŽIARNEJ STRÁNKY;
    export aktivovať server = »»; export activclient = »»; export mokrý = »$ nie»;
    elif ["$ firewall" = "tolerantný"]; potom ozvena POVOLENÝ POŽIAR;
    export activateserver = »$ no» activclient = »$ no» wet = »»;
    inak
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L VSTUP
    $ check sudo iptables-legacy -v -L VÝSTUP
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L VSTUP
    $ check sudo iptables-nft -v -L VÝSTUP
    echo _____parametre____ $ 0 $ 1 $ 2
    echo "cast bez parametrov je zoznam iptables."
    echo "Prvý parameter (povoliť iptables): odpojený alebo klient alebo server alebo klient a server alebo tolerantný."
    echo "Druhý parameter: (voliteľný): predvolený súbor .cfg vyberie /etc/f-iptables/default.cfg"
    echo "Variabilné nastavenia:" $ (ls / etc / f-iptables /)
    výstup 0; fi
    #################
    minúť
    echo Hodí $ 0 odpojený alebo klient alebo server alebo klient a server alebo tolerantné alebo premenné alebo bez použitia parametra na zoznam iptables.
    echo Súbor $ 0 obsahuje vo vnútri nejaké upraviteľné premenné.
    ################################## vyššie uvedené premenné sú aktivované
    ###################################
    echo nastavenie premenných iptables
    echo aktivované premenné
    minúť
    ############################## pravidlá iptables
    echo Nastavenie 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 VÝSTUP -j DROP
    sudo / usr / sbin / ip6tables-legacy -A VPRED -j KAPKA
    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
    $ Activate server sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activate server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activatedclient 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
    $ activatedclient 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-response -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A VÝSTUP -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayexceptions sudo / usr / sbin / iptables-legacy -A VÝSTUP -d $ výnimky -j ACCEPT> / dev / null
    $ Activate server sudo / usr / sbin / iptables-legacy -A VÝSTUP -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activate server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activclient sudo / usr / sbin / iptables-legacy -A VÝSTUP -p udp -m multiport –dporty $ clientudp -s $ klientnet -d $ klientnet -j ACCEPT> / dev / null
    $ activatedclient sudo / usr / sbin / iptables-legacy -A VÝSTUP -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A VÝSTUP -p icmp –icmp-typ echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A VÝSTUP -j DROP
    sudo / usr / sbin / iptables-legacy -A VPRED -j DROP
    echo iptables-legacy povolené
    minúť
    echo Nastavenie 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 VÝSTUP -j DROP
    sudo / usr / sbin / ip6tables-nft -A VPRED -j KAPKA
    sudo / usr / sbin / iptables-nft -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PRIJAŤ> / 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 VSTUP -s $ výnimky -j ACCEPT> / dev / null
    $ Activate server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activate server sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activclient 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 –sports $ clienttcp -m stav –stav zavedený -s $ klientský sieť -d $ klientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-response -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A VSTUP -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A VÝSTUP -s 127.0.0.1 -d 127.0.0.1 -j PRIJAŤ> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A VÝSTUP -d $ výnimky -j AKCEPTOVAŤ> / dev / null
    $ aktivovať server sudo / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –športy $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktivovať server sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –športy $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –dporty $ clientudp -s $ klientnet -d $ klientnet -j ACCEPT> / dev / null
    $ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –dporty $ clienttcp -s $ klientnet -d $ klientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A VÝSTUP -p icmp –icmp-typ echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A VÝSTUP -j DROP
    sudo / usr / sbin / iptables-nft -A VPRED -j KAPKA
    echo iptables-nft povolené
    minúť
    $ 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 stav –stát zavedený -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A VÝSTUP -j PRIJAŤ> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A VPRED -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 VSTUP -m stav –stav zavedený -j PRIJAŤ> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A VSTUP -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A VÝSTUP -j PRIJAŤ> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A VPRED -j DROP> / dev / null
    #############################
    echo ste hodili $ 0 $ 1 $ 2
    # ukončí skript
    výstup 0

  8.   louis duran dijo

    Ako by som nastavil pravidlo, keby ho tento firewall používal pre moju bránu a mal v sieti LAN chobotnicu ???