Crea el teu propi tallafocs amb iptables mitjançant aquest senzill script

Vaig estar un temps pensant en dues coses respecte a això de iptables: la majoria dels que busquen aquests tutorials són principiants i segon molts busquen ja alguna cosa mitjanament senzill i ja elaborat.

Aquest exemple és per a un servidor web, Però pots fàcilment afegir més regles i adaptar-lo a les teves necessitats.

Quan vegin «x» canviïn pels seus ip s


#!/bin/bash

#Limpiamos taules iptables -F iptables -X # Netegem NAT iptables -t nat -F iptables -t nat -X # taula mangle per a coses com PPPoE, PPP, and ATM iptables -t mangle -F iptables -t mangle -X # Polítiques penso que aquest és la millor manera per a principiants i # tot i així no aquesta malament, t'explico output (sortida) sobretot perquè són connexions # sortints, input descartem tot, i cap servidor hauria de fer forward. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Keep state. Tot el que ja està connectat (establert) ho deixem així iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i ho -j ACCEPT # http, https, no especifiquem la interfície perquè # volem que sigui per totes iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh només internament i des d'aquest rang de ip s iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # monitoratge per exemple si tenen Zabbix o algun altre servei snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, ping bo és decisió teva iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql amb postgres és el port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh si vols enviar algun correu #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09 # SERVER_IP = "07.xxx" # server IP - la ip wan real del teu servidor LAN_RANGE = "2014.xx / 190" # Rang LAN de la teva xarxa o de la teva vlan # Ip que no haurien d'entrar per l'extranet mai,és usar una mica de # lògica si tenim una interfície netament WAN no hauria mai entrar # trànsit tipus LAN per aquesta interfície SPOOF_IPS = "192.168/21 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0 / 12 "# Acció per defecte - que es realitzés quan faci matx alguna regla ACTION =" DROP "# Paquets amb la mateixa ip del meu servidor per la wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paquets amb el rang LAN per la wan, el col·loco així per si tens # alguna xarxa particular, però això és redundant amb la següent # regla dins de l'bucle " for "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Totes les Xarxes spoof no permeses per la wan for ip in $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION done

Com sempre espero els seus comentaris, romanguin sintonitzats en aquest bloc, Gràcies


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   HO2Gi va dir

    Em serveix per seguir aprenent una mica més gràcies copiat.

    1.    BrodyDalle va dir

      de res, m'alegro de ser d'ajuda

  2.   Javier va dir

    Ho sento molt, però tinc dues preguntes (i una de regal 😉):

    Arribaria amb aquesta configuració per tenir Apache funcionant i tancar la resta excepte SSH?

    #Limpiamos taules
    iptables -F
    iptables -X

    netegem NAT

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

    iptables -A INPUT -p tcp -dport 80 -j ACCEPT

    ssh només internament i des d'aquest rang de ip s

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

    Segona pregunta: És el 7659 el port que s'usa en SSH en aquest exemple?

    I tercera i última: en què arxiu s'ha de guardar aquesta configuració?

    Moltes gràcies pel tutorial, és una pena que sigui tan novell i no pugui aprofitar-bé.

    1.    BrodyDalle va dir

      aquesta és la regla que necessites per http d'apatxe
      iptables -A INPUT -p tcp -dport 80 -j ACCEPT

      però també necessites declarar les polítiques per defecte de drop (està en l'script)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P FORWARD DROP

      i aquesta per que si aquestes remot, et va a botar.
      iptables -A INPUT -m state -state ESTABLISHED, RELATED -j ACCEPT

      si 7659 és el port d'aquest servidor ssh de l'exemple, per defecte és 22, encara que et recomano canviar a un port «no ben conegut»
      home no es, com tu vulguis ... firewall.sh i ho col·loques en rc.local (sh firewall.sh) perquè s'executi automàtic, depèn de quin sistema operatiu tinguis existeixen arxius on pots posar les regles directament.

  3.   JGE va dir

    Eii bre molt bo el teu script, analitzant ... .sabes com podria denegar totes les peticions dels meus usuaris a un lloc web específic? .... però aquest lloc web té molt servidors ....

    1.    BrodyDalle va dir

      Et recomano altres opcions:
      1) Pots crear una zona falsa en el teu dns ...
      2) Pots col·locar un proxy amb acl
      embargament de pecat
      Per iptables pots aixi ... no sempre és la millor opció (existeixen mes formes)
      iptables -A INPUT -s bloc.desdelinux.ne -j DROP
      iptables -A OUTPUT -d bloc.desdelinux.net -j DROP

      Explica'm si funciono

  4.   Javier va dir

    Gràcies per la resposta, tot aclarit. El de l'port el preguntava perquè em va estranyar fer servir el 7659, ja que els ports privats comencen al 49152, i podria interferir amb algun servei o alguna cosa.
    De nou, gràcies per tot, així dóna gust!

    Salutacions.

  5.   sic va dir

    BrodyDalle com puc posar-me en contacte amb vostè? Molt interessant la seva script.

  6.   Carlos va dir

    La davant última línia «iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION» està per evitar que la teva pròpia màquina faci spoofing? ¿O és possible que ingressi algun paquet enverinat i pugui sortir amb aquest source enverinat i per això també s'inclou la regla amb OUTPUT?
    Moltes gràcies per l'aclariment !!!

  7.   fran va dir

    aquest és el meu propi script d'iptables, és molt complet:

    # franes.iptables.airoso
    # Doc.iptables.airoso: iptables per legacy i per NFT
    #
    # Ports de l'tallafocs
    ############################
    #! / Bin / bash
    #
    # Neteja la pantalla
    ############################### inici de /etc/f-iptables/default.cfg |||||
    clear
    # Deixa una linea en blanc
    trobo
    export si = »» no = »trobo off»
    # Les variables que pots canviar per permetre accés
    ###################### variables per ajustar fent $ si o $ no
    export hayexcepciones = »$ no»
    # Hayexcepciones: $ si per permetre host excepcioneles i $ no per desactivar
    export hayping = »$ no»
    # Hayping: $ si per permetre els pings a tercers i $ no per denegar
    export haylogserver = »$ no»
    # Haylogeosserver: $ si per poder logear tcp $ no per no poder logear tcp
    ######
    ###################### variables a modificar afegint «,» o amb rangs de «:»
    export excepcions = »baldras.wesnoth.org»
    # Excepcions permetre a un o diversos host des del tallafocs o sense valor
    export logserver = discard, ipp, dict, ssh
    # Ports servidor TCP als quals es guarda registre quan entren paquets
    export redserver = 0/0
    # Redserver: la xarxa per a ports servidors preferible xarxa local o diverses ips
    export redcliente = 0/0
    # Redcliente: la xarxa per a ports clients preferible totes les xarxes
    export servidortcp = discard, ipp, dict, 6771
    # Servidortcp: els ports servidors tcp especificats
    export ServidorUDP = discard
    # ServidorUDP: els ports servidors udp especificats
    export ClientUDP = domain, bootpc, bootps, ntp, 20000: 45000
    # ClientUDP: els ports clients udp especificats
    export clientetcp = domain, http, https, ipp, git, dict, 14999: 15002
    # Clientetcp: els ports clients tcp especificats
    ############################## cap de /etc/f-iptables/default.cfg |||||
    ############################### fi de variables per modificar
    export tallafocs = $ 1 variables = $ 2
    if [ "$ variables» = «$ NULL»]; then source /etc/f-iptables/default.cfg;
    else source / etc / f-iptables / $ 2; fi
    ############################### o va sobreescriure les variables amb un archivo.cfg
    ################################################## ##########################################
    export tallafocs = $ 1 export variables = $ 2
    ########################################## variables automàtiques de sistema
    if [ "$ tallafocs» = «desconnectat»]; then echo FIREWALL DESCONNECTAT;
    export activarservidor = »$ no» activarcliente = »$ no» mullat = »$ no»;
    elif [ «$ tallafocs» = «client»]; then echo FIREWALL CLIENT;
    export activarservidor = »$ no» activarcliente = »» mullat = »$ no»;
    elif [ «$ tallafocs» = «servidor»]; then echo FIREWALL SERVIDOR;
    export activarservidor = »» activarcliente = »$ no» mullat = »$ no»;
    elif [ «$ tallafocs» = «clienteyservidor»]; then echo FIREWALL CLIENT I SERVIDOR;
    export activarservidor = »»; export activarcliente = »»; export mullat = »$ no»;
    elif [ «$ tallafocs» = «permissiu»]; then echo FIREWALL permissiu;
    export activarservidor = »$ no» activarcliente = »$ no» mullat = »»;
    else
    $ Comprova sudo echo iptables-legacy:
    $ Comprova sudo iptables-legacy -v -L INPUT
    $ Comprova sudo iptables-legacy -v -L OUTPUT
    $ Comprova sudo echo iptables-NFT:
    $ Comprova sudo iptables-NFT -v -L INPUT
    $ Comprova sudo iptables-NFT -v -L OUTPUT
    trobo _____parmetros____ $ 0 $ 1 $ 2
    trobo «llança sense paràmetres és per llistar iptables.»
    trobo «El primer paràmetre (activar iptables): desconnectat o client o servidor o clienteyservidor o permissiu.»
    trobo «El segon paràmetre: (opcional): el archivo.cfg per defecte tria /etc/f-iptables/default.cfg»
    trobo «Les configuracions de les variables:» $ (ls / etc / f-iptables /)
    èxit 0; fi
    ################
    trobo
    trobo Llança $ 0 desconnectat o client o servidor o clienteyservidor o permissiu o variables o sense usar paràmetre per llistar iptables.
    trobo El fitxer $ 0 conté algunes variables editables dins.
    ################################ les anteriors variables activades
    ################################
    trobo configurant les variables d'iptables
    trobo variables activades
    trobo
    ############################ les regles d'iptables
    trobo configurant iptables-legacy
    suo / usr / sbin / iptables-legacy -t filter -F
    suo / usr / sbin / iptables-legacy -t nat -F
    suo / usr / sbin / iptables-legacy -t mangle -F
    suo / usr / sbin / ip6tables-legacy -t filter -F
    suo / usr / sbin / ip6tables-legacy -t nat -F
    suo / usr / sbin / ip6tables-legacy -t mangle -F
    suo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    suo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    suo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    suo / 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
    $ Hayexcepciones sudo / usr / sbin / iptables-legacy -A INPUT -s $ excepcions -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -dports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -dports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport -sports $ ClientUDP -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport -sports $ clientetcp -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT> / dev / null
    suo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    suo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ Hayexcepciones sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ excepcions -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -sports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport -sports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport -dports $ ClientUDP -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport -dports $ clientetcp -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp -icmp-type echo-request -j ACCEPT> / dev / null
    suo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    suo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    trobo iptables-legacy activat
    trobo
    trobo configurant iptables-NFT
    suo / usr / sbin / iptables-NFT -t filter -F
    suo / usr / sbin / iptables-NFT -t nat -F
    suo / usr / sbin / iptables-NFT -t mangle -F
    suo / usr / sbin / ip6tables-NFT -t filter -F
    suo / usr / sbin / ip6tables-NFT -t nat -F
    suo / usr / sbin / ip6tables-NFT -t mangle -F
    suo / usr / sbin / ip6tables-NFT -A INPUT -j DROP
    suo / usr / sbin / ip6tables-NFT -A OUTPUT -j DROP
    suo / usr / sbin / ip6tables-NFT -A FORWARD -j DROP
    suo / 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
    $ Hayexcepciones sudo / usr / sbin / iptables-NFT -A INPUT -s $ excepcions -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-NFT -A INPUT -p udp -m multiport -dports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-NFT -A INPUT -p tcp -m multiport -dports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-NFT -A INPUT -p udp -m multiport -sports $ ClientUDP -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-NFT -A INPUT -p tcp -m multiport -sports $ clientetcp -m state -state established -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Hayping sudo / usr / sbin / iptables-NFT -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT> / dev / null
    suo / usr / sbin / iptables-NFT -A INPUT -j DROP> / dev / null
    suo / usr / sbin / iptables-NFT -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ Hayexcepciones sudo / usr / sbin / iptables-NFT -A OUTPUT -d $ excepcions -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-NFT -A OUTPUT -p udp -m multiport -sports $ ServidorUDP -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarservidor sudo / usr / sbin / iptables-NFT -A OUTPUT -p tcp -m multiport -sports $ servidortcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-NFT -A OUTPUT -p udp -m multiport -dports $ ClientUDP -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Activarcliente sudo / usr / sbin / iptables-NFT -A OUTPUT -p tcp -m multiport -dports $ clientetcp -s $ redcliente -d $ redcliente -j ACCEPT> / dev / null
    $ Hayping sudo / usr / sbin / iptables-NFT -A OUTPUT -p icmp -icmp-type echo-request -j ACCEPT> / dev / null
    suo / usr / sbin / iptables-NFT -A OUTPUT -j DROP
    suo / usr / sbin / iptables-NFT -A FORWARD -j DROP
    trobo iptables-NFT activat
    trobo
    $ Mullat sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ Mullat sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ Mullat sudo / usr / sbin / iptables-legacy -A INPUT -m state -state established -j ACCEPT> / dev / null
    $ Mullat sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ Mullat sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ Mullat sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ Mullat sudo / usr / sbin / iptables-NFT -F> / dev / null
    $ Mullat sudo / usr / sbin / iptables-NFT -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ Mullat sudo / usr / sbin / iptables-NFT -A INPUT -m state -state established -j ACCEPT> / dev / null
    $ Mullat sudo / usr / sbin / iptables-NFT -A INPUT -j DROP> / dev / null
    $ Mullat sudo / usr / sbin / iptables-NFT -A OUTPUT -j ACCEPT> / dev / null
    $ Mullat sudo / usr / sbin / iptables-NFT -A FORWARD -j DROP> / dev / null
    ###########################
    trobo has llançat $ 0 $ 1 $ 2
    # Surt de l'script
    exit 0

  8.   Luis Duran va dir

    c'omo faria per posar una regla si aquest tallafocs ho usés per a mi gateway i tingués un squid dins de la LAN ???