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