Introducció als Tallafoc/Firewall
Contingut
Referències
- https://help.ubuntu.com/12.04/serverguide/C/firewall.html
- http://es.wikipedia.org/wiki/Cortafuegos_(inform%C3%A1tica)
Firewalls
Introducció
El kernel de Linux inclou el subsistema Netfilter, que s'utilitza per manipular o decidir el destí del tràfic de xarxa que arriba al nostre servidor. Totes les solucions de tallafocs a Linux utilitzen aquest sistema per a filtratge de paquets.
El sistema de filtratge de paquets del nucli seria de poca utilitat per als administradors sense una interfície d'usuari que faciliti la feina i ajudi a la gestió. Aquest és el propòsit de les iptables (que veurem a la següent pràctica). Quan un paquet arriba al servidor, el subsistema de Netfilter se'n fa propietari per tal de manipular-lo, acceptar-lo o rebutjar-lo, basant-se en unes regles que el sistema iptables li proporciona. Així doncs, les iptables és tot allò que necessites per gestionar el teu firewall. Ara bé, no és la manera més fàcil de treballar, així que hi ha disponibles múltiples front-ends per tal de simplificar la tasca. Nosaltres utilitzarem ufw.
Estudiarem les iptables en la pràctica següent, però en aquesta pràctica més val estudiar les regles de filtratge amb un sistema més senzill.
ufw - Uncomplicated Firewall
ufw és l'eina per defecte de configuració del firewall en sistemes Ubuntu. Es va desenvolupar amb la idea de fer fàcil la configuració de les iptables. ufw proporciona una manera amigable de crer un servidor firewall IPv4 o IPv6.
D'entrada, ufw està deshabilitat. Com es comenta en la man page:
ufw is not intended to provide complete firewall functionality via its command interface, but instead provides an easy way to add or remove simple rules. It is currently mainly used for host-based firewalls.
$ man ufw NAME ufw - program for managing a netfilter firewall DESCRIPTION This program is for managing a Linux firewall and aims to provide an easy to use interface for the user. ...
$ sudo ufw enable Firewall is active and enabled on system startup
(no cal reiniciar). En activar ufw s'activen les regles predefinides. Per exemple. El servidor SSH i Apache està capat (nota: això és perquè no hem reiniciat. Si reiniciem, quan s'activen els serveis SSH i Apache s'executen uns scripts-perfils que habiliten els ports que utilitzen, com s'explica més avall).
Suposarem d'ara endavant que el servidor és la IP 192.168.1.130 (l'alumne, en el seu ordinador, tindrà una altra IP en el rang 192.168.10.XXX). Assegurem-nos de què tenim el servidor SSH arrencat:
$ ps aux | grep ssh root 685 0.0 0.2 5552 2112 ? Ss 11:39 0:00 /usr/sbin/sshd -D
i intentem connectar-nos des d'una altra màquina:
$ ssh joan@192.168.1.130 ... connection timed out
(quan de fet, en una pràctica anterior, ens connectàvem sense problemes). Per tant, hem de permetre accedir al port 22. En el servidor:
$ sudo ufw allow 22 Regla afegida
i en la màquina de prova:
$ ssh joan@192.168.1.130 password: joan@servidor$ exit
El mateix podem dir pel port 80, que està capat. Des de l'ordinador de prova:
- http://192.168.1.130/iaw/ -> no es connecta
i ara permetem la regla amb fent-ho d'una altra forma (afegim una regla amb un format numerat. Afegim la regla #1)
$ sudo ufw insert 1 allow 80 Rule inserted
Des de l'ordinador de prova ara ja funciona:
- http://192.168.1.130/iaw/ -> ja es connecta
Per tornar a capar els ports. Tanquem el port:
$ sudo ufw deny 22 Regla actualitzada
o bé eliminem una regla:
$ sudo ufw delete 1 deny 80 Deleting: allow 80 Proceed with operation (y|n)? y Regla esborrada
També és possible permetre accés des de màquines o xarxes concretes a un port. En aquest exemple permetes l'accés SSH des de la màquina 192.168.1.128 (la màquina de prova) a qualsevol IP del servidor:
$ sudo ufw allow proto tcp from 192.168.1.128 to any port 22 Regla afegida
en la màquina de prova:
$ ssh joan@192.168.1.130 password: joan@servidor$ exit
Si no funciona, és que hi ha alguna regla que la contradiu (mirar $ sudo ufw status)
$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing) New profiles: skip A Acció Des de - ----- ------ 22/tcp ALLOW IN 192.168.1.128 ...
Podem deshabilitar ufw:
$ sudo ufw disable
Mirar el status (resum de regles actives):
$ sudo ufw status
Mirar el status amb més verbositat:
$ sudo ufw status verbose
i mirar el format numerat:
$ sudo ufw status numbered
Si el port que vols obrir o tancar està definit a /etc/services, pots utilitzar el nom del port en comptes del número (ex, reemplaçar 22 per ssh)
Més exemples:
no permetre navegar per Internet des de la meva màquina:
# ufw deny out 80 # ufw status verbose A Acció Des de - ----- ------ ... 80 DENY OUT Anywhere 80 DENY OUT Anywhere (v6)
No puc connectar-me a youtube.com
# ufw delete deny out 80 Regla esborrada Regla esborrada (v6)
ja puc tornar a navegar.
Integració de ufw amb les Aplicacions
Quan instales Apache, allò normal és que la mateixa instal.lació de l'Apache s'encarregui d'obrir el port 80. Podem veure quines aplicacions tenim que han modificat les regles del firewall:
$ sudo ufw app list Available applications: Apache Apache Full Apache Secure CUPS OpenSSH
Els perfils es guarden a /etc/ufw/applications.d, i es pot editar manualment si fos necessari. Per ex,
$ ls /etc/ufw/applications.d apache2.2-common cups openssh-server $ sudo joe /etc/ufw/applications.d/apache2.2-common title=Web Server description=Apache v2 is the next generation of the omnipresent Apache web serv ports=80/tcp [Apache Secure] title=Web Server (HTTPS) description=Apache v2 is the next generation of the omnipresent Apache web serv ports=443/tcp [Apache Full] title=Web Server (HTTP,HTTPS) description=Apache v2 is the next generation of the omnipresent Apache web serv ports=80,443/tcp
Similar a permetre el tràfic cap a un port, també podem habilitar un perfil d'aplicació fent (per ex, habilitar Samba):
$ sudo ufw allow Samba o bé $ ufw allow from 192.168.0.0/24 to any app Samba
no cal especificar el protocol o el port doncs aquesta informació ja es guarda en el Perfil.
Per veure els detalls sobre quins ports, protocols, etc estan definits per a una aplicació: (per ex, fiquem Apache perquè el perfil Samba no existeix en la màquina del professor)
$ sudo ufw app info Apache Profile: Apache Title: Web Server Description: Apache v2 is the next generation of the omnipresent Apache web server. Port: 80/tcp
Per fer un reset i posar el firewall a les opcions per defecte que hi ha després de la instal.lació:
$ sudo ufw reset Resetting all rules to installed defaults. Proceed with operation (y|n)? y Backing up 'user.rules' to '/lib/ufw/user.rules.20120130_133812' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20120130_133812' Backing up 'user6.rules' to '/lib/ufw/user6.rules.20120130_133812' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20120130_133812' Backing up 'after.rules' to '/etc/ufw/after.rules.20120130_133812' Backing up 'before.rules' to '/etc/ufw/before.rules.20120130_133812' $ sudo ufw enable Firewall is active and enabled on system startup joan@joan-laptop:~$ sudo ufw status Status: active
Ara ja han desaparegut totes les regles que teníem
IP masquerading
El professor explicarà aquesta part
Logs
Els logs del Firewall són essencials per reconèixer atacs, identificar problemes amb les regles del tallafocs, i notificar activitat inusual a la xarxa. Per tal de què els logs siguin generats s'ha d'incloure regles de logging, i aquestes regles han d'anar abans de les regles que decideixen el destí dels paquets, és a dir, ACCEPT, DROP, or REJECT).
$ sudo ufw logging on Logging enabled
però millor:
$ sudo ufw logging high Logging enabled
doncs logging on habilita els logs al nivell low i això no ens serveis.
Un request en el port 80 des de la màquina local generarà en el registre dmesg una entrada similar a:
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
Aquest log també apareixerà a /var/log/syslog, i /var/log/ufw.log. Aquest comportament es pot modificar editant el fitxer /etc/syslog.conf o bé instal.lant i configurant ulogd i utilitzant el target ULOG en comtpes de LOG. El dimoni ulogd és un servei que escolta les instruccions de logging del kernel amb destí als tallafocs, i que pot fer log a un fitxer específic o bé a bases de dades PostgreSQL o Mysql. Els logs de firewall es poden interpretar més fàcilment amb eines d'anàlisi de logs com ara fwanalog, fwlogwatch o lire.
Ex: hem volgut connectar-nos a http://192.168.1.130/iaw des de 192.168.1.128, i el port 80 està capat. Obtenim:
$ dmesg ... [ 6043.437709] [UFW BLOCK] IN=eth1 OUT= MAC=00:13:ce:82:8b:b0:c4:46:19:6e:dc:4e:08:00 SRC=192.168.1.128 DST=192.168.1.130 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44302 DF PROTO=TCP SPT=56573 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 ...
Altres eines
Firewalls gràfics:
- gufw: és el front-end gràfic de ufw
- Firestarter
- fwbuilder
Eines CLI amb fitxers de configuració textual:
- Shorewall
- ipkungfu
- fireflier
$ sudo apt-get install gufw $ gufw
Tasques a realitzar
L'objectiu és provar totes les regles que s'han provat i comentat a classe. El millor és treballar per parelles: una màquina té diferents serveis (ssh i Apache com a mínim, però també https, telnet, mysql,... en definitiva serveis que hem estat utilitzant a classe; i l'altra màquina farà de prova). Si les IP's estan en la subxarxa 192.168.10.X no hi ha d'haver cap problema extern a l'aula
Faràs les diferents proves que s'han fet i comentat a classe. Instal.laràs gufw i veuràs com de forma gràfica i senzilla també podem fer les mateixes accions.
En la propera pràctica treballarem directament amb iptables
Entrega
Recorda la normativa per entregar les pràctiques al Moodle: ASIX-M11-SAD#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Moodle.
Entregaràs al Moodle les captures de pantalla necessàries i suficients per demostrar la realització de la pràctica, així com el fitxer LLEGEIX-ME.txt amb les teves notes.
creat per Joan Quintana Compte, gener 2012