Introducció als Tallafoc/Firewall

De wikijoan
La revisió el 18:28, 18 feb 2014 per Joan (discussió | contribucions) (→‎Logs)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Referències

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:

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:

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