Crea il tuo firewall con iptables usando questo semplice script

Ho passato un po 'di tempo a pensare a due cose su questo iptables: la maggior parte di coloro che cercano questi tutorial sono principianti e, in secondo luogo, molti stanno già cercando qualcosa di abbastanza semplice e già elaborato.

Questo esempio è per un server web, ma puoi facilmente aggiungere altre regole e adattarle alle tue esigenze.

Quando vedi "x" cambiare per il tuo IP


#!/bin/bash

# Puliamo le tabelle iptables -F iptables -X # Puliamo NAT iptables -t nat -F iptables -t nat -X # mangle table per cose come PPPoE, PPP e ATM iptables -t mangle -F iptables -t mangle -X # Politiche Penso che questo sia il modo migliore per i principianti e # ancora non male, spiegherò tutto l'output perché sono connessioni in uscita #, input scartiamo tutto e nessun server dovrebbe inoltrare. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Mantieni lo stato. Tutto ciò che è già connesso (stabilito) viene lasciato così: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Dispositivo loop. iptables -A INPUT -i lo -j ACCEPT # http, https, non specifichiamo l'interfaccia perché # vogliamo che sia per tutti gli iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh solo internamente e da questo intervallo di iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoraggio per esempio se hanno zabbix o qualche altro servizio snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping beh dipende da te iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql con postgres è la porta 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh se vuoi inviare un po 'di posta #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - il vero IP wan del tuo server LAN_RANGE = "192.168.xx / 21" # Range LAN della tua rete o dei tuoi IP vlan che non dovrebbero mai entrare nell'extranet,è usare un po 'di logica # se abbiamo un'interfaccia puramente WAN non dovrebbe mai inserire # traffico di tipo LAN attraverso tale interfaccia 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 "# Azione predefinita - da eseguire quando una regola corrisponde ad ACTION =" DROP "# Pacchetti con lo stesso ip del mio server tramite iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Pacchetti con il range LAN per il wan, lo metto così nel caso tu abbia # una rete particolare, ma questo è ridondante con la regola # seguente all'interno del loop " per "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Tutte le reti SPOOF non consentite da Wan per ip in $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ AZIONE iptables -A OUTPUT -o $ extranet -s $ ip -j $ AZIONE eseguita

Come sempre attendo i vostri commenti, rimanete sintonizzati su questo blog, Grazie


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   HO2Gi suddetto

    Mi aiuta a continuare a imparare un po 'di più grazie copiato.

    1.    brodidalle suddetto

      sei il benvenuto, felice di essere d'aiuto

  2.   Xavier suddetto

    Mi dispiace davvero, ma ho due domande (e una in regalo 😉):

    Arriveresti con questa configurazione per avere Apache in esecuzione e chiudere il resto tranne SSH?

    #Puliamo i tavoli
    iptables-F
    iptables-X

    Puliamo NAT

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

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

    ssh solo internamente e da questa gamma di IP

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

    Seconda domanda: 7659 è la porta utilizzata in SSH in questo esempio?

    E terzo e ultimo: in quale file deve essere salvata questa configurazione?

    Grazie mille per il tutorial, è un peccato che tu sia un principiante e non possa trarne vantaggio.

    1.    brodidalle suddetto

      questa è la regola necessaria per http da apache
      iptables -A INPUT -p tcp –dport 80 -j ACCETTA

      ma devi anche dichiarare le politiche di default di drop (è nello script)
      iptables -P CADUTA INGRESSO
      iptables -P ACCETTA L'USCITA
      iptables -P DISCESA IN AVANTI

      e questo perché se sei remoto, ti getterà via.
      iptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT

      se 7659 è la porta di quel ssh nell'esempio, di default è 22, anche se ti consiglio di cambiare con una porta "non ben nota"
      amico non lo so, come vuoi ... firewall.sh e lo metti in rc.local (sh firewall.sh) in modo che venga eseguito automaticamente, dipende dal sistema operativo che hai, ci sono file dove puoi mettere le regole direttamente.

  3.   jge suddetto

    Eii molto buono il tuo copione, analizzandolo .... Sai come potrei negare tutte le richieste dei miei utenti ad un sito specifico? .... ma questo sito ha molti server….

    1.    brodidalle suddetto

      Raccomando altre opzioni:
      1) Puoi creare una fake zone nel tuo dns ...
      2) Puoi inserire un proxy con acl
      embargo sul peccato
      Per iptables ti piace questo ... non è sempre l'opzione migliore (ci sono più modi)
      iptables -A INPUT -s blog.desdelinux.ne -j GOCCIA
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

      Dimmi se ha funzionato

  4.   Xavier suddetto

    Grazie per la risposta, tutto si è chiarito. Chiedevo informazioni sulla porta perché sono rimasto sorpreso di utilizzare il 7659, poiché le porte private iniziano a 49152 e potrebbe interferire con qualche servizio o qualcosa del genere.
    Ancora grazie di tutto, è carino!

    Saluti.

  5.   sic suddetto

    BrodyDalle, come posso metterti in contatto con te? Molto interessante il tuo copione.

  6.   Carlos suddetto

    L'ultima riga "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" serve per impedire lo spoofing della tua macchina? O è possibile che qualche pacchetto avvelenato entri e possa partire con quella sorgente avvelenata ed è per questo che la regola è inclusa anche con OUTPUT?
    Grazie mille per il chiarimento !!!

  7.   fran suddetto

    questo è il mio script iptables, è molto completo:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables per legacy e per nft
    #
    # porte firewall
    ############################
    #! / Bin / bash
    #
    # cancella lo schermo
    ############################## inizio di /etc/f-iptables/default.cfg |||||
    pulire campo
    # lascia una riga vuota
    eco
    esporta sì = »» no = »echo off»
    # le variabili che puoi modificare per consentire l'accesso
    ###################### variabili da modificare con $ sì o $ no
    export hayexcepciones = »$ no»
    # ci sono eccezioni: $ yes per consentire host eccezionali e $ no per disabilitare
    export hayping = »$ no»
    # hayping: $ yes per consentire ping di terze parti e $ no per negare
    export haylogserver = »$ no»
    # haylogeosserver: $ sì per poter accedere a tcp $ no per non essere in grado di registrare tcp
    ######
    ###################### variabili da modificare aggiungendo "," o con intervalli di ":"
    eccezioni esportazione = »baldras.wesnoth.org»
    # eccezioni consentono uno o più host dal firewall o nessun valore
    export logserver = discard, ipp, dict, ssh
    # tcp porte del server che vengono registrate quando arrivano i pacchetti
    export redserver = 0/0
    # redserver: la rete per le porte del server preferibile rete locale o diversi ips
    esportazione client rosso = 0/0
    #clientnet: la rete per le porte client preferibile a tutte le reti
    export servidortcp = scarta, ipp, dict, 6771
    # servidortcp: le porte del server tcp specificate
    export serverudp = scarta
    #udpserver: le porte del server udp specificate
    export clientudp = dominio, bootpc, bootps, ntp, 20000: 45000
    #udp client: le porte del client udp specificate
    export clienttcp = dominio, http, https, ipp, git, dict, 14999: 15002
    # client tcp: le porte del client tcp specificate
    ############################# fine di /etc/f-iptables/default.cfg |||||
    ############################### fine delle variabili da modificare
    esportazione firewall = $ 1 variabili = $ 2
    se ["$ variabili" = "$ NULL"]; quindi fonte /etc/f-iptables/default.cfg;
    altro sorgente / etc / f-iptables / $ 2; fi
    ############################## o sovrascriverà le variabili con un file .cfg
    ################################################ #########################################
    esportazione firewall = $ 1 esportazione variabili = $ 2
    ######################################### variabili di sistema automatiche
    se ["$ firewall" = "disconnesso"]; quindi echo FIREWALL DISCONNECTED;
    export activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; quindi echo FIREWALL CLIENT;
    export activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "server"]; quindi echo FIREWALL SERVER;
    export activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client e server"]; quindi echo FIREWALL CLIENT AND SERVER;
    esportazione attiva server = »»; export activateclient = »»; export wet = »$ no»;
    elif ["$ firewall" = "permissive"]; poi fare eco PERMISSIVE FIREWALL;
    export activateserver = »$ no» activateclient = »$ no» wet = »»;
    altro
    $ check sudo echo iptables-legacy:
    $ controlla sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ controlla sudo iptables-nft -v -L INPUT
    $ controlla sudo iptables-nft -v -L OUTPUT
    echo _____parameters____ $ 0 $ 1 $ 2
    echo "eseguire il cast senza parametri è elencare iptables."
    echo "Il primo parametro (abilita iptables): disconnesso o client o server o client e server o permissivo."
    echo "Il secondo parametro: (opzionale): il file default.cfg sceglie /etc/f-iptables/default.cfg"
    echo "Impostazioni variabili:" $ (ls / etc / f-iptables /)
    uscita 0; fi
    #################
    eco
    echo Genera $ 0 disconnesso o client o server o client e server o permissivo o variabili o senza utilizzare il parametro per elencare iptables.
    echo Il file $ 0 contiene al suo interno alcune variabili modificabili.
    ############################### le variabili sopra attivate
    ###############################
    echo impostando le variabili iptables
    echo variabili attivate
    eco
    ############################ le regole di iptables
    echo Impostazione di iptables-legacy
    sudo / usr / sbin / iptables-legacy -t filtro -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filtro -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 $ eccezioni -j ACCEPT> / dev / null
    $ attivare sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiporta –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ attivare il server sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiporta –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 stabilito -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 stabilito -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 $ eccezioni -j ACCEPT> / dev / null
    $ attivare sudo server / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiporta –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ attivare il server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiporta –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 FORWARD -j DROP
    echo iptables-legacy abilitato
    eco
    echo Impostazione di iptables-nft
    sudo / usr / sbin / iptables-nft -t filtro -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filtro -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 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 ACCEPT> / 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 $ eccezioni -j ACCEPT> / dev / null
    $ attivare il server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiporta –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ attivare il 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 stabilito -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 stabilito -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
    $ hayexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ eccezioni -j ACCEPT> / dev / null
    $ attivare il server sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiporta –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ attivare il server sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiporta –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 OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft abilitato
    eco
    $ 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 stabilito -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 stabilito -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
    ###########################
    echo hai lanciato $ 0 $ 1 $ 2
    # esce dallo script
    esci da 0

  8.   luigi duran suddetto

    Come potrei impostare una regola se questo firewall lo usasse per il mio gateway e avesse un calamaro all'interno della LAN ???