Vytvořte si svůj vlastní firewall s iptables pomocí tohoto jednoduchého skriptu

Chvíli jsem přemýšlel o dvou věcech o iptables: většina z těch, kteří hledají tyto návody, jsou začátečníci a zadruhé, mnozí již hledají něco docela jednoduchého a již propracovaného.

Tento příklad je pro webový server, ale můžete snadno přidat další pravidla a přizpůsobit je svým potřebám.

Když uvidíte „x“, změňte své IP adresy


#!/bin/bash

# Čistíme tabulky iptables -F iptables -X # Čistíme NAT iptables -t nat -F iptables -t nat -X # tabulka mangle pro věci jako PPPoE, PPP a ATM iptables -t mangle -F iptables -t mangle -X # Zásady Myslím, že je to nejlepší způsob pro začátečníky a # stále není špatný, vysvětlím výstup vše, protože jsou odchozí připojení #, vstup vše zahodíme a žádný server by neměl předávat. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Zachovat stav. Všechno, co je již připojeno (založeno), je ponecháno takto: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, neurčujeme rozhraní, protože # chceme, aby to bylo pro všechny iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh pouze interně a z této řady iptables ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitorování například pokud mají zabbix nebo jiné snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping dobře je to na vás iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT # mysql s postgres je port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh pokud chcete poslat nějaký mail #iptables -A VÝSTUP -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - skutečná IP adresa vašeho serveru LAN_RANGE = "192.168.xx / 21" # rozsah LAN vaší sítě nebo vašeho vlan # IP, které by nikdy neměly vstoupit do extranetu,je použít trochu # logiky, pokud máme čistě WAN rozhraní, nikdy by nemělo vstupovat do provozu typu LAN přes toto rozhraní 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 "# Výchozí akce - provede se, když se nějaké pravidlo shoduje AKCE =" DROP "# Pakety se stejnou IP adresou mého serveru přes wan iptables -A VSTUP -i $ extranet -s $ SERVER_IP -j $ AKCE # iptables -A VÝSTUP -o $ extranet -s $ SERVER_IP -j $ AKCE # Pakety s LAN rozsahem pro wan, dal jsem to takhle v případě, že máte # jakoukoli konkrétní síť, ale to je nadbytečné s následujícím # pravidlem uvnitř smyčky " pro „iptables -A VSTUP -i $ extranet -s $ LAN_RANGE -j $ AKCE iptables -A VÝSTUP -o $ extranet -s $ LAN_RANGE -j $ AKCE ## Všechny sítě SPOOF nejsou povoleny wanem pro ip v $ SPOOF_IPS dělat iptables -A VSTUP -i $ extranet -s $ ip -j $ AKCE iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCE hotovo

Jako vždy čekám na vaše komentáře, zůstaňte naladěni v tomto blogu, děkuji


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   HO2Gi řekl

    Pomáhá mi to pokračovat v učení trochu víc díky kopírování.

    1.    brodydalle řekl

      jste vítáni, rádi vám pomůžeme

  2.   Xavier řekl

    Je mi to opravdu líto, ale mám dvě otázky (a jednu jako dárek):

    Přišli byste s touto konfigurací, aby Apache běžel a zavřel zbytek kromě 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 pouze interně az tohoto rozsahu IP

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j PŘIJMOUT

    Druhá otázka: Je v tomto příkladu použit port 7659 v SSH?

    A třetí a poslední: do kterého souboru má být tato konfigurace uložena?

    Velice vám děkuji za tutoriál, je škoda, že jste takový nováček a nemůžete ho dobře využít.

    1.    brodydalle řekl

      toto je pravidlo, které potřebujete pro http z apache
      iptables -A INPUT -p tcp –port 80 -j ACCEPT

      ale musíte také deklarovat výchozí zásady přetažení (je to ve skriptu)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P VPŘED DROP

      a to proto, že pokud jste vzdálení, odhodí vás to.
      iptables -A INPUT -m state –state ZJIŠTĚN, RELATED -j ACCEPT

      pokud je v příkladu port 7659 portem ssh, standardně je to 22, i když doporučuji změnit na port „not well known“
      muž Nevím, jak chceš ... firewall.sh a vložíš to do rc.local (sh firewall.sh) tak, aby se to spouštělo automaticky, záleží na tom, jaký operační systém máš, jsou soubory, kde můžeš pravidla umístit přímo.

  3.   jge řekl

    Eii velmi dobrý váš skript, jeho analýza .... Víte, jak bych mohl popřít všechny požadavky svých uživatelů na konkrétní web? .... ale tento web má spoustu serverů….

    1.    brodydalle řekl

      Doporučuji další možnosti:
      1) Ve svých dns můžete vytvořit falešnou zónu ...
      2) Můžete umístit proxy s acl
      hříšné embargo
      U iptables se vám to může líbit ... není to vždy nejlepší volba (existuje více způsobů)
      iptables -A INPUT -s blog.desdelinux.ne -j KAPKA
      iptables -A VÝSTUP -d blog.desdelinux.net -j DROP

      Řekni mi, jestli to funguje

  4.   Xavier řekl

    Díky za odpověď, všechno se vyjasnilo. Ptal jsem se na port, protože mě překvapilo, že používám 7659, protože soukromé porty začínají na 49152, a mohlo by to narušit nějakou službu nebo něco.
    Ještě jednou díky za všechno, to je hezké!

    Zdravím.

  5.   sic řekl

    BrodyDalle, jak se s tebou mohu spojit? Velmi zajímavý váš scénář.

  6.   Carlos řekl

    Předposlední řádek „iptables -A VÝSTUP -o $ extranet -s $ ip -j $ AKCE“ je tam, aby zabránil spoofingu vašeho vlastního stroje? Nebo je možné, že nějaký otrávený paket vstoupí a může odejít s tímto otráveným zdrojem, a proto je pravidlo zahrnuto také do VÝSTUPU?
    Moc děkuji za vysvětlení !!!

  7.   fran řekl

    toto je můj vlastní skript iptables, je velmi kompletní:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables pro starší a pro nft
    #
    # porty brány firewall
    ##################################
    #! / bin / bash
    #
    # vyčistit obrazovku
    ################################# začátek /etc/f-iptables/default.cfg |||||
    jasný
    # nechte řádek prázdný
    minout
    export ano = »» ne = »ozvěna vypnuta»
    # proměnné, které můžete změnit tak, aby umožňovaly přístup
    ######################## proměnné, které chcete upravit pomocí $ yes nebo $ no
    exportovat hayexcepciones = »$ no»
    # existují výjimky: $ yes pro povolení výjimečných hostitelů a $ no pro deaktivaci
    exportovat hayping = »$ no»
    # hayping: $ yes umožnit ping třetím stranám a $ no popřít
    exportovat haylogserver = »$ no»
    # haylogeosserver: $ ano, aby bylo možné přihlásit tcp $ ne, aby bylo možné přihlásit tcp
    ######
    ######################## proměnné, které chcete upravit přidáním "," nebo s rozsahy ":"
    export výjimky = »baldras.wesnoth.org»
    # výjimky umožňují jednomu nebo více hostitelům z brány firewall nebo žádnou hodnotu
    export logserver = zahodit, ipp, dict, ssh
    # porty serveru tcp, které jsou protokolovány, když přicházejí pakety
    exportovat redserver = 0/0
    # redserver: síť pro porty serveru, přednostně místní síť nebo několik ips
    exportovat klienta červená = 0/0
    #clientnet: síť pro klientské porty je lepší než všechny sítě
    export servidortcp = zahodit, ipp, dict, 6771
    # servidortcp: zadané porty serveru tcp
    export serverudp = zahodit
    #udpserver: zadané porty serveru 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
    # klient tcp: zadané porty klienta tcp
    ############################### konec /etc/f-iptables/default.cfg |||||
    ################################# konec proměnných k úpravě
    exportovat firewall = $ 1 proměnné = $ 2
    if ["$ variables" = "$ NULL"]; pak source /etc/f-iptables/default.cfg;
    else source / etc / f-iptables / $ 2; fi
    ################################# nebo proměnné přepíšete souborem .cfg
    ####################################################### ##############################################
    exportovat firewall = $ 1 exportovat proměnné = $ 2
    ############################################# automatické systémové proměnné
    if ["$ firewall" = "odpojeno"]; poté ozvěna FIREWALL ODPOJENO;
    export activateserver = »$ no» activclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient"]; poté ozvěna KLIENT FIREWALL;
    export activateserver = »$ no» activclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; pak echo FIREWALL SERVER;
    export activateserver = »» activclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient a server"]; poté ozvěna KLIENT A SERVER FIREWALL;
    export aktivovat server = »»; export activclient = »»; export mokrý = »$ no»;
    elif ["$ firewall" = "tolerantní"]; pak ozvěna POVOLENÝ POŽÁR;
    export activateserver = »$ no» activclient = »$ no» wet = »»;
    jiný
    $ 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 _____parametry____ $ 0 $ 1 $ 2
    echo "cast bez parametrů je vypsat iptables."
    echo "První parametr (povolit iptables): odpojený nebo klient nebo server nebo klient a server nebo tolerantní."
    echo "Druhý parametr: (volitelný): soubor default.cfg vybere /etc/f-iptables/default.cfg"
    echo "Variabilní nastavení:" $ (ls / etc / f-iptables /)
    výstup 0; fi
    ##################
    minout
    echo Hodí $ 0 odpojeno nebo klient nebo server nebo klient a server nebo tolerantní nebo proměnné nebo bez použití parametru k seznamu iptables.
    echo Soubor $ 0 obsahuje uvnitř některé upravitelné proměnné.
    ################################## výše uvedené proměnné aktivovány
    ###################################
    echo nastavení proměnných iptables
    echo aktivované proměnné
    minout
    ############################## pravidla iptables
    echo Nastavení iptables-legacy
    sudo / usr / sbin / iptables-legacy -t filtr -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filtr -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 dopředu -j DROP
    sudo / usr / sbin / iptables-legacy -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PŘIJMOUT> / 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 sudo server / 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
    $ activclient 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
    $ activclient 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 PŘIJMOUT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A VÝSTUP -d $ výjimky -j PŘIJMOUT> / dev / null
    $ aktivovat sudo server / usr / sbin / iptables-legacy -A VÝSTUP -p udp -m multiport –sporty $ 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 –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activclient 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 OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A VÝSTUP -j DROP
    sudo / usr / sbin / iptables-legacy -A dopředu -j DROP
    echo iptables-legacy enabled
    minout
    echo Nastavení iptables-nft
    sudo / usr / sbin / iptables-nft -t filtr -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filtr -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 dopředu -j DROP
    sudo / usr / sbin / iptables-nft -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PŘIJMOUT> / 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
    $ 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
    $ activclient sudo / usr / sbin / iptables-nft -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-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 PŘIJMOUT> / dev / null
    $ hayexceptions sudo / usr / sbin / iptables-nft -A VÝSTUP -d $ výjimky -j PŘIJMOUT> / dev / null
    $ aktivovat sudo server / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –sporty $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktivovat server sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –sporty $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p udp -m multiport –dports $ clientudp -s $ klientnet -d $ klientnet -j PŘIJÍMAT> / dev / null
    $ activclient sudo / usr / sbin / iptables-nft -A VÝSTUP -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j PŘIJMOUT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A VÝSTUP -p icmp –icmp-typ echo-požadavek -j PŘIJMOUT> / dev / null
    sudo / usr / sbin / iptables-nft -A VÝSTUP -j DROP
    sudo / usr / sbin / iptables-nft -A dopředu -j DROP
    echo iptables-nft povoleno
    minout
    $ 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 established -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 PŘIJMOUT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A dopředu -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A VSTUP -s 127.0.0.1 -d 127.0.0.1 -j PŘIJMOUT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m stav –stát zaveden -j PŘIJÍMAT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A VÝSTUP -j PŘIJMOUT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A dopředu -j DROP> / dev / null
    #############################
    echo jste hodili $ 0 $ 1 $ 2
    # ukončí skript
    výjezd 0

  8.   louis duran řekl

    Jak bych nastavil pravidlo, kdyby ho tento firewall použil pro moji bránu a měl v síti chobotnici ???