iptables per novells, curiosos, interessats (2a part)

Quan DesdeLinux només tenia pocs mesos de vida vaig escriure un tutorial extremadament simple d'entendre sobre iptables: iptables per novells, curiosos, interessats (1ra part) . Fent ús de metàfores com comparar el nostre ordinador amb la nostra casa, el nostre tallafocs amb la porta de la casa, així com altres exemples vaig explicar de forma amena, sense tants tecnicismes ni conceptes complicats què és un tallafocs, què és iptables i com començar a usar-lo i configurar-lo. Aquesta és la continuació, la 2na part de l'anterior tutorial d'iptables 🙂

Passa que fa pocs dies usant un AP (Access Point) Linksys vaig posar una Wifi a casa de la meva núvia, encara que la localitat no és de les més coneixedores pel que fa a tecnologia, és a dir, no és que hi hagi molts perills de cracking, sempre és bona idea tenir una excel·lent seguretat tant en la Wifi com en els ordinadors.

La seguretat de la Wifi no la comentaré aquí, ja que no és l'objectiu de l'post, em centraré en la configuració d'iptables que actualment ús en el meu portàtil.

El següents ordres són executats en una terminal, necessiten ser executats amb privilegis d'administrador, jo antepondré suo a cada comanda, vostès poden fer-ho igual o evitar usar sudo executant les ordres directament com a root

En l'anterior post havia explicat que és necessari en un tallafocs primer denegar tot tràfic entrant, per a això:

sudo iptables -P INPUT DROP

Després hem de permetre que el nostre propi ordinador tingui permís per entrar dades:

sudo iptables -A INPUT -i lo -j ACCEPT

Així com també acceptar paquets de peticions que s'originin en el nostre ordinador:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Per a una millor comprensió d'aquestes línies, recomano llegir la primera meitat de l'anterior article: iptables per novells, curiosos, interessats (1ra part)

Fins aquí el nostre ordinador pot navegar sense problemes a Internet, però ningú de cap altre entorn (LAN, Internet, Wifi, etc) podrà accedir de cap manera al nostre ordinador. Anem a començar ja a configurar iptables segons les nostres necessitats.

Usant ulogd per treure els logs d'iptables a un altre arxiu:

Per defecte els logs d'iptables van en el registre de l'nucli, de el sistema, o alguna cosa així ... en Arch per defecte, ara mateix ni tan sols recordo on van, és per això que jo faig servir ulogd perquè els logs d'iptables estiguin en un altre arxiu.

sudo iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ULOG

Donant accés al meu servidor privat:

Jo no ús VirtualBox ni res semblant per virtualitzar, jo tinc el meu servidor privat virtualitzat amb Qemu + KVM el qual ha de poder connectar-se a meu portàtil com a tal, amb les regles d'iptables que acabo d'especificar dalt no podrà, és per això que tinc obligatòriament de donar-li permís a la IP del meu servidor virtual perquè pugui accedir al meu portàtil:

sudo iptables -A INPUT -i virbr0 -p tcp -s 192.168.122.88 -j ACCEPT

Anem a detallar aquesta línia, és important que vostès entenguin què significa cada paràmetre, ja que es van a repetir molt d'ara en endavant:

-A INPUT : Estic dient que vaig a declarar una regla per tràfic entrant

-i virbr0 : Declaro que la interfície per la qual acceptaré el trànsit no és etho (LAN) ni wlan0 (Wifi), dic específicament que és el meu interfície virbr0, és a dir, la interfície de xarxa virtual (interna) mitjançant la qual es comunica meu portàtil amb meu servidor virtual (i viceversa)

-p tcp : Específic el protocol, els més usats són UDP i TCP, aquí en realitat n'hi havia prou amb no posar això però ... és un costum especificar el tipus de protocol a acceptar

-s 192.168.122.88 : La source, font dels paquets. O sigui, la regla es refereix a paquets que provinguin específicament des de la IP 192.168.122.88

-j ACCEPT : Ja aquí dic el que vull fer amb els paquets que corresponen amb el abans dit, en aquest cas acceptar.

O sigui ia manera de resum, acceptaré paquets que provinguin des de la IP 192.168.122.88, però en cas que vulguin entrar paquets que vinguin des d'aquesta IP PERÒ! entren des d'una interfície que no sigui virbr0, és a dir, diguem que intenten entrar paquets des de la IP 192.168.122.88 però són d'un ordinador a la nostra xarxa Wifi, si aquest és el cas, els paquets seran rebutjats. Per què? Perquè clarament especifiquem que sí, acceptem paquets des 192.168.122.88 sí, però i sol però, també han d'entrar des de la interfície virbr0 (interfície de xarxa interna, virtual), si els paquets provenen des d'una altra interfície (LAN, RAS, Wifi, etc) llavors no seran acceptats. Especificant la interfície com poden apreciar podem restringir encara més, podem tenir un millor control sobre el que entra (o no entra) al nostre ordinador.

Acceptant ping des de qualsevol IP de la Wifi de casa:

Des d'algun altre ordinador que es connecti a la Wifi, si intenta fer ping al meu portàtil desig permetre-ho. ¿Motiu? La idea també és que en pròximes setmanes enllaçar la PC de la casa d'a el costat a la xarxa, així compartir informació seria menys complexa, més fluida, quan jo comenci a fer proves per enllaçar la desktop a la Wifi, necessitaré fer ping al meu portàtil per comprovar la connectivitat, si el meu portàtil no em torna el ping puc pensar que l'AP està fallant, o que hi va haver algun error a l'accedir a la Wifi, és per això que desitjo permetre el ping.

sudo iptables -A INPUT -i wlo1 -p icmp -s 192.168.1.0/24 -d 192.168.1.51 -j ACCEPT

-A INPUT : El mateix que abans, faig referència a tràfic entrant

-i wlo1 : Similar a abans. En el cas anterior vaig especificar la interfície virtual, en aquest cas específic altra interfície, la de la meva wifi: wlo1

-p icmp : Protocol ICMP, icmp = ping. O sigui, no estic permetent SSH ni res semblant, permet només ping (icmp)

-s 192.168.1.0/24 : La font dels paquets, és a dir, sempre que els paquets vinguin des d'una IP 192.168.1.? seran acceptats

-d 192.168.1.51 : IP de destinació, és a dir, la meva IP.

-j ACCEPT : Índic què fer amb els paquets que coincideixin amb l'anterior, acceptar.

O sigui i per explicar això de forma correguda, accepto que em facin ping (protocol icmp) la destinació sigui específicament la meva IP, sempre que vinguin des d'alguna IP com 192.168.1 .__ però a més, no poden provenir des de qualsevol interfície de xarxa , han d'entrar específicament des de la meva interfície de xarxa de Wifi (wlo1)

Acceptar SSH només per a una IP:

A vegades necessito connectar-me per SSH des del meu telèfon intel·ligent per controlar la portàtil, És per això que he de permetre l'accés SSH al meu portàtil des de les IPs de la meva Wifi, per a això:

sudo iptables -A INPUT -i wlo1 -p tcp -s 192.168.1.0/24 -d 192.168.1.51 --dport 22 -j ACCEPT

D'aquesta línia l'únic diferent o que cal destacar és: -dport 22 (Port de SSH que ús)

O sigui, accepto intents de connexió al meu portàtil pel port 22, sempre que aquests vinguin des d'alguna IP de la meva wifi, també han de tenir com a destinació específica meva IP i més venir per la interfície wlo1, és a dir, la de la meva wifi (no la de la lan, etc)

Permetent que vegin un lloc web seu:

No és el meu cas, però si algun de vostès té un lloc web hosteado i no volen denegar l'accés a ningú, és a dir, que tots des de qualsevol part puguin accedir a aquest lloc web, és molt més simple del que poden pensar:

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

O sigui, aquí estan permetent tot tràfic entrant (tcp) pel port 80. Com veuen, no específic des de quina IP o xarxa si permet l'accés, a ell no especificar un rang d'IP a permetre, iptables assumeix que desitjo permetre-li l'accés a tots els rangs d'IPs existents, és a dir, a tothom 🙂

Altres combinacions:

Tinc moltes regles com són per exemple, acceptar ping per IPs de la LAN de casa (per a aquesta és bàsicament la mateixa línia anterior, canviant els rangs d'IPs), que és més del mateix que recentment els vaig explicar dalt ... en el meu portàtil com a tal no ús coses realment complexes, això de limitar les connexions, anti DDoS, això ho deixo per als servidors, en el meu portàtil no ho necessito 🙂

En fi, fins aquí l'article.

Com poden veure, treballar amb iptables no és tan complex ni de bon tros, un cop et armes un script en el qual escrius les teves regles és molt simple després modificar-lo, afegir o treure regles al teu tallafocs.

No em considero un expert en el tema ni molt menys, no obstant qualsevol dubte que puguin tenir la comenten aquí, intentaré ajudar-los en tot el que pugui.

Salutacions


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.   risketo va dir

    Bonissim, molt ben explicat, genial.
    M'encanten aquest tipus de post.

    1.    KZKG ^ Gaara va dir

      Moltes gràcies a tu per comentar 🙂

      Aquest post era un deute que tenia des de fa molt, és plaent i agradable a la fin poder saldar-^ _ ^

      Salutacions

      1.    FIXOCONN va dir

        una pregunta aquestes a Cuba?
        ... passa que fa pocs dies usant un AP (Access Point) Linksys vaig posar una Wifi a casa de la meva núvia

        1.    KZKG ^ Gaara va dir

          Sí clar, vaig néixer i visc a Cuba. ¿Per què la pregunta?

        2.    Sam Burgos va dir

          @FIXOCONN: Hola amic i perdona l'offtopic de la pregunta, però com defineixes que aparegui Cinnamon com a entorn d'escriptori en el agent d'? Jo ús Mint 13 amb Cinnamon, però de cap manera assoliment que em aparegui el logo de Cinnamon en el meu agent d'cada vegada que comento en aquest lloc

          Series tan amable de passar-me les dades de user agent si no és molta molèstia? M'agradaria saber aquesta dada per a col·locar-jo també =)

          Et deixo una pàgina perquè puguis revisar-lo i donar-me la informació. Gràcies i admins, perdonin el «trolleo» (si se li pot dir així) de la meva part amb aquesta informació -> http://user-agent-string.info/

          1.    KZKG ^ Gaara va dir

            Afegeix «Cinnamon» (sense les cometes) a qualsevol part de l'UserAgent, et deu sortir llavors el logotip en propers comentaris 🙂

  2.   Bruno Cascio va dir

    Molt bo el post! molt clar 😀

    1.    KZKG ^ Gaara va dir

      Gràcies per llegir-nos i gràcies pel teu comentari 🙂

  3.   vall va dir

    Gràcies !, de veritat em serveix de molt!

  4.   Oscar Granada va dir

    Hola, primer que tot moltes felicitacions pel blog, em sembla genial.
    Una cosa que potser sigui bo esmentar és que l'opció de log amb ULOG no funciona en els sistemes operatius que tinguin ulogd2, per a aquest cas la norma havia de ser:
    suo iptables -A INPUT -p tcp -m tcp -tcp-flags FI, SYN, RST, ACK SYN -j NFLOG

    1.    KZKG ^ Gaara va dir

      Primer de tot, moltes gràcies pel que dius de l'bloc 🙂

      Jo en Arch tinc ulogd v2.0.2-2 instal·lat, i em funciona sense problemes la línia que vaig posar (vaig haver de posar-li un loglevel = 1 en /etc/ulogd.conf, però em treu els logs cap a un altre arxiu sense problemes.

      Tu usant ulogd v2 o superior la línia que vaig deixar et funciona malament?

      Salutacions i gràcies per fer comentaris.

  5.   Citux va dir

    Sempre vaig estar esperant la segona part, recordo quan vaig llegir la primera (va ser la meva iniciació en els tallafocs). Gràcies @ KZKG ^ Gaara, salutacions 🙂

    1.    KZKG ^ Gaara va dir

      Gràcies per llegir-me 😀
      I jeje si, el que s'ha dit ... aquesta post era un deute que tenia fa temps ^ _ ^

  6.   Jose Luis González va dir

    Salutacions. Molt bo el post. Estic intentant configurar les regles de iptables per redireccionar el tràfic de squid a dansguardian i encara no aconsegueixo l'objectiu. Agrairia una mica d'ajuda a l'respecte.

    1.    KZKG ^ Gaara va dir

      iptables per això? No es fa directament amb ACLs a Squid?

  7.   sense nom va dir

    «Tinc moltes regles com ..»
    A això dic jo paranoia, noi
    Una mica més i poses un a colla de Rotwailer 's en cada port obert al teu mòdem / router 🙂

    1.    KZKG ^ Gaara va dir

      HAHAHAHAHAHAHAHAHA em moro del riure amb el dels rottwailers jajajaja

  8.   Iván va dir

    Salutacions amic, passa que necessito ajuda per configurar IPTables de manera que denegui l'accés només per al port 80 quan jo escrigui l'adreça en el navegador de les meves nameservers personalitzats, és a dir quan per exemple escriviu ns1.midominio.com i ns2.midominio. com (els quals són els meus nameservers) IPtables denegui l'accés a l'port 80 de manera que el navegador intenti carregar la pàgina però després d'un temps expiri i mai carregui, passa que ja he intentat amb ordres com aquest:

    iptables -A INPUT -d ns1.midomini.com -p tcp -dport 80 -j DROP
    iptables -A INPUT -d ns2.midomini.com -p tcp -dport 80 -j DROP

    Però l'únic que fa és denegar l'entrada a port 80 en tots els meus dominis (ja que estan compartint la mateixa IP a l'ésser Virtual Host), jo vull que només sigui a la url de les meves nameservers i la IP a la qual apunten els meus nameservers , és a dir que IP tables denegui l'accés a l'port 80 a:

    ns1.midomini.com (Apuntant A) -> 102.887.23.33
    ns2.midomini.com (Apuntant A) -> 102.887.23.34

    i les IPs a les que apunten els nameservers

    102.887.23.33
    102.887.23.34

    Un exemple d'una empresa que té aquest sistema és: Dreamhost
    Els seus nameservers: ns1.dreamhost.com i ns2.dreamhost.com i les IPs a les que apunten no responen a l'ésser tipeadas a la barra d'adreces de navegador

    Moltes gràcies per endavant per l'atenció prestada, m'agradaria molt que em trobaràs a un cop de mà amb això de veritat que la necessito i urgent !!

    Bon Dia !!

    1.    KZKG ^ Gaara va dir

      Hola Iván,

      Contacta'm per email (kzkggaara[at]desdelinux[dot]net) per parlar-ho amb més calma i explicar-te millor, demà sense falta et responc (avui estic de passada)

      El que vols fer és simple, no sé per què les línies que em comentes no et funcionen, haurien, però cal revisar logs i altres coses que per aquí serien massa extenses.

      Salutacions i espero el teu email

  9.   neysonv va dir

    teòricament amb iptables podria evitar que m'envien peticions de desconexió des de programes com aircrack. estic en el correcte ??? bo ja hare proves però si em dius que si em faries molt feliç XDDD

    1.    KZKG ^ Gaara va dir

      En teoria em sembla que sí, ara, no sé com es podria fer, mai ho he fet ... però repeteixo, en teoria, crec que sí es podria.

  10.   Alex va dir

    Després d'aplicar les regles de iptables m'és impossible accedir a carpetes compartides de windows a la xarxa local. ¿Quina regla d'aplicar per solucionar-ho?
    Gràcies.

    1.    KZKG ^ Gaara va dir

      Quines regles d'iptables vas aplicar?
      Aquesta és la 2a part de «iptables per novells», ¿vas llegir la primera? Pregunto això per saber si vas aplicar les regles que estaven en el post anterior

      1.    Alex va dir

        Sí, he llegit dues parts. Per al script em base en una altra entrada que vas publicar sobre d'iniciar regles amb systemd.

        #! / Bin / bash
        # - UTF-8 -

        # Binari d'iptables
        iptables = »/ usr / bin / iptables»

        fet «»

        ## Netejar taules ##
        $ Iptables -F
        $ Iptables -X
        $ Iptables -Z
        #echo »- Fet Flus a iptables» && echo »»

        ## Establint logs amb ULOGD ##
        $ Iptables -A INPUT -p tcp -m tcp -tcp-flags FI, SYN, RST, ACK SYN -j ULOG

        ## Definir política DROP per defecte ##
        $ Iptables -P INPUT DROP
        $ Iptables -P FORWARD DROP
        #echo »- Definida política DROP per default» && echo »»

        ## Permetre tot a localhost ##
        $ Iptables -A INPUT -i ho -j ACCEPT
        $ Iptables -A OUTPUT -o el -j ACCEPT
        #echo »- Permès tot per localhost» && echo »»

        ## Permetre entrar paquets de connexions que jo iniciï ##
        $ Iptables -A INPUT -m state -state ESTABLISHED, RELATED -j ACCEPT
        #echo »- Permesos paquets de connexions iniciades per la meva» && echo »»

        trobo »##############################»
        trobo »## IPTABLES CONFIGURADO OK! ## »
        trobo »##############################»

        He llegit a internet que per samba hauria de tenir les següents regles en el script:

        $ Iptables -A INPUT -p tcp -dport 139 -j ACCEPT
        $ Iptables -A INPUT -p tcp -dport 445 -j ACCEPT
        $ Iptables -A INPUT -p udp -Sport 137 -j ACCEPT
        $ Iptables -A INPUT -p udp -dport 137 -j ACCEPT
        $ Iptables -A INPUT -p udp -dport 138 -j ACCEPT

        No obstant això ni amb elles puc veure grups de treball Windows. : S

      2.    Alex va dir

        Problema solucionat. Modifiqueu els paràmetres workgroup i hosts allow de l'arxiu de configuració de samba.

  11.   otkmanz va dir

    Excel·lent article, simplement genial !!!!
    Acabo de llegir-lo i m'encanta tant de la forma en què ho expliques com el realment útil ús que té iptables, m'agradaria aprendre realment a usar-lo amb més profunditat.
    Una salutació i excel·lent article, espero que publiquis més sobre Iptables! ^^

  12.   LEO va dir

    estimats;

    tinc un proxy amb iptables i unes de les meves xarxes no pot fer ping a http://www.google.cl per tal motiu tinc els ports blokeados ie intentant mil formes de habrir dels ports i no passa res. Si no puc fer ping no puc connectar l'outlook

  13.   Borja va dir

    Enhorabona pel post! Molt bo. Per tinc un dubte. En ocasions la direcció ip que se t'assigna a la xarxa pot canviar (si és cert que podríem assignar una IP a la nostra MAC Addres), però hi ha possibilitat amb Iptables de permetre accessos al nostre servidor via SSH per MAC Address?

    Espero haver-me explicat bé.

    Una salutació i moltes gràcies!

  14.   Fernando Martin Gan va dir

    Hola saps que tenia un servidor linux configurat i després de posar aquestes comandes em bloqueig tot i va perdre accés, vaig poder recuperar gairebé tot però em falten 2 coses. * Ja no puc accedir des d'un navegador de la xarxa pel cname «server» si per ip, 10.10.10.5 i d'altra banda no veig els recursos compartits des del explorer de windows a la xarxa, abans posava \\ server i veia tots els recursos compartits. espere em puguis ajudar, es que és una bestiesa però no ho estic podent resoldre, gràcies

  15.   tau va dir

    Cito textualment:
    '
    Protocol ICMP, icmp = ping. O sigui, no estic permetent SSH ni res semblant, permet només ping (icmp)
    '

    ICMP i PING no són el mateix. El ping és una part de l'protocol ICMP, però no ho és tot. El protocol ICMP (Internet Control Message Protocol), té moltes més utilitats algunes d'elles amb certs perills. I tu estàs acceptant tot el trànsit ICMP. Hauries de restringir només a ping.

    Salutacions!

  16.   ozkr va dir

    tinc qe fer una practica però no comprenc molt sobre iptables em podrian ajudar si us plau ....
    gràcies !!!!!!!