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 casa nostra, el nostre firewall amb la porta de la casa, així com altres exemples vaig explicar de forma amena, sense tants tecnicismes ni conceptes complicats què és un firewall, què és iptables i com començar a fer-lo servir i configurar-ho. Aquesta és la continuació, la 2a 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.
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
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ànsit entrant (tcp) pel port 80. Com veieu, no especifico des de quins IPs o xarxa sí que permeto l'accés, en no especificar un rang d'IP a permetre, iptables assumeix que vull permetre-li l'accés a tots els rangs d'IPs existents, és a dir, a tothom
Altres combinacions:
Tinc moltes altres regles com són, per exemple, acceptar ping per a IPs de la LAN de casa meva (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 a dalt… al meu portàtil com a tal no faig servir 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