Help firewall iptables

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
moruz83
Linux 2.x
Linux 2.x
Messaggi: 314
Iscritto il: lun 7 feb 2005, 0:00
Località: Roma
Contatta:

Help firewall iptables

Messaggio da moruz83 »

salve a tutti,
sto cercando da ore di realizzare un semplice firewall tramite regole iptables...
siccome non sono molto pratico non riesco a farlo fuznionare :(
allora intanto vi dico che ho una connessione adsl con modem ethernet

allora utilizzando questo va ovviamente tutto k:

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
for a in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $a
done
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/tcp_ecn

iptables -F
iptables -X

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


se invece cerco di bloccare tutto il traffico e di far passare solo i pacchetti su una determinata porta non funziona più un tubo...
il codice sarebbe tipo questo:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A OUTPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

sicuramente ci sarà qualcosa di poco più sofisticato da aggiungere...
qualcuno mi può aiutare a capire?

il mio obiettivo è quello di bloccare tutto il traffico e lasciare aperte solo le porte 80 e 443 (o eventualmente qualche altra porta) indispensabili per la navigazione.
come si può fare?

grazie a tutti!

ciao

Avatar utente
moruz83
Linux 2.x
Linux 2.x
Messaggi: 314
Iscritto il: lun 7 feb 2005, 0:00
Località: Roma
Contatta:

Messaggio da moruz83 »

Nessuno mi aiuta? :( :cry:

Avatar utente
whites11
Linux 4.x
Linux 4.x
Messaggi: 1147
Iscritto il: ven 30 set 2005, 13:54
Località: Udine

Messaggio da whites11 »

intanto io andrei per step:

iptables -F
#elimino le regole impostate
iptables -P OUTPUT DROP
iptables -A OUTPUT -p TCP --dport 80 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p sdp --dport 53 -j ACCEPT
# utlime 2 regole per il dns

così dovresti riuscire a navigare.
comunque leggiti una guida seria a iptables, poichè è un argomento complesso che richiede approfondimento e non tentativi

paperboy
Linux 0.x
Linux 0.x
Messaggi: 60
Iscritto il: gio 7 set 2006, 6:31

Messaggio da paperboy »

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#DNS
iptables -a OUTPUT -p udp -m udp --dport domain -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -a INPUT -p udp -m udp --sport domain -m state --state ESTABLISHED -j ACCEPT
#HTTP
iptables -a OUTPUT -p tcp -m tcp --dport http -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -a INPUT -p tcp -m tcp --sport http -m state --state ESTABLISHED -j ACCEPT
#HTTPS
iptables -a OUTPUT -p tcp -m tcp --dport https -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -a INPUT -p tcp -m tcp --sport https -m state --state ESTABLISHED -j ACCEPT


cosi puoi solo navigare ma non puoi scaricare posta, non puoi visitare un server ftp etc...

Avatar utente
moruz83
Linux 2.x
Linux 2.x
Messaggi: 314
Iscritto il: lun 7 feb 2005, 0:00
Località: Roma
Contatta:

Messaggio da moruz83 »

grazie tanti a tutti. ora il browser funziona.
come diceva paper boy non posso visitare un server ftp...

io ho aggiunto queste due regole

# FTP
iptables -A OUTPUT -p tcp -m tcp --dport 20,21 -m state --state NEW,ESTABLISHED,RELATED
iptables -A INPUT -p tcp -m tcp --sport 20,21 -m state --state ESTABLISHED,RELATED

solo non funzionano... ho cercato anche in giro il funzionamento dell'ftp, per esempio per l'ftp attivo:

Il client FTP si connette al server verso la porta di destinazione TCP/21, con porta sorgente casuale (N), di solito maggiore di 1024...
(questa dovrebbe essere soddisfatta dalla regola di OUTPUT che controlla solo la dport)
Una volta stabilita la connessione su questo canale, il client si mette in ascolto sulla porta N+1, e manda al server (usando il canale TCP/21) il comando PORT N+1...
(la porta N+1 non dovrebbe contare dato che il controllo lo faccio sulla dport)
A questo punto il server inizierà una connessione dalla sua porta TCP/20 verso la porta TCP/N+1 del client.....
(il controllo è sulla sport in INPUT)

etc....

le regole sembrerebbero andar bene.... pero non funzionano... che ho sbagliato?

thx

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio da Bart »

Codice: Seleziona tutto

#!/bin/sh
#
# Script Firewall for IP-tables
#

IPT=/usr/sbin/iptables

# SET-UP POLICY CATENE PRINCIPALI

$IPT -t filter -F
$IPT -t filter -X
$IPT -t filter -Z
$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT DROP

/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
/bin/echo '1' > /proc/sys/net/ipv4/tcp_syncookies
/bin/echo '0' > /proc/sys/net/ipv4/conf/all/accept_source_route

$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A OUTPUT -o lo -j ACCEPT
$IPT -t filter -A OUTPUT -j ACCEPT

paperboy
Linux 0.x
Linux 0.x
Messaggi: 60
Iscritto il: gio 7 set 2006, 6:31

Messaggio da paperboy »

moruz83 ha scritto:grazie tanti a tutti. ora il browser funziona.
come diceva paper boy non posso visitare un server ftp...

io ho aggiunto queste due regole

# FTP
iptables -A OUTPUT -p tcp -m tcp --dport 20,21 -m state --state NEW,ESTABLISHED,RELATED
iptables -A INPUT -p tcp -m tcp --sport 20,21 -m state --state ESTABLISHED,RELATED

solo non funzionano... ho cercato anche in giro il funzionamento dell'ftp, per esempio per l'ftp attivo:

Il client FTP si connette al server verso la porta di destinazione TCP/21, con porta sorgente casuale (N), di solito maggiore di 1024...
(questa dovrebbe essere soddisfatta dalla regola di OUTPUT che controlla solo la dport)
Una volta stabilita la connessione su questo canale, il client si mette in ascolto sulla porta N+1, e manda al server (usando il canale TCP/21) il comando PORT N+1...
(la porta N+1 non dovrebbe contare dato che il controllo lo faccio sulla dport)
A questo punto il server inizierà una connessione dalla sua porta TCP/20 verso la porta TCP/N+1 del client.....
(il controllo è sulla sport in INPUT)

etc....

le regole sembrerebbero andar bene.... pero non funzionano... che ho sbagliato?

thx
ho fatto una semi-guida sull'argomento sul wiki

http://www.slacky.eu/wikislack/index.ph ... FTP_Client
l'ftp è uno dei protocolli complessi, ovvero usa una seconda (o piu connessioni) differente da quella che instauri tu.
netfilter (iptables) ha realizzato dei moduli per questi protocolli complessi i quali cercano le altre connessioni che fanno parte dello stesso protocollo.
di default il kernel predispone gia irc, ftp e (qualche altro che non sapevo come testarlo)
bisogna caricare tali moduli prima di impostare le regole e aggiungere le state RELATED

ora non ricordo il nome esatto dei modulo, prova a vedere se è gia caricato o lo carica da solo.

comunque se il tuo intento è proteggere solo il tuo pc desktop e sei solo tu ad usarlo ti basta questa regola.



Codice: Seleziona tutto

iptables -a INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -a OUTPUT -m state --state NEW,ESTABLISHED,RELATED  -j ACCEPT
con questa regola blocchi tutte le connessioni in input tranne quelle che servono per le connessioni che instauri tu.

questa configurazione è sufficiente per un uso classico del pc.
se usi server o programmi p2p dei aggiungere qualche regola in base al funzionamento di tali software

Avatar utente
moruz83
Linux 2.x
Linux 2.x
Messaggi: 314
Iscritto il: lun 7 feb 2005, 0:00
Località: Roma
Contatta:

Messaggio da moruz83 »

con lsmod | grep ftp non mi dice niente... come faccio a trovare questo modulo che dici tu?
con le regole sulla guida che mi hai consigliato non va lo stesso... però non ho voglia di aprire tutte le porte, per questo cercavo di fare una cosa più precisa :)

inoltre per le regole di sicurezza, cioè quell relative all' antispoof ed al portscan mi dice più volte : iptables: No chain/target/match by that name

perché? eppure ho fatto copia ed incolla :)

ciao grazie

paperboy
Linux 0.x
Linux 0.x
Messaggi: 60
Iscritto il: gio 7 set 2006, 6:31

Messaggio da paperboy »

moruz83 ha scritto:con lsmod | grep ftp non mi dice niente... come faccio a trovare questo modulo che dici tu?
con le regole sulla guida che mi hai consigliato non va lo stesso... però non ho voglia di aprire tutte le porte, per questo cercavo di fare una cosa più precisa :)

inoltre per le regole di sicurezza, cioè quell relative all' antispoof ed al portscan mi dice più volte : iptables: No chain/target/match by that name

perché? eppure ho fatto copia ed incolla :)

ciao grazie
ho fatto una guida un po complessa e me ne sono accorto dopo, li ho creato nuove catene per dividere gli utilizzi.
comunque il modulo è ip_conntrack_ftp, controlla nel kernel se è statico o assente.

Avatar utente
moruz83
Linux 2.x
Linux 2.x
Messaggi: 314
Iscritto il: lun 7 feb 2005, 0:00
Località: Roma
Contatta:

Messaggio da moruz83 »

paperboy ha scritto: ho fatto una guida un po complessa e me ne sono accorto dopo, li ho creato nuove catene per dividere gli utilizzi.
comunque il modulo è ip_conntrack_ftp, controlla nel kernel se è statico o assente.
instanto grazie per le risposte
ho dato in console modprobe ip_conntrack_ftp
e controllando con lsmod il modulo è caricato...
infatti riesco ora a navigare in ftp...
ma per caricarlo ogni volta come faccio?
è possibile anche usare il comando echo 1 ... nello script per il frewall?
non conosco il percorso di questo modulo.

ciao e grazie!!

paperboy
Linux 0.x
Linux 0.x
Messaggi: 60
Iscritto il: gio 7 set 2006, 6:31

Messaggio da paperboy »

moruz83 ha scritto:
paperboy ha scritto: ho fatto una guida un po complessa e me ne sono accorto dopo, li ho creato nuove catene per dividere gli utilizzi.
comunque il modulo è ip_conntrack_ftp, controlla nel kernel se è statico o assente.
instanto grazie per le risposte
ho dato in console modprobe ip_conntrack_ftp
e controllando con lsmod il modulo è caricato...
infatti riesco ora a navigare in ftp...
ma per caricarlo ogni volta come faccio?
è possibile anche usare il comando echo 1 ... nello script per il frewall?
non conosco il percorso di questo modulo.

ciao e grazie!!
nello script del firewall ci metti modprobe ip_conntrack_ftp e risolvi il problema no? io l'ho compilato come statico sul mio kernel visto che lo ritengo essenziale

Rispondi