Skapa din egen brandvägg med iptables med det här enkla skriptet

Jag spenderade lite tid på att tänka på två saker om iptables: de flesta av dem som letar efter dessa tutorials är nybörjare och för det andra, många letar redan efter något ganska enkelt och redan utarbetat.

Det här exemplet gäller en webbserver, men du kan enkelt lägga till fler regler och anpassa dem efter dina behov.

När du ser "x" ändra för dina ip


#!/bin/bash

#Rengör iptabeller -F iptables -X # Vi rengör NAT iptables -t nat -F iptables -t nat -X # mangeltabell för saker som PPPoE, PPP och ATM iptables -t mangle -F iptables -t mangle -X # Policy Jag tror att det här är det bästa sättet för nybörjare och # fortfarande inte dåligt, jag ska förklara allt eftersom de är utgående anslutningar #, ingång vi kasserar allt och ingen server ska vidarebefordra. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Behåll tillstånd. Allt som redan är anslutet (etablerat) lämnas så här: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, vi anger inte gränssnittet eftersom # vi vill att det ska vara för alla iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh endast internt och från detta sortiment av ip's iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranät --dport 7659 -j ACCEPT # övervakning till exempel om de har zabbix eller något annat snmp service iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping bra det är upp till dig iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranät -j ACCEPT #mysql med postgres är port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh om du vill skicka mail #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - den verkliga wan ip på din server LAN_RANGE = "192.168.xx / 21" # LAN-intervall av ditt nätverk eller dina vlan # Ip som aldrig ska komma in i extranet,är att använda lite # logik om vi har ett rent WAN-gränssnitt ska det aldrig komma in i # LAN-typtrafik genom det gränssnittet 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 "# Standardåtgärd - ska utföras när någon regel matchar ACTION =" DROP "# Paket med samma ip på min server genom wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranät -s $ SERVER_IP -j $ ACTION # Paket med LAN-intervallet för wan, jag uttrycker det så här om du har # något speciellt nätverk, men detta är överflödigt med följande # regel inuti slingan " för "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Alla SPOOF-nätverk tillåts inte av wan för ip i $ SPOOF_IPS gör iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION done

Som alltid väntar jag på dina kommentarer, håll dig uppdaterad på den här bloggen, tack


Innehållet i artikeln följer våra principer om redaktionell etik. Klicka på för att rapportera ett fel här.

12 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras.

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   HO2Gi sade

    Det hjälper mig att fortsätta lära mig lite mer tack kopieras.

    1.    brodydalle sade

      du är välkommen, glad att vara till hjälp

  2.   Xavier sade

    Jag är verkligen ledsen, men jag har två frågor (och en i gåva 😉):

    Skulle du anlända med den här konfigurationen för att ha Apache igång och stänga resten förutom SSH?

    #Vi städar bord
    iptables-F
    iptables-X

    Vi rengör NAT

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

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

    ssh bara internt och från detta sortiment av ip

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranät –port 7659 -j ACCEPT

    Andra frågan: Är 7659 porten som används i SSH i det här exemplet?

    Och tredje och sista: i vilken fil ska denna konfiguration sparas?

    Tack så mycket för handledningen, det är synd att du är en nybörjare och inte kan dra nytta av den bra.

    1.    brodydalle sade

      detta är regeln du behöver för http från apache
      iptables -A INPUT -p tcp –port 80 -j ACCEPT

      men du måste också deklarera standardinställningarna för släpp (det finns i manuset)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P FRAMÅT DROP

      och detta för om du är avlägsen kommer det att kasta bort dig.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT

      om 7659 är porten för den ssh i exemplet är den som standard 22, även om jag rekommenderar att du byter till en port "inte känd"
      man jag vet inte, som du vill ... firewall.sh och du lägger den i rc.local (sh firewall.sh) så att den körs automatiskt, det beror på vilket operativsystem du har, det finns filer där du kan sätta reglerna direkt.

  3.   jge sade

    Eii mycket bra ditt skript, analysera det .... Vet du hur jag kunde neka alla mina användares förfrågningar till en specifik webbplats? .... men den här webbplatsen har många servrar ....

    1.    brodydalle sade

      Jag rekommenderar andra alternativ:
      1) Du kan skapa en falsk zon i din dns ...
      2) Du kan placera en proxy med acl
      syndembargo
      För iptables kan du gilla detta ... det är inte alltid det bästa alternativet (det finns fler sätt)
      iptables -A INPUT -s blog.fromlinux.ne -j DROP
      iptables -A OUTPUT -d blog.fromlinux.net -j DROP

      Berätta om det fungerade

  4.   Xavier sade

    Tack för svaret, allt rensat. Jag frågade om porten eftersom jag blev förvånad över att använda 7659, eftersom de privata portarna börjar vid 49152, och det kan störa någon tjänst eller något.
    Återigen, tack för allt, det är trevligt!

    Hälsningar.

  5.   sic sade

    BrodyDalle, hur kan jag komma i kontakt med dig? Mycket intressant ditt manus.

  6.   Carlos sade

    Före sista raden "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" är att förhindra att din egen maskin förfalskar? Eller är det möjligt att något förgiftat paket kommer in och det kan gå med den förgiftade källan och det är därför som regeln också ingår i OUTPUT?
    Tack så mycket för förtydligandet !!!

  7.   Fran sade

    det här är mitt eget iptables-skript, det är väldigt komplett:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables för äldre och för nft
    #
    # brandväggsportar
    ################################
    #! / Bin / bash
    #
    # rensa skärmen
    ################################# början av /etc/f-iptables/default.cfg |||||
    klar
    # lämna en rad tom
    missar
    exportera ja = »» nej = »eko av»
    # variablerna du kan ändra för att ge åtkomst
    ###################### variabler för att ändra med $ ja eller $ nej
    exportera hayexcepciones = »$ no»
    # det finns undantag: $ ja för att tillåta exceptionella värdar och $ nej att inaktivera
    exportera hayping = »$ no»
    # hayping: $ ja för att tillåta ping till tredje part och $ nej för att förneka
    exportera haylogserver = »$ no»
    # haylogeosserver: $ ja för att kunna logga tcp $ nej för att inte kunna logga tcp
    ######
    ##################### variabler för att modifiera att lägga till "," eller med intervall ":"
    exportundantag = »baldras.wesnoth.org»
    # undantag tillåter enstaka eller flera värdar från brandväggen eller inget värde
    exportera logserver = kassera, ipp, dict, ssh
    # tcp serverportar som loggas när paket kommer in
    export redserver = 0/0
    # redserver: nätverket för serverportar föredrar lokalt nätverk eller flera ips
    exportklient röd = 0/0
    #clientnet: nätverket för klientportar som är bättre än alla nätverk
    exportera servidortcp = kassera, ipp, dict, 6771
    # servidortcp: de angivna TCP-serverportarna
    export serverudp = kassera
    #udpserver: de angivna udp-serverportarna
    exportera clientudp = domän, bootpc, bootps, ntp, 20000: 45000
    #udp-klient: de angivna udp-klientportarna
    exportera clienttcp = domän, http, https, ipp, git, dict, 14999: 15002
    # tcp-klient: de angivna tcp-klientportarna
    ################################ slutet av /etc/f-iptables/default.cfg |||||
    ################################### slutet av variabler att ändra
    exportera brandvägg = $ 1 variabler = $ 2
    if ["$ variables" = "$ NULL"]; sedan källa /etc/f-iptables/default.cfg;
    annars källa / etc / f-iptables / $ 2; fi
    ################################### eller så skriver du över variablerna med en .cfg-fil
    ################################################################# #####################################################
    exportera brandvägg = $ 1 exportvariabler = $ 2
    ############################################### automatisk automatisk systemvariabler
    if ["$ firewall" = "frånkopplad"]; sedan echo FIREWALL DISCONNEDED;
    export activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; sedan eko FIREWALL CLIENT;
    export activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; sedan echo FIREWALL SERVER;
    export activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "klient och server"]; sedan echo FIREWALL CLIENT AND SERVER;
    export aktivera server = »»; export activateclient = »»; export wet = »$ no»;
    elif ["$ firewall" = "tillåtet"]; sedan echo PERMISSIVE FIREWALL;
    export activateserver = »$ no» activateclient = »$ no» wet = »»;
    annars
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L OUTPUT
    eko _____parametrar____ $ 0 $ 1 $ 2
    echo "cast utan parametrar är att lista iptables."
    echo "Den första parametern (aktivera iptables): frånkopplad eller klient eller server eller klient och server eller tillåtet."
    echo "Den andra parametern: (valfritt): standard.cfg-filen väljer /etc/f-iptables/default.cfg"
    eko "Variabla inställningar:" $ (ls / etc / f-iptables /)
    utgång 0; fi
    #################
    missar
    echo Kasta $ 0 frånkopplad eller klient eller server eller klient och server eller tillåtna eller variabler eller utan att använda parameter för att lista iptables.
    echo $ 0-filen innehåller några redigerbara variabler inuti.
    ################################### ovanstående variabler aktiverade
    #######################################
    echo-inställning av iptables-variablerna
    ekoaktiverade variabler
    missar
    ############################### iptables-reglerna
    eko Inställning av iptables-arv
    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-arv -t mangel -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 FRAMÅT -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 LOGG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ undantag -j ACCEPT> / dev / null
    $ aktivera sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktivera server 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 $ undantag -j ACCEPT> / dev / null
    $ aktivera sudo-server / usr / sbin / iptables-legacy -A UTGÅNG -p udp -m multiport –sporter $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktivera server 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 -dports $ 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-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FRAMÅT -j DROP
    echo iptables-arv aktiverat
    missar
    eko Inställning av iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangel -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangel -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A UTGÅNG -j DROP
    sudo / usr / sbin / ip6tables-nft -A FRAMÅT -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 multiport –dports $ logserver -j LOGG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ undantag -j ACCEPT> / dev / null
    $ aktivera server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport -dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktivera server 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 –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-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
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ undantag -j ACCEPT> / dev / null
    $ aktivera server sudo / usr / sbin / iptables-nft -A UTGÅNG -p udp -m multiport –sporter $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ aktivera server sudo / usr / sbin / iptables-nft -A UTGÅNG -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 –dports $ 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 echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A UTGÅNG -j DROP
    sudo / usr / sbin / iptables-nft -A FRAMÅT -j DROP
    echo iptables-nft aktiverat
    missar
    $ 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 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 –state established -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
    ################################
    eko du har kastat $ 0 $ 1 $ 2
    # går ut ur skriptet
    avsluta 0

  8.   louis duran sade

    Hur skulle jag ställa in en regel om den här brandväggen använde den för min gateway och hade en bläckfisk inom LAN ???