View my profile on LinkedIn

Protezione di un sistema linux agendo su parametri di sistema

Della serie “tutto fà brodo”, qui trovate una lista di impostazioni da fare sulle regole di firewall di iptables e su alcuni impostazioni di sistema che possono rendere la vita un pochino più difficile agli “acher” che invece di andare a fare cose più divertenti si divertono con i port scanning ed altre amenità.

.

Fatene buon uso, tanto e’ gratis :-)

.

#
#—————————————————————
# protezione dai syn-flood
#—————————————————————
iptables -A FORWARD -p tcp –syn -m limit –limit 3/s -j ACCEPT
#—————————————————————
# protezione da scan sospetti
#—————————————————————
iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
#—————————————————————
# Enabling spooginf protecion
#—————————————————————
echo ’1′ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#—————————————————————
# Enabling SYN-flood protection – Protection from Denial of Service (DOS) attacks
#—————————————————————
echo “1″ > /proc/sys/net/ipv4/tcp_syncookies
#—————————————————————
# Disable the acception of ICMP-redirect messages.
#—————————————————————
echo “0″ > /proc/sys/net/ipv4/conf/all/accept_redirects
#—————————————————————
# Disable responding to ping broadcasts
#—————————————————————
echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#————————————————————-
# ICMP Dead Error Messages protection
#————————————————————-
echo “1″ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#—————————————————————
# Disable routing triangulation. Respond to queries out
# the same interface, not another. Helps to maintain state

# Also protects against IP spoofing
#—————————————————————
echo “2″ > /proc/sys/net/ipv4/conf/all/rp_filter
#—————————————————————
# Drop Invalid packets
#—————————————————————
iptables -A INPUT -m state –state INVALID -j DROP
iptables -A FORWARD -m state –state INVALID -j DROP
#—————————————————————
# Allow world to send ICMP packets?
#—————————————————————
iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 20/second –limit-burst 100 -j ACCEPT
#—————————————————————
# Drop (NMAP) scan packets #
#—————————————————————
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL ALL -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL NONE -j DROP
#—————————————————————
# Drop packets with bad tcp flags
#—————————————————————
iptables -A VALID_CHECK -p tcp –tcp-option 64 -j DROP
iptables -A VALID_CHECK -p tcp –tcp-option 128 -j DROP
iptables -A INPUT -p tcp –dport 0 -j DROP
iptables -A INPUT -p udp –dport 0 -j DROP
iptables -A INPUT -p tcp –sport 0 -j DROP
iptables -A INPUT -p udp –sport 0 -j DROP
#—————————————————————
# General stealth scan drop
#—————————————————————
iptables -A INPUT -p tcp ! –syn -j DROP

20 Comments

  1. Nicola says:

    Potresti cortesemente spiegare ai profani come me a cosa servono le varie righe di codice????
    Intuitivamente si capisce più o meno ma sarebbe molto ma molto meglio per noi ignorantoni avere una bella spiegazione fatta come si deve! ;-)
    Grazie anticipatamente!

  2. FleX says:

    Ciao,

    sarebbe stato bello una spiegazione riga per riga….. :-)

  3. unwiredbrain says:

    Utilissimo. Mi accodo alla richiesta di avere una spiegazione comando per comando.

    Mi pare di ricordare però che le impostazioni di iptables non sono permanenti, ma vanno perdute al riavvio della macchina.
    C’è un modo per renderle permanenti?

  4. UTL says:

    straquoto flex e unwire
    sarebbe bella una spiegazione (anche sommaria) riga per riga
    e poi come rendere ciò permanente (csì magari mi ci configuro il router (dentro al quale ho openwrt)

  5. shark says:

    @unwiredbrain: solitamente si fa uno script che all’avvio le mette dentro, oppure c’e’ iptables-save e iptables-restore.

    Per una descrizione precisa..beh, e’ un gran pacco :-D

  6. unwiredbrain says:

    @shark, la costruzione / la locazione dello script mi interessano in maniera particolare. Non sono particolarmente ferrato riguardo script, demoni e compagnia bella.

    Qualche delucidazione in merito sarebbe davvero apprezzata, se hai voglia (e soprattutto **tempo**) di farlo.

    Non conoscevo iptables-save e iptables-restore. Grazie mille.
    Gli butto un occhio non appena mi ritrovo dieci minuti liberi.

  7. Ve la do’ la delucidazione non temete, appena smaltisco la valanga di casino che ho al lavoro…

    sic

  8. evrix says:

    oso dare un chiarimento…
    per lo script basta:
    1. copiare tutto il parapacchio in un file di testo da salvare come .sh (tanto per dire che e’ uno script per l’ascell…)
    2. renderlo eseguibile con chmod a+x .sh
    3. magari piazzarlo in un posto dove stanno tutti gli altri script fatti *in proprio* (/opt/scripts/ ? /home//scripts, etc.)
    4. piazzare in /etc/rc.local una riga tipo:
    /home//scripts/.sh
    (magari preceduta da un commento tipo: questa riga attiva il fairuoll tosto)
    ps: i commenti in bash si fanno iniziando la riga col cancelletto ‘#’)

    per la spiegazione delle singole righe, mi sa che in realta’ verrebbe un poema, secondo me per una spiegazione sommaria possono bastare i commenti presenti, per una approfondita conviene rtfm…

    con questo sistema ad ogni avvio viene eseguito il file indicato dal percorso al punto 4 (occhio a metterlo esatto)

    il sistema va bene per qualsiasi script si voglia far eseguire all’avvio

    in alternativa si potrebbe copiare direttamente il paparacchio in /etc/rc.local, ma cosi’ e’ tanticchia piu’ pulita la cosa

  9. evrix says:

    azz. mi sa che l’ottimo (pfui) wordpress mi ha segato le parole tra i segni di maggiore e minore…
    ai punti 1. e 2. invece di ‘.sh’ leggasi ‘*nome*.sh’
    ai punti 3. e 4 i percorsi sono ‘/opt/scripts/*utente* e /home/*utente*/scripts

    *nome* e’ un nome generico da sostituire con il nome che si vuole dare allo script
    *utente* e’ il nome dell’utente in questione

  10. visnotjl says:

    lavoro egregio,
    a chi fosse davvero interessato a capirci, (la quantità di documentazione è imponente!) oso raccomandare l’ ottimo Iptables Tutorial:
    “http://iptables-tutorial.frozentux.net/iptables-tutorial.html”.

    E’ il famoso “F…M..” che qualcuno raccomandava di leggere…….. quasi certamente non farà chiarezza ai neofiti, però darà loro un’ idea del perchè la spiegazione riga per riga sia complicata assai…. (o no ?).

  11. fil connors says:

    Se posso dare un piccolo contributo, aggiungo una precisazione:
    le regole sulla catena di FORWARD hanno senso solo su un pc connesso su due (o più) reti.
    poiché si applicano a tutti e soli quei pacchetti provenienti dall’esterno e diretti
    verso un ip che NON sia quello del pc con iptables.

    Se avete un pc connesso ad una sola rete (cioè che non faccia da firewall per altri pc)
    sostituite le prime due istanze FORWARD con INPUT

    Ad majora

  12. Hai ragione, ma io non ho macchine sole, una lan per me e’ condizione necessaria e sufficente alla vita :-) non riesco a pensare se non in relazione ad un numero N di macchine collegate.

  13. Laser says:

    # protezione dai syn-flood
    iptables -A FORWARD -p tcp –syn -m limit –limit 3/s -j ACCEPT

    ottimo modo per spararsi da soli

  14. Non motivando il commento hai perso un’ottima occasinoe per tacere.

    per la cronaca serve come misura anti syn flood.

  15. lucam says:

    ciao,
    se eseguo lo script mi viene restitua questa serie di errori:

    Bad argument `–syn’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–state’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–state’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–icmp-type’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    iptables: Chain already exists
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-flags’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-option’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–tcp-option’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–dport’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–dport’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–sport’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–sport’
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Bad argument `–syn’
    Try `iptables -h’ or ‘iptables –help’ for more information.

    Qualche idea?
    Grazie

  16. evrix says:

    mi sa che l’hai copiato paro paro e i doppi meno originali ‘- -’ sono stati trasformati da wordpress (ribleah…) in un trattino lungo
    se ci fai caso, infatti, nelle opzioni con due parole, tipo ‘tcp option’, il primo trattino e’ un po’ piu’ lungo del secondo: quello, il primo, dovrebbero essere due trattini invece di uno lungo
    come regola generale, tanto per dire, le opzioni dei comandi bash vogliono un trattino singolo se sono lettere (ls l) e due se sono parole (ls color)
    non so se si capisce

  17. evrix says:

    ariuffa, sono spariti dei pezzi nei comandi fra parentesi dell’ultima frase…
    quelli corretti sono:
    ls ‘-’l e ls ‘- -’color

  18. Stirner says:

    rp_filter

    Nella documentazione del kernel (2.6.26) i “valori” del modulo sembrano essere soltanto 0 e 1

    cat ………./linux-2.6.26/Documentation/networking/ip-sysctl.txt

    rp_filter – BOOLEAN
    1 – do source validation by reversed path, as specified in RFC1812
    Recommended option for single homed hosts and stub network
    routers. Could cause troubles for complicated (not loop free)
    networks running a slow unreliable protocol (sort of RIP),
    or using static routes.

    0 – No source validation.

    conf/all/rp_filter must also be set to TRUE to do source validation
    on the interface

    Default value is 0. Note that some distributions enable it
    in startup scripts

    Gogglando in giro, in effetti, si vedono altri post che suggeriscono di passaer il valore 2……boh!!!

    Saluti

    Max

  19. evrix says:

    @stirner
    http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg566089.html
    There is a long-standing bug in the kernel documentation, which is still
    present in 2.6…
    :)

Leave a Reply

hitstatus