Sicurezza base in Linux - units.it Documents/Modulo 4... · 2007. 3. 15. · Sicurezza attiva /...
Transcript of Sicurezza base in Linux - units.it Documents/Modulo 4... · 2007. 3. 15. · Sicurezza attiva /...
Sicurezza base in Linux
26 febbraio 2007 – Romano Trampus – SIB SBA
Premessa
Distribuzione di riferimento: (K)Ubuntu.
TUTTE le nozioni introdotte possono essere trasportate (probabilmente con nessuno o con
minimi adeguamenti) alle altre distribuzioni.
Molti dei concetti sono applicabili a S.O. Diversi da Linux (Unix like o meno).
Le definizioni proposte non hanno pretesa di completezza e precisione.
Sommario
● Breve introduzione sulla sicurezza● Evoluzione della sicurezza● Sicurezza in linux
– Linux desktop– Linux server
Sicurezza
?
Definizioni
La sicurezza è la conoscenza che l'evoluzione di un sistema non produrrà stati indesiderati.
(definizioni non formali tratte da wikipedia.org)
Definizioni
La sicurezza è la conoscenza che l'evoluzione di un sistema non produrrà stati indesiderati.
Il rischio è la misura della mancanza di sicurezza ed è legato al possibile esito del verificarsi di un evento. Esso è funzione della probabilità dell'evento e della
magnitudo del danno conseguente al verificarsi dell'evento.
(definizioni non formali tratte da wikipedia.org)
SicurezzaIn generale la sicurezza non è “falsificabile” (Popper). Possiamo provare con l'osservazione che
si verifica un incidente, ma non possiamo “osservare” che non c'è stato.
La sicurezza non è (non può) essere un obiettivo:la sicurezza è un metodo per raggiungere altri obiettivi.
Sicurezza
● In informatica la sicurezza è il processo per proteggere i dati e le risorse da accessi, uso, diffusione, modificazioni, distruzione non autorizzate.
Information security is the process of protecting data (resources) from unauthorized access, use, disclosure, destruction, modification, or disruption.
Computer security is a field of computer science concerned with the control of risks related to computer use.
rischio
● Rischio = probabilità x danno● Il rischio non si elimina: si riduce● Il rischio che non viene eliminato si chiama
rischio residuo
● Il danno è quantificabile, la probabilità ha una componente soggettiva
Rischi● Obiettivo: identificare i rischi e ridurne le eventuali perdite.● Il processo di gestione del rischio si divide in fasi e attività secondo lo
schema:
GESTIONE RISCHI
VALUTAZIONERISCHI
CONTROLLORISCHI
IDENTIFICAZIONE
ANALISI
ORDINAMENTO IN BASE ALLA PRIORITÀ
PIANIFICAZIONE
APPLICAZIONE DELLE AZIONI DI ATTENUAZIONE
MONITORAGGIO
● Periodicamente si ripete il ciclo. Almeno una volta all'anno.
Attenuazione del rischio
Analisi
● Ridurre il danno● Ridurre la probabilità● Contenere i costi
● L'analisi comprende lo studio legislativo, normativo, ambientale, personale, professionale, delle attività, dei processi, etc.
Tipi di sicurezza
● Le misure prevedono due grandi famiglie: quelle relative alla prevenzione e quelle relative alla protezione. Le misure possono essere attive, passive, strutturali, impiantistiche, amministrative, disciplinari, etc.
● La gestione è la parte che deve mantenere in vita la sicurezza con studi, aggiornamenti, formazione, informazione, manutenzione, verifiche, esercitazioni, piani di sicurezza, adeguamenti, etc
Sicurezza attiva / passiva● Sicurezza passiva
● Per sicurezza passiva normalmente si intendono le tecniche e gli strumenti di tipo difensivo, ossia quel complesso di soluzioni il cui obiettivo è quello di impedire che utenti non autorizzati possano accedere a risorse, sistemi, impianti, informazioni e dati di natura riservata. Il concetto di sicurezza passiva pertanto è molto generale: ad esempio, per l'accesso a locali protetti, l'utilizzo di porte di accesso blindate, congiuntamente all'impiego di sistemi di identificazione personale, sono da considerarsi componenti di sicurezza passiva.
● Sicurezza attiva
● Per sicurezza attiva si intendono, invece, le tecniche e gli strumenti mediante i quali le informazioni ed i dati di natura riservata sono resi intrinsecamente sicuri, proteggendo gli stessi sia dalla possibilità che un utente non autorizzato possa accedervi (confidenzialità), sia dalla possibilità che un utente non autorizzato possa modificarli (integrità).
Legge sulla privacy
Art. 31
Obblighi di sicurezza
1. I dati personali oggetto di trattamento sono custoditi e controllati, anche in relazione alle conoscenze acquisite in base al progresso tecnico, alla natura dei dati e alle specifiche caratteristiche del trattamento, in modo da ridurre al minimo, mediante l'adozione di idonee e preventive misure di sicurezza, i rischi di distruzione o perdita, anche accidentale, dei dati stessi, di accesso non autorizzato o di trattamento non consentito o non conforme alle finalità della raccolta.
Legge sulla privacy
Art. 34
Trattamenti con strumenti elettronici
1. Il trattamento di dati personali effettuato con strumenti elettronici è consentito solo se sono adottate, nei modi previsti dal disciplinare tecnico contenuto nell'allegato B), le seguenti misure minime:
a) autenticazione informatica;
b) adozione di procedure di gestione delle credenziali di autenticazione;
c) utilizzazione di un sistema di autorizzazione;
d) aggiornamento periodico dell'individuazione dell'ambito del trattamento consentito ai singoli incaricati e addetti alla gestione o alla manutenzione degli strumenti elettronici;
Legge sulla privacy
e) protezione degli strumenti elettronici e dei dati rispetto a trattamenti illeciti di dati, ad accessi non consentiti e a determinati programmi informatici;
f) adozione di procedure per la custodia di copie di sicurezza, il ripristino della disponibilità dei dati e dei sistemi;
g) tenuta di un aggiornato documento programmatico sulla sicurezza;
h) adozione di tecniche di cifratura o di codici identificativi per determinati trattamenti di dati idonei a rivelare lo stato di salute o la vita sessuale effettuati da organismi sanitari.
Roadmap
● Installazione● Firewall● Autenticazione su AD● Servizi● Antivirus● Accesso ai file
Non parliamo di...
● Sicurezza fisica● Ridondanza● Backup
● Questi sono elementi che comunque DEVONO essere presi in considerazione PRIMA di installare un server.
Prima
● Presumiamo che PRIMA di installare un server siano stati definiti gli obiettivi e sia stato valutato il rapporto costi / benefici (inclusa manutenzione).
● Principio di necessità.
Installazione
● Ci sono due “filosofie” di installazione:– Installare il minimo indispensabile per il
funzionamento del sistema e aggiungere solo i pacchetti relativi ai servizi che verranno erogati.
– Installare un sistema completo e rimuovere successivamente i pacchetti non necessari
● Per i server si dovrebbe prediligere la prima opzione. Molte distribuzioni producono una versione specifica per i server.
Installazione
● Di norma i seguenti pacchetti / servizi dovrebbero essere disattivati:– Tutti i servizi normalmente attivati in /etc/inetd.conf,
in particolare: telnet, ftp, finger, discard, echo, daytime, ... Meglio disattivare inetd/xinetd.
– Stampanti (cups) se non si devono gestire code di stampa.
– dns e mail server– dhcp server
Rimuovere pacchetti non indispensabili
● Per avere la lista di tutti i pacchetti installati:dpkg --list● Per identificare il pacchetto che ha prodotto il
file chiamato foo si esegua uno dei comandi:dpkg --search nomefile● Per installare un pacchettoapt-get install nome_pacchetto● dselect
Porte in ascolto
● Per ottenere una lista dei servizi attivi in ascolto (TCP and UDP sockets) si può usare il comando:
# netstat -tulpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program nametcp 0 0 *:auth *:*
LISTEN 2328/xinetdtcp 0 0 localhost.localdomain:smtp *:*
LISTEN 2360/sendmail: accetcp 0 0 *:ssh *:*
LISTEN 2317/sshd
Porte in ascolto
● Comando alternativo:# lsof -i -n | egrep 'COMMAND|LISTEN|UDP'COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEsshd 2317 root 3u IPv6 6579 TCP *:ssh (LISTEN)xinetd 2328 root 5u IPv4 6698 TCP *:auth (LISTEN)sendmail 2360 root 3u IPv4 6729 TCP 127.0.0.1:smtp
(LISTEN)
Firewall
● Tutte le distribuzioni di linux implementano un firewall (iptables).
● In generale un firewall sull'host deve essere considerato complementare a un firewall di rete.
● Iptables lavora su tre tabelle: filter, nat, mangle. Ciscuna ha al suo internet diverse catene: INPUT, OUTPUT, FORWARD, .....
● Ciascuna catena ha una POLICY di default DENY/ACCEPT
iptables in breve
● Tabella filter, catene INPUT, OUTPUT, FORWARD
Decisione sulrouting FORWARD
INPUT OUTPUT
Processi locali
iptables in breve
1) Impostare la policy di default:iptables -P INPUT DROP....
2) Svuotare il contenuto delle catene:iptables -F INPUT....
3)Creare nuove catene:iptables -N nome catena
4)Impostare le regole:iptables -A INPUT -p tcp –-dport 80 -d 192.168.1.1/32 -j ACCEPT
Iptables GUI
● Sono disponibili frontend grafici per le iptables. ● firestarter, a GNOME application oriented towards end-users that includes
a wizard useful to quickly setup firewall rules. The application includes a GUI to be able to monitor when a firewall rule blocks traffic
● fwbuilder, an object oriented GUI which includes policy compilers for various firewall platforms including Linux' netfilter, BSD's pf (used in OpenBSD, NetBSD, FreeBSD and MacOS X) as well as router's access-lists. It is similar to enterprise firewall management software. Complete fwbuilder's functionality is also available from the command line.
● shorewall, a firewall configuration tool which provides support for IPsec as well as limited support for traffic shaping as well as the definition of the firewall rules. Configuration is done through a simple set of files that are used to generate the iptables rules
● guarddog, a KDE based firewall configuration package oriented both to novice and advanced users.
Iptables GUI● knetfilter, a KDE GUI to manage firewall and NAT rules for iptables
(alternative/competitor to the guarddog tool although slightly oriented towards advanced users)
● bastille, this hardening applicatio. One of the hardening steps that the administrator can configure is a definition of the allowed and disallowed network traffic that is used to generate a set of firewall rules that the system will execute on startup.
Autenticazione● L'autenticazione consiste nell'identificazione di un utente
tramite credenziali (in genere username / password).● Successivamente al processo di autenticazione, le
operazioni effettuate dall'utente sono tracciate in file di log.
Autenticare su AD
● Si può configurare linux per autenticare gli utenti su AD utilizzando Kerberos + LDAP.
● LDAP è utitlizzato per recuperare le informazioni sugli utenti.
● Kerberos è utilizzato per la fase di autenticazione
1) $ sudo apt-get install libnss-ldap
Autenticare su AD● Indicare l'indirizzo del server AD:
Autenticare su AD● Indicare il base dn per la ricerca degli utenti:
Autenticare su AD● AD è compatibile con LDAP v.3
Autenticare su AD# /etc/libnss-ldap.conf
# Your LDAP server. Must be resolvable without using LDAP.# Multiple hosts may be specified, each separated by a# space. How long nss_ldap takes to failover depends on# whether your LDAP client library supports configurable# network or connect timeouts (see bind_timelimit).host 172.30.46.1
# The distinguished name of the search base.base dc=ds,dc=units,dc=it
# The LDAP version to use (defaults to 3# if supported by client library)ldap_version 3
# RFC 2307 (AD) mappings# <to> <from>nss_map_attribute userPassword sambaPasswordnss_map_attribute gecos namenss_map_attribute uid unixNamenss_map_attribute shadowLastChange pwdLastSetnss_map_objectclass posixGroup grouppam_filter objectclass=Userpam_password crypt
# Disable SASL security layers. This is needed for AD.sasl_secprops maxssf=0
Autenticare su AD# /etc/nsswitch.conf## Example configuration of GNU Name Service Switch
functionality.# If you have the `glibc-doc' and `info' packages
installed, try:# `info libc "Name Service Switch"' for information about
this file.
passwd: files ldapgroup: files ldapshadow: files ldap
Autenticare su AD● Verificare la configurazione:
Autenticare su AD
● Adesso che ci sono le informazioni sugli utenti su può configurare il processo di autenticazione.
● L'autenticazione si basa su Kerberos 5, quindi bisogna installare il modulo PAM kerberos 5
$ sudo apt-get-install heimdal-clients libpam-heimdal
Autenticare su AD
In /etc/krb5.conf[libdefaults] default_realm = DS.UNITS.IT
[realms] DS.UNITS.IT = { kdc = 172.30.46.1:88 }........[domain_realm] .ds.units.it = DS.UNITS.IT ds.units.it = DS.UNITS.IT........
Autenticare su AD## /etc/pam.d/common-auth - authentication settings common to all services## This file is included from other service-specific PAM config files,# and should contain a list of the authentication modules that define# the central authentication scheme for use on the system# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the# traditional Unix authentication mechanisms.#
# prompt user "Password for <principal>: " (warning: no l18n)auth sufficient pam_krb5.so minimum_uid=100auth required pam_unix.so nullok_secure
# use password from pam_unix prompt#auth sufficient pam_unix.so nullok_secure#auth sufficient pam_krb5.so minimum_uid=1000 use_first_pass
Autenticare su AD## /etc/pam.d/common-session - session-related modules common to all services## This file is included from other service-specific PAM config files,# and should contain a list of modules that define tasks to be performed# at the start and end of sessions of *any* kind (both interactive and# non-interactive). The default is pam_unix.#
session required pam_unix.sosession optional pam_foreground.sosession optional pam_krb5.so
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
Autenticare su AD## /etc/pam.d/common-account - authorization settings common to all services## This file is included from other service-specific PAM config files,# and should contain a list of the authorization modules that define# the central access policy for use on the system. The default is to# only deny service to users whose accounts are expired in /etc/shadow.#account required pam_unix.soaccount [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] pam_krb5.so
Autenticare su AD
● Affinché i ticket di Kerberos siano validi è necessario che Linux abbia l'orologio sincronizzato con AD:
$ sudo apt-get install ntpdate
$ sudo ntpdate ntp.units.it
25 Jan 16:22:06 ntpdate[8158]: step time server 82.211.81.145 offset 402569.951826 sec
$ sudo apt-get install ntp-simple
Autenticare su AD
● Infine verifichiamo il funzionamento:$ kinit 5400
[email protected]'s Password:
$ klist
Credentials cache: FILE:/tmp/krb5cc_1000
Principal: [email protected]
Issued Expires Principal
Jan 25 16:23:06 Jul 26 02:23:58 krbtgt/[email protected]
Autenticare applicazioni web
● Per autenticare utenti di applicazioni web su AD non è necessario installare tutto il sistema di autenticazione ma è sufficiente fare il bind dell'utente su LDAP di AD.
Accesso interattivo al sistema
● Il sistema può essere utilizzato accedendo con due modalità:– Accesso all'ambiente grafico.– Accesso ad una console (linea di comando)
● Per i server è preferibile non installare l'ambiente grafico (a meno che non sia un terminal server).
Accesso SSH
● L'accesso alla console dovrebbe avvenire esclusivamente tramite protocollo SSH2.
● Il file di configurazione è /etc/ssh/sshd_config● Su alcune distribuzioni il server ssh è opzionale● E' importante controllare all'installazione alcuni
parametri
Rendere sicuro SSH ListenAddress 192.168.0.1
Imposta il server per ascoltare solo su una determinata interfaccia (nel caso che il sistema ne abbia più di una.
PermitRootLogin no
Blocca l'accesso dell'utente root. Se l'utente deve diventare root deve utilizzare su o sudo. In questo modo la password di root non può essere ottenuta con un bute-force.
Port 666 o ListenAddress 192.168.0.1:666
Cambia la porta di ascolto.
PermitEmptyPasswords no
Non permette l'accesso ad utenti senza password.
Rendere sicuro SSHAllowUsers alex ref me@somewhere
Permette l'accesso solo ad alcuni utenti. E' possibile limitare l'accesso solo da alcuni host.
AllowGroups wheel admin
Permette l'accesso solo agli utenti di determinati gruppi.AllowGroups e AllowUsers hanno direttive equivalenti per proibire l'accesso ad utenti o gruppi di utenti:
DenyUsers user
DenyGroups user
Rendere sicuro SSHPasswordAuthentication yes
Permette l'accesso con autenticazione basata su password. L'alternativa è l'accesso basato su credenziali che devono essere salvate in
~/.ssh/authorized_keys
E' opportuno disabilitare le forme di autenticazione che non servono, per esempio:RhostsRSAAuthenticationHostbasedAuthenticationKerberosAuthenticationRhostsAuthentication
Rendere sicuro SSHProtocol 2
Disabilita il protocollo versione 1, che possiede problemi di sicurezza per come è disegnato.
Banner /etc/some_file
Specifica un banner che verrà visualizzato dopo l'accesso. In alcuni paesi aspetti legali impongono che l'utente sia informato sulla possibilità che le sue azioni siano monitorate.
E' possibile controllare l'accesso tramite ssh anche configurando PAM, utilizzando pam_listfile oppure pam_wheel. Ad esempio si possono autorizzare all'accesso solo gli utenti elencati in /etc/loginusers aggiungendo in /etc/pam.d/ssh:
auth required pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers
Accesso ai file
● apt-get install aclGranting an additional user read access
setfacl -m u:lisa:r file
Revoking write access from all groups and all named users (using the effective rights mask)
setfacl -m m::rx file
Removing a named group entry from a file's ACL
setfacl -x g:staff file
Filtrare i servizi
● Utilizzando il firewall● Utilizzando xinetdservice nntp { socket_type = stream protocol = tcp wait = no user = news group = news server = /usr/bin/env server_args = POSTING_OK=1
PATH=/usr/sbin/:/usr/bin:/sbin/:/bin +/usr/sbin/snntpd logger -p news.info bind = 127.0.0.1 }
Limitare l'ambiente grafico
● Se non è necessario connettersi dall'esterno all'ambiente grafico:
$ startx -- -nolisten tcp
● Se si usa Xfree 3.3.6:#!/bin/sh exec /usr/bin/X11/X -dpi 100 -nolisten tcp
● Se si usa XDM bisogna impostare in /etc/X11/xdm/Xservers
:0 local /usr/bin/X11/X vt7 -dpi 100 -nolisten tcp
● Se si usa Gdm bisogna impostare in /etc/gdm/gdm.conf
DisallowTCP=true
Display managerIf you only want to have a display manager installed for local usage (having a
nice graphical login, that is), make sure the XDMCP (X Display Manager Control Protocol) stuff is disabled. In XDM you can do this with this line in /etc/X11/xdm/xdm-config:
DisplayManager.requestPort: 0
For GDM there should be in your gdm.conf:
[xdmcp]
Enable=false
Normally, all display managers are configured not to start XDMCP
ApacheYou can limit access to the Apache server if you only want to use it internally (for testing
purposes, to access the doc-central archive, etc.) and do not want outsiders to access it. To do this use the Listen or BindAddress directives in /etc/apache/http.conf.
Using Listen:
Listen 127.0.0.1:80
Using BindAddress:
BindAddress 127.0.0.1
Then restart apache with /etc/init.d/apache restart and you will see that it is only listening on the loopback interface.
Proteggere la reteBy entering /sbin/sysctl -A you can see what you can configure and what the options are, and it can be modified running /sbin/sysctl -w variable=value (see sysctl(8)). For example:
net/ipv4/icmp_echo_ignore_broadcasts = 1
This is a Windows emulator because it acts like Windows on broadcast ping if this option is set to 1. That is, ICMP echo requests sent to the broadcast address will be ignored. Otherwise, it does nothing.
If you want to prevent you system from answering ICMP echo requests, just enable this configuration option:
net/ipv4/icmp_echo_ignore_all = 1
To log packets with impossible addresses (due to wrong routes) on your network use:
/proc/sys/net/ipv4/conf/all/log_martians = 1
For more information on what things can be done with /proc/sys/net/ipv4/* read /usr/src/linux/Documentation/filesystems/proc.txt. All the options are described thoroughly under /usr/src/linux/Documentation/networking/ip-sysctl.txt [34].
Proteggere la reteThis option is a double-edged sword. On the one hand it protects your system against syn packet flooding; on the other hand it violates defined standards (RFCs). (/etc/sysctl.conf)
net/ipv4/tcp_syncookies = 1
If you want to change this option each time the kernel is working you need to change it in /etc/network/options by setting syncookies=yes. This will take effect when ever /etc/init.d/networking is run (which is typically done at boot time) while the following will have a one-time effect until the reboot:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
This option will only be available if the kernel is compiled with the CONFIG_SYNCOOKIES. All Debian kernels are compiled with this option builtin but you can verify it running:
$ sysctl -A |grep syncookies net/ipv4/tcp_syncookies = 1
Antivirus
● Anche su Linux si possono installare antivirus.● Ad esempio Sophos antivirus.● A differenza di alcuni anni fa, gli antivirus su
linux fanno la scansione all'accesso dei file come su windows.
Tratto da: Andreasson(2001)
Sintassi● Iptable [-t table] command action● Se [-t table] non è specificata si applica la tabella filter● I comandi possono essere:
– A chain aggiunge una regola in coda alla chainiptables –A INPUT –p icmp –j DROP
– D chain cancella una regola dalla chainiptables –D INPUT –p icmp –j DROPiptables –D INPUT 1
– R chain sostituisce una regola alla chainiptables –R INPUT 1 –s 192.168.0.0/16 –j DROP
– I chain inserisce nel punto specificato una regolaiptables –I INPUT 1 –s 192.168.1.0/24 –j ACCEPT
– L chain visualizza la catena (-n per non risolvere i nomi)iptables –t nat –L –n
– F chain cancella le regole da una catenaiptables –F INPUT
– Z chain azzera i contatori di una catena
Sintassi– N chain_name crea una nuova catena
iptables –N tcp_packet_rule– X chain_name cancella una catena
iptbales –X tcp_packet_rule– P chain imposta le policy di default per una catena
iptables –P INPUT DROP– E chain rinomina una catena
iptables –E tcp_packet_rule tcp_packets
● Le policy di default possono essere solo ACCEPT o DROP. REJECT è un modulo che deve essere caricato e quindi non può essere una policy per una catena.
● Possono essere cancellate solo le catene definite dall’utente.● Per cancellare una catena questa deve essere vuota.● Quando si specifica come azione una catena definita dall’utente questa
deve essere prima creata.
Catene● Una catena definita dall’utente può essere indicata come azione (-j) per
una regola
● Il match con regole che delegano a un’altra catena una serie di controlli non sono definitive.
regolaregolaregola
regolaregola
regola
INPUT
regola
regolaregolaregola
tcp_packet_rule
Matches
● A ogni tipo di regola sono associate delle opzioni specifiche.
● Le opzioni possono essere implicite o esplicite. Se sono esplicite richiedono l’indicazione del modulo che le supporta.
● Le opzioni implicite che vengono riconosciute sono quelle associate ai principali protocolli (tcp, udp, icmp)
Opzioni per –p tcp● --sport: indica la porta sorgente della connessione● --dport: indica la porta di destinazione della connessione● --tcp-flags gruppo flag: indica quale flag deve essere
impostato tra un gruppo di flag indicatoiptable –A INPUT –p tcp –tcp-flags SYN,ACK,FIN SYN –j DROP(rifiuta i tentativi di connessione)
● --syn: shortcut per –tcp-flags SYN,ACK,FIN SYN● --tcp-option #: confronta il campo option del pacchetto
Opzioni per –p udp
● --sport: analogo alla stessa opzione per il tcp● --dport: analogo alla stessa opazione per il tcp
Opzioni per –p icmp
● --icmp-type #: confronta il tipo di pacchetto icmpiptables –A –p icmp –icmp-type 8 –j DROP
● Per sapere i tipi di pacchetti icmp si può dare il comandoiptables –protocol icmp -help
Negazioni
● Tutti i parametri delle regole (sia di quelle implicite che di quelle esplicite) possono essere negati con il !
iptables –A –p tcp –s ! 192.168.0.0/24 –j ACCEPTiptables –A –p tcp ! –syn –j ACCEPT
Regole esplicite (moduli)
● Per usarli è necessario che siano anch’essi compilati nel kernel o che siano disponibili per il caricamento dinamico
● Per verificare se sono disponibili uso il comando modprobe:modprobe ipt_LOGmodprobe ipt_MASQUERADEmodprobe ipt_REJECT
modprobe ip_conntrack_ftpmodprobe ip_conntrack_irc
Regole esplicite: MAC match
● -mac-source: confronta il MAC del pacchetto che deve essere espresso nella forma xx:xx:xx:xx:xx:xx
● Si applica solo alle tabelle di PREROUTING, FORWARD e INPUT
iptables –A INPUT –mac-source 00:0a:43:bf:ee:12 –i eth0 –j ACCEPT
Regole esplicite: limit
● --limit: specifica la quantità massima di pacchetti su cui operare la regole in n/t dove t può essere second, minute, hour, dayiptables –A INPUT –p tcp -–syn –m limit -–limit 5/minute –j ACCEPT(accetta solo 5 connessioni al minuto)
● --limit-burst: specifica il numero massimo di connessioni accettate in una unità di tempoiptables –A INPUT –p tcp -–syn –m limit -–limit-burst 5 –j ACCEPT
Regole esplicite: multiport● Le opzioni –sport e –dport implicite nei protocolli tcp e udp consentono di
indicare, oltre all’indicazione di una singola porta, anche intervalliiptables –A INPUT –p tcp –-sport 20:25 –j ACCEPT
● Se invece voglio specificare un elenco di porte devo usare il modulo multiport:iptables –A INPUT –p tcp –m multiport -–source-port 20,21,22,80,8080 –j ACCEPTiptables –A INPUT –p tcp –m multiport –-destination-port 80,8080 –j ACCEPTiptables –A INPUT –p udp –m multiport -–port 53 –j ACCEPT
● Con l’opzione –-port il match viene fatto sia sulla porta sorgente che sulla porta destinazione
● E’ possibile specificare al massimo 15 porte come opzione
Regole esplicite: state● Il modulo state tiene traccia dello stato delle connessioni.
Queste possono assumere i valori NEW, ESTABLISHED, RELATED, INVALID.
● E’ importante notare che per definire NEW lo stato di una connessione il modulo NON si basa sui flag dei pacchetti (SYN)
iptables –A INPUT –p tcp –-syn –m state -–state NEW –j ACCEPTiptables –A INPUT –p tcp –m state -–state ESTABLISHED –j ACCEPT
● Con il modulo ip_conntrack_ftp è possibile accettare le connessioni relative alla connessione DATI
Strategie nello scrivere le regole
● Raggrupparle in catene semplici, da richiamare nelle catene di default
● Vantaggi:– si evita di riscrivere le stesse regole in catene
diverse– si ottimizza il parsing delle catene da parte del
kernel
NAT
● SNAT: quando viene modificato l’indirizzo sorgente del primo pacchetto
● DNAT: quando viene modificato l’indirizzo di destinazione del primo pacchetto
● Le catene vengono ispezionate solo per il primo pacchetto. Poi sono i moduli di connection tracking si occupano di applicare le modifiche ai pacchetti successivi.
● Il nat avviene nel PREROUTING (DNAT) e nel POSTROUTING (SNAT)
SNAT
● si può usare l’opzione –o interface● esempiiptables –nat –A POSTROUTING –s 10.0.0.2 –o eth0 –j SNAT -–to 140.105.9.1-140.105.9.10iptables –nat –A POSTROUTING –s 10.0.0.2 –o eth0 –j SNAT –-to 192.168.176.1:1-1023
DNAT
● si può usare l’opzione –i interface● esempi
iptables –t nat –A PREROUTING –p tcp -–dport 80 –i eth2 –j DNAT –-to 140.105.48.16:8080