it-swarm.it

Suggerimenti per una configurazione sicura di iptables per difendersi dagli attacchi. (dalla parte del cliente!)

Esempi propri:

###############
# KERNEL PARAMETER CONFIGURATION

# PREVENT YOU SYSTEM FROM ANSWERING ICMP ECHO REQUESTS
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward

###############
# INPUT

# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j DROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j DROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

Possiamo raccogliere più idee relative a iptables per proteggere i clienti dagli attacchi? Ad es .: regole di tipo "difendi dagli attacchi" di un PC desktop Ubuntu 11.04 ~.

Grazie!

p .: ovviamente:

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

p.s.2: sia su IPv4 che su IPv6!

p.s.3: Non ho bisogno di regole come: consenti solo UDP e TCP sulla porta 53 in uscita, voglio solo regole di "difesa", ad es .: portcanning, attacchi, ecc.

p.s.4: il PC si trova dietro un router/NAT o è collegato "direttamente a Internet".

16
LanceBaynes

Mi rendo conto che ci sono opinioni diverse, ma un atteggiamento importante delle persone che conoscono davvero il networking e la sicurezza è che la maggior parte di queste regole iptables/sysctl sono ridondanti, se non dannose per te e la rete. Alcuni ti criticano in modo aggressivo per aver infranto il comportamento standard senza motivo. Qualche esempio:

  • Il comportamento standard TCP/IP è REJECT in modo che il peer ottenga qualche suggerimento su ciò che sta accadendo. Forse qualcuno ha appena digitato un URL sbagliato o il tuo amministratore sta contando gli host o qualcuno vuole connettersi al tuo server di gioco ma ha digitato la porta sbagliata. Con DROP ottengono solo timeout oscuri e fastidiosi.

  • Non è necessario eliminare pacchetti non validi o non validi, tutti questi attacchi risalgono a un decennio fa. Gli sviluppatori del kernel Linux sono molto più aggiornati di te riguardo a quali tipi di pacchetti sono validi e quali no. "Che dire dei futuri difetti", alcuni potrebbero discutere. Bene, come fai a sapere che il difetto futuro sarà nel gestore TCP e non nell'iptables TCP parser?

  • La maggior parte delle impostazioni di sysctl sono predefinite. Se non lo sono, di solito c'è un motivo. Ad esempio, perché disabilitare l'invio di reindirizzamenti? Trovo molto utile essere informato da un peer che il mio percorso non è corretto, anche se non reagirei mai automaticamente ("accept_redirects", default = 0).

  • Con i tuoi log_martian e altre regole di registrazione spero che tu abbia anche una quota su/var/log, o sarà molto divertente riempire il tuo disco da remoto, di solito uccidendo i tuoi servizi/app. Inoltre, è necessario utilizzare un limite di velocità per la registrazione o qualcuno potrebbe riempire la quota per impedire di vedere i tentativi di bruteforce della password SSH in auth.log o altre cose. Stai davvero leggendo quei registri su un desktop? Raccomando logcheck.

  • Sembra che blocchi ICMP. Oltre al citato problema DHCP, ciò impedisce anche il rilevamento di PMTU. Senza PMTUD, si otterrà un comportamento strano quando si utilizza il sistema in luoghi con connessione DSL o altre impostazioni di rete. Alcuni pacchetti verranno semplicemente eliminati e nessuno ti dice perché.

  • Il filtraggio dei pacchetti in uscita è piuttosto oscuro. Non ti fidi di te stesso? In genere non è necessario eseguire programmi di cui non ci si può fidare. I sistemi operativi delle materie prime non sono per lo più in grado di isolare questi programmi da intercettazioni o persino manipolare i dati di altri programmi (ad esempio, attacchi di temporizzazione della cache)

  • Sono richiesti NUOVI pacchetti per avere SYN. Questo si interromperà se a TCP viene continuata dopo che il rispettivo stato in iptables è già scaduto. Non sono sicuro di quali siano i timeout predefiniti, ma alcuni tipi di netfilter lo hanno avvertito.

Quindi, quando un desktop dovrebbe avere un firewall?

  • Se c'è un attacco specifico nelle notizie a cui il tuo attuale sistema operativo o server sono vulnerabili e una delle soluzioni rapide consigliate è una regola firewall.

  • È necessario eseguire determinati servizi che non consentono la configurazione sicura. La maggior parte lo fa e il resto è meglio sostituito da alternative sicure.

  • Hai reti più complesse con diverse macchine virtuali e/o interfacce sul desktop.

Il primo e principale strumento per la sicurezza della tua rete è l'aggiornamento del sistema. In secondo luogo, ci sono netstat e nmap, che dovresti usare per trovare e confermare quali servizi stai eseguendo. Quindi disabilita quelli che non ti servono o limitali a 127.0.0.1.

Bonus se leggi così lontano: i pacchetti sono STABILITI, CORRELATI o NUOVI, tutto il resto che lasci cadere. Rilascia anche NUOVO a meno che non sia impostato solo SYN. Dal momento che ESTABLISHED, RELATED sembra controllare i flag, questo rende tutte le regole --tcp-flags e anche la regola -f ridondanti. Lo stesso vale per OUTPUT, ma dal momento che nessun pacchetto viene ACCETTATO per OUTPUT, probabilmente non importa.

22
pepe

Starei attento nel rendere queste parti dello stesso set di regole per i dispositivi all'interno di una rete affidabile e quelli in una DMZ. Usando le regole che hai definito lì, non risponderai a un server DHCP che chiede (eco ICMP) se il tuo IP è in uso. Ciò potrebbe comportare una situazione di indirizzo duplicato.

Vorrei creare due diversi insiemi di regole da applicare a ogni scenario, qualcosa di simile a quanto elencato sopra è una buona base per una macchina DMZ, ma crea alcune sfide su una tipica LAN.

Inoltre, consiglierei sicuramente di aggiungere la registrazione ai marziani, i drop in uscita, i collegamenti inbound drop ecc. Questo può essere cruciale per la risoluzione dei problemi e può essere un dato più utile per il tuo SIEM.

6
Ori

Per un PC client, collegato direttamente a Internet tramite ppp, il seguente set di regole è un buon inizio:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. Permette tutto sull'interfaccia locale interna.
  2. Consente qualsiasi pacchetto che sia una risposta per un pacchetto inviato. Ciò include i pacchetti all'interno di una TCP, risposte ai pacchetti UDP come piccole query DNS. Per il protocollo FTP non crittografato vecchio stile, include la connessione dati, supponendo che ip_conntrack_ftp sia caricato
  3. Rifiuta tutti i tentativi di aprire una connessione tcp dall'esterno
  4. Rifiuta tutti i pacchetti udp iniziali (senza risposta).

In alternativa puoi usare -j DROP nelle ultime due regole. Per una discussione su questo argomento vedere Rifiutare i pacchetti IP con un errore ICMP o semplicemente rilasciarli?

5

Quindi per approfondire la tua domanda ecco cosa ho eseguito (e userò i tuoi esempi con le note, dal momento che i miei sono praticamente privi di commenti che sono stati portati su Net Fliter da quando IPCHAINS è morto tutti quegli anni fa.)

Questo potrebbe funzionare per un sistema interno, ma spesso passerai il tempo a configurare i tuoi iptables per nuove applicazioni non prese in considerazione. Ho anche rimosso la mia regola SSH, ma questa è una standard piuttosto che vedrai (e in molte configurazioni l'unica che vedrai per consentire l'input).

###############
# VARIABLE DEFINITIONS
IPTABLES=/sbin/iptables

#Your DHCP Server for input of ICMP packets
DHCPSERVER=127.0.0.1
PUBIF=eth0

# KERNEL PARAMETER CONFIGURATION
#
# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#
# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#
# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#
# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#
# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward
###############
$IPTABLES -F
###############
# LOGDROPPER
$IPTABLES -N LOGNDROP > /dev/null 2> /dev/null 
$IPTABLES -F LOGNDROP 
$IPTABLES -A LOGNDROP -j LOG --log-prefix "LOGNDROP: " 
$IPTABLES -A LOGNDROP -j DROP

###############
# LO allowance
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

###############
# Only bring what you need to survive
$IPTABLES -A INPUT -p icmp -s $DHCPSERVER -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p tcp --sport 68 --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p udp --sport 68 --dport 67 -j ACCEPT
###############
# INPUT
#
# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j LOGNDROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOGNDROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j LOGNDROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j LOGNDROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j LOGNDROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -j LOGNDROP
$IPTABLES -A FORWARD -j LOGNDROP

Se la tua rete è rumorosa o hai molte cose in corso, questo riempirà rapidamente il tuo volume di registro. Ma sono paranoico e busto anche le braciole delle persone se creano config inutilmente rumorose.

4
Ori