Sicurezza linux

Transcript

Sicurezza linux
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)
Sicurezza
In 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:
IDENTIFICAZIONE
VALUTAZIONE
RISCHI
ANALISI
ORDINAMENTO IN BASE
ALLA PRIORITÀ
GESTIONE RISCHI
PIANIFICAZIONE
CONTROLLO
RISCHI
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 pacchetto
apt-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 -tulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address
State
PID/Program name
tcp
0
0 *:auth
LISTEN
2328/xinetd
tcp
0
0 localhost.localdomain:smtp
LISTEN
2360/sendmail: acce
tcp
0
0 *:ssh
LISTEN
2317/sshd
Foreign Address
*:*
*:*
*:*
Porte in ascolto
●
Comando alternativo:
# lsof -i -n |
COMMAND
PID
sshd
2317
xinetd
2328
sendmail 2360
(LISTEN)
egrep 'COMMAND|LISTEN|UDP'
USER
FD
TYPE DEVICE SIZE NODE NAME
root
3u IPv6
6579
TCP *:ssh (LISTEN)
root
5u IPv4
6698
TCP *:auth (LISTEN)
root
3u IPv4
6729
TCP 127.0.0.1:smtp
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 sul
routing
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 accesslists. 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 sambaPassword
nss_map_attribute gecos name
nss_map_attribute uid unixName
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
pam_filter objectclass=User
pam_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:
group:
shadow:
files ldap
files ldap
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=100
auth
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
session optional
session optional
pam_unix.so
pam_foreground.so
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.so
account [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
Jan 25 16:23:06 Jul 26 02:23:58
krbtgt/[email protected]
Principal
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 SSH
AllowUsers 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 SSH
PasswordAuthentication 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:
RhostsRSAAuthentication
HostbasedAuthentication
KerberosAuthentication
RhostsAuthentication
Rendere sicuro SSH
Protocol 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 acl
Granting 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 xinetd
service 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 manager
If 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
Apache
You 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 rete
By 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 rete
This 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 chain
iptables –A INPUT –p icmp –j DROP
D chain cancella una regola dalla chain
iptables –D INPUT –p icmp –j DROP
iptables –D INPUT 1
R chain sostituisce una regola alla chain
iptables –R INPUT 1 –s 192.168.0.0/16 –j DROP
I chain inserisce nel punto specificato una regola
iptables –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 catena
iptables –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
INPUT
regola
regola
regola
regola
regola
regola
●
tcp_packet_rule
regola
regola
regola
regola
Il match con regole che delegano a un’altra catena una serie di controlli
non sono definitive.
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 indicato
iptable –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
icmp
iptables –A –p icmp –icmp-type 8 –j DROP
●
Per sapere i tipi di pacchetti icmp si può dare il
comando
iptables –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 ACCEPT
iptables –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_LOG
modprobe ipt_MASQUERADE
modprobe ipt_REJECT
modprobe ip_conntrack_ftp
modprobe 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, day
iptables –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 tempo
iptables –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 intervalli
iptables –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 ACCEPT
iptables –A INPUT –p tcp –m multiport –-destinationport 80,8080 –j ACCEPT
iptables –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 ACCEPT
iptables –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
esempi
iptables –nat –A POSTROUTING –s
10.0.0.2 –o eth0 –j SNAT -–to
140.105.9.1-140.105.9.10
iptables –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