PDA

View Full Version : Prima approccio con iptables


DigitalKiller
09-01-2007, 10:36
Ciao a tutti!
In questi giorni sto provando a configurare per la prima volta il firewall della mia debian etch.
Ho letto un po' di documentazione su vari siti ed ho provato a scrivere un primo script. Essendo alle prime armi con iptable, naturalmente sono sorti dei problemi con lo script.
Questo č lo script che ho scritto per le prove

#!/bin/bash

# Carico i moduli necessari
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Disabilito il forwarding dei pacchetti
echo "0" > /proc/sys/net/ipv4/ip_forward

# Svuoto le tabelle
iptables -F
iptables -X

#==============================OUTPUT==============================
# Accetto i pacchetti in uscita dall'interfaccia lo (localhost)
iptables -A OUTPUT -o lo -j ACCEPT

# Accetto tutti i pacchetti riguardanti una connessione stabilita o relativa
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#
iptables -A OUTPUT -o eth0 -p TCP --dport 80 -j ACCEPT

# Scarto tutti i pacchetti non accettati esplicitamente
iptables -A OUTPUT -j DROP

#=============================FORWARD=============================
# Il pc non č posto a protezione di una rete
# Scarto tutti i pacchetti non accettati esplicitamente
iptables -A FORWARD -j DROP

#==============================INPUT==============================
# Accetto tutti i pacchetti che fanno parte di una connessione da
# stabilita (ESTABLISHED) o che sono relativi (RELATED) come ad esempio
# pacchetti ICMP di errore.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Accetto
iptables -A INPUT -s 127.0.0.1 -j ACCEPT

# Accetto alcuni tipi di pacchetti ICMP che possono essere utili
iptables -A INPUT -p ICMP -s 0/0 -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP -s 0/0 -m icmp --icmp-type 11 -j ACCEPT

# Scarto tutti i pacchetti non accettati esplicitamente
iptables -A INPUT -j DROP


Dopo aver eseguito lo script, la navigazione via browser smette di funzionare dopo qualche minuto. Cosa ho sbagliato? :)
Grazie

DigitalKiller
10-01-2007, 12:18
Up :D

Psycotic
10-01-2007, 13:41
secondo me devi settare solo la policy di input a drop " input -P DROP"

l'output lo lascerei aperto, perche' tu cosi' stai cercando di accettare sia in entrata che in uscita i pacchetti di tipo establish e related, ma cmq se vuoi connetterti da qualche parte dovrai per forza prima o poi essere in grado di creare una connessione.. quindi in output dovresti mettere anche NEW dopo -m state, quindi il mio consiglio e' di lasciarlo aperto...

DigitalKiller
10-01-2007, 13:59
secondo me devi settare solo la policy di input a drop " input -P DROP"

l'output lo lascerei aperto, perche' tu cosi' stai cercando di accettare sia in entrata che in uscita i pacchetti di tipo establish e related, ma cmq se vuoi connetterti da qualche parte dovrai per forza prima o poi essere in grado di creare una connessione.. quindi in output dovresti mettere anche NEW dopo -m state, quindi il mio consiglio e' di lasciarlo aperto...

In pratica devo modificare la regola in questo modo
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
e cancellare la regola
iptables -A OUTPUT -o eth0 -p TCP --dport 80 -j ACCEPT

Ma cosė facendo, non lascio aperte in uscita tutte le porte? Se volessi lasciare aperte solo alcune porte (ad es. la 80, 110, ecc)?

Psycotic
10-01-2007, 14:11
le porte in uscita si aprono quando fai una connessione, nn ci sono porte che rimangono in ascolto come in INPUT

"Se volessi lasciare aperte solo alcune porte (ad es. la 80, 110, ecc)?"

la 80 nn sei tu ad averla aperta ma il server http dove ti connetti, infatti dalla tua macchina quando ti connetti ad un server http la porta che ti si aprira sara' > di 1024

in quel modo tu specifichi soltando che il tuo pacchetto puo' andare verso una porta 80 nn che stai lasciando la tua porta 80 aperta..

DigitalKiller
10-01-2007, 14:35
le porte in uscita si aprono quando fai una connessione, nn ci sono porte che rimangono in ascolto come in INPUT

"Se volessi lasciare aperte solo alcune porte (ad es. la 80, 110, ecc)?"

la 80 nn sei tu ad averla aperta ma il server http dove ti connetti, infatti dalla tua macchina quando ti connetti ad un server http la porta che ti si aprira sara' > di 1024

in quel modo tu specifichi soltando che il tuo pacchetto puo' andare verso una porta 80 nn che stai lasciando la tua porta 80 aperta..

Vero, ho fatto un bel po' di confusione! :muro: :muro:
Grazie, appena rientro a casa modifico lo script :)