Newsgroup: it.comp.os.linux.iniziare
Titolo: Iptables e server

Ciao a tutti, sono alle prese con iptables per realizzare un firewall
decente da mettere sul mio server casalingo. Il server ha due schede di
rete: eth0 collegata alla lan, eth1 collegata al modem adsl e quindi
internet. Sul server ci girano ssh, apache e postfix.
Quello che voglio realizzare io č bloccare tutto e autorizzare solo ciň che
viene detto esplicitamente. Il forward e l'output sono sicuri quindi
applico politica ACCEPT, per l'input politica DROP. Quindi armato di santa
pazienza, man e google ho buttato giů questa bozza.
Problemi:
1) i ping non vanno, dovrei sicuramente agire sugli icmp. Ma come?
2) irc. Psybnc riesco a raggiungerlo dal client, ma molto probabilmente non
riesce a collegarsi passando per un tunnel ipv6. Ho provato anche a
collegarmi normalmente in ipv4 ma non vado oltre al motd, poi tutto fermo.
3) dovrei aggiungere qualcosa di particolare?
Grazie 
#!/bin/sh
# Test di script per iptables. Intendo bloccare tutto e concedere solo ciň 
# che serve.
# Il server ha due schede di rete: eth0 č connessa alla lan, eth1 č connessa
# a internet.
# Flush delle tabelle
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# Imposto le politiche
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# Masquerading e forward
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
# Abilito l'accesso attraverso loopback
iptables -A INPUT -i lo -p all -j ACCEPT
# Apro ssh sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT
iptables -A INPUT -p udp -i eth1 --dport 22 -j ACCEPT
# Apro http sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 80 -j ACCEPT
iptables -A INPUT -p udp -i eth1 --dport 80 -j ACCEPT
# Apro smtp sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 25 -j ACCEPT
iptables -A INPUT -p udp -i eth1 --dport 25 -j ACCEPT
# Apro pop solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 110 -j ACCEPT
# Apro psybnc solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 31337 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 31337 -j ACCEPT
-- 
Spotmusic: tutto sulla musica degli spot!
www.spotmusic.net

 # Apro smtp sia alla lan che a internet
Perche' anche a internet? In cima alla classifica dei servizi
con rischi di sicurezza c'e' l'smtp, se ce n'e' uno da chiudere
e' proprio questo, anche perche' a meno di non voler mettere su
un smtp pubblico non serve a niente. Se devi aprire, io aprirei
il pop3, che di rischi te ne da' molto pochi, e di vantaggi
parecchi (es. poter controllare le caselle email da fuori
dell'ufficio). Ancora meglio: visto che comunque hai apache
attivo e devi aprire l'80 installa un webmail.
- -- 
Dario Basile
- ----------------------------------------------------------------
Sponte tua non dare culum!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA43Un7mRkrRsDl/8RAlb0AJ9iReL/ym8cKVYm+ZTojZ7IPzHEiQCcDIPP
wCFuMx6+SuoPAZmzIpeWMgw=
=YDpk
-----END PGP SIGNATURE-----

 # Apro pop solo alla lan
tutti questi protocolli vanno solo su TCP. non ce 
bisogno di aprire UDP

 attivo e devi aprire l'80 installa un webmail.
Lo lascio chiuso perchè con la webmail passo sulla 80. Cosa che farò più
avanti, ora posso benissimo entrare in ssh e leggermela col cat ;-P
Grazie per il momento, spero che mi possa aiutare anche per le ultime
cosette...


 bisogno di aprire UDP
Eliminato.
Grazie mille. Vedi la risposta all'altro post, ho messo in DROP il forward
però ho problemi di navigazione...


 un smtp pubblico non serve a niente. Se devi aprire, io aprirei
C'è un problema con fetchmail. Oltre ad avere postfix per la posta, uso
fetchmail per raccattare i messaggi da un po' di caselle sparse in giro per
il mondo. Quindi ho provato a mandarmi una mail: 
1) l'invio funziona
2) fetchmail si connette alla casella e vede il messaggio
3) non riesce a scaricarlo e va in timeout
Jul  1 10:35:28 borabora fetchmail[246]: 1 message for 
MIA...@tin.it
 at
mail.tin.it
 (952 octets).
Jul  1 10:35:28 borabora fetchmail[246]: reading message
MIA...@tin.it@
mail.tin.it:1
 of 1 (952 octets)
Jul  1 10:36:28 borabora fetchmail[246]: timeout after 60 seconds waiting
for listener to respond.
Jul  1 10:36:28 borabora fetchmail[246]: client/server synchronization error
while delivering to SMTP host 
mail.tin.it
Jul  1 10:36:28 borabora fetchmail[246]: Query status=7 (ERROR)
#!/bin/sh
# Test di script per iptables. Intendo bloccare tutto e concedere solo ciò
che serve.
# Il server ha due schede di rete: eth0 è connessa alla lan, eth1 è connessa
a internet.
# Flush delle tabelle
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# Imposto le politiche
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT <-- se metto DROP non risolvo i domini
# Masquerading e forward
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
# Abilito l'accesso attraverso loopback alle eth
iptables -A INPUT -i eth0 -s 192.168.0.2 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.2.1 -j ACCEPT
# Apro ssh sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT
# Apro http sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 80 -j ACCEPT
# Apro smtp sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
# Apro pop solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
# Apro psybnc solo alla lan (forse l'udp non serve nemmeno qui, vedrò)
iptables -A INPUT -p tcp -i eth0 --dport 31337 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 31337 -j ACCEPT
# Rendo possibili i ping
iptables -A INPUT -p icmp -j ACCEPT
# Accetto le connessioni che partono da me
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


 ACCEPT
Questa va messa in cima alla catena, subito dopo il forwarding,
in modo che i pacchetti che fanno parte di connessioni gia'
validate non debbano passare attraverso tutte le regole. Qui
non serve praticamente a niente, soprattutto visto che hai
FORWARD su ACCEPT.
- -- 
Dario Basile
- ----------------------------------------------------------------
Surge et ambula, deinde copula!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA4/o27mRkrRsDl/8RAnQTAKCUG27ZBcq19uxmzjFvGzQ5vqujEQCfYEmO
vXFAC34Inh9a4Hyuz2ZM77g=
=pmXf
-----END PGP SIGNATURE-----

 FORWARD su ACCEPT.
Messo in cima e ora FORWARD č su DROP.
Ora č cosě lo script:
#!/bin/sh
# Test di script per iptables. Intendo bloccare tutto e concedere solo ciň
che serve.
# Il server ha due schede di rete: eth0 č connessa alla lan, eth1 č connessa
a internet.
# Flush delle tabelle
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# Imposto le politiche
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Masquerading e forward
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Abilito l'accesso attraverso loopback alle eth
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.0.2 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.2.1 -j ACCEPT
# Apro ssh sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT
# Apro sftp sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 115 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 115 -j ACCEPT
# Apro http sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 80 -j ACCEPT
iptables -A INPUT -p udp -i ppp0 --dport 80 -j ACCEPT
# Apro smtp solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
# Apro pop solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
# Apro psybnc solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 31337 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 31337 -j ACCEPT
# Rendo possibili i ping
iptables -A INPUT -p icmp -j ACCEPT
Grazie


 droppalo senza pieta'! :-)
Ho un dubbio qui. Io in uscita penso a OUTPUT che è in ACCEPT quindi passa
tutto. Ma non penso sia quello che intendi tu...


 quindi passa tutto. Ma non penso sia quello che intendi tu...
Per pacchetti in uscita intendo sia OUTPUT, sia FORWARD dalla
LAN verso internet. In entrambi i casi accettare tutto e'
sconsigliabile.
- -- 
Dario Basile
- ----------------------------------------------------------------
Expenientia docet. ( = ''experientia penis'')
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA5Bpc7mRkrRsDl/8RAgddAKDTxc2DEh5L7HMr4jUV9vIjmKzDjgCgxeHK
GcENzNPgoaGwiRdbuxDXgOk=
=j6Eh
-----END PGP SIGNATURE-----

 sconsigliabile.
L'OUTPUT in accept l'ho messo perchè cmq la lan la uso io. Quindi dovrei
gestire il FORWARD per tutti i servizi come fatto con l'INPUT sulla eth0
cioè dalla LAN al server?
Non è che mi fai un esempio per un servizio a caso e poi ci smametto con gli
altri?
Grazie


 # Apro sftp sia alla lan che a internet
Dubbio: non e' che hai confuso il comando sftp (che fa parte di
ssh e sfrutta la tcp 22) con il protocollo sftp (simple ftp)?
Te lo chiedo perche' l'sftp e' un vecchio protocollo, AFAIK non
lo usa piu' nessuno.
- -- 
Dario Basile
- ----------------------------------------------------------------
Cras cedo culum; hodie nihil. 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA5B6V7mRkrRsDl/8RAt+3AJ4go/Qo4uFn6+b4/xagfhz0TwDrjACg2XJ6
1XNZ9BrqUsb4ZQfsY05tRwU=
=T4ra
-----END PGP SIGNATURE-----

 smametto con gli altri?
Diciamo che vuoi abilitare NNTP (per leggere i newsgroup dalla
LAN):
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 119 -j ACCEPT
- -- 
Dario Basile
- ----------------------------------------------------------------
Stupete gentes, stuprate glandes!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA5CDx7mRkrRsDl/8RAuiFAKDX6KCWtt0HhF4sdfMbHF/+rQUTsgCfRq6H
7peNzbRwp16437d17W8SxpA=
=Ko5R
-----END PGP SIGNATURE-----

 lo usa piu' nessuno.
Si.


 iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 119 -j ACCEPT
Quindi avrei FORWARD in DROP e aprire dalla lan (eth0) a internet (eth1 o
ppp0) nntp, smtp, pop etc...


 internet (eth1 o ppp0) nntp, smtp, pop etc...
Si, l'idea e' quella, cioe' accettare solo quello che ti serve e
droppare (o rejectare) il resto. Ora che mi ci fai pensare,
probabilmente e' meglio usare REJECT che DROP, visto che tanto
essendoci servizi aperti il PC risulta comunque visibile da
internet.
- -- 
Dario Basile
- ----------------------------------------------------------------
Cras cedo culum; hodie nihil. 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA5EYN7mRkrRsDl/8RAlMRAKCAcWC4wMJYgDrnI3m/DMrSrtaXQQCfWk6i
CUScWtudtYLGsqi0cAKIw2Q=
=F2ys
-----END PGP SIGNATURE-----

 internet.
Ok con questa versione riesco a navigare, leggere le news, scarico la posta
(il problemino di fetchmail che ti dicevo)...
Si c'è la 80 aperta come la 22 quindi il server viene visto. Ma non è poi
sto gran problema mettere DROP al posto di REJECT.
Ora dovrei mettere il DROP anche sull'OUTPUT, c'ho provato così su due piedi
e chiaramente mi ha sbattuto fuori (lavoro con ssh dal client). Sarà
necessario creare delle regole per tutti i servizi da dare all'OUTPUT,
altro?
Se vedi particolari schifezze in ciò che ho fatto in questa versione
avvisami. Grazie
#!/bin/sh
# Test di script per iptables. Intendo bloccare tutto e concedere solo ciò
che serve.
# Il server ha due schede di rete: eth0 è connessa alla lan, eth1 è connessa
a internet.
# Flush delle tabelle
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# Imposto le politiche
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Masquerading e forward
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Abilito l'accesso attraverso loopback alle eth
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.0.2 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.2.1 -j ACCEPT
# Apro ssh sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --sport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -o ppp0 --sport 22 -j ACCEPT
# Apro http sia alla lan che a internet
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 80 -j ACCEPT
iptables -A INPUT -p udp -i ppp0 --dport 80 -j ACCEPT
iptables -A FORWARD -i ppp0 -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -o ppp0 -p tcp --dport 80 -j ACCEPT
# Apro smtp solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
# Apro pop solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
iptables -A FORWARD -i ppp0 -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -o ppp0 -p tcp --dport 110 -j ACCEPT
# Apro psybnc solo alla lan
iptables -A INPUT -p tcp -i eth0 --dport 31337 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 31337 -j ACCEPT
# Rendo possibili i ping
iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type destination-unreachable -j
ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type host-unreachable -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type port-unreachable -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type host-prohibited -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type protocol-unreachable -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type network-unreachable -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type network-prohibited -j ACCEPT
# Dns: client --> server
#iptables -A OUTPUT -o ppp0 -p udp -d 158.110.1.7 --dport 53 -j ACCEPT
iptables -A FORWARD -o ppp0 -p udp -d 158.110.1.7 --dport 53 -j ACCEPT
# Dns: server --> client
iptables -A INPUT -i ppp0 -p udp -s 158.110.1.7 --sport 53 -j ACCEPT
iptables -A FORWARD -i ppp0 -p udp -s 158.110.1.7 --sport 53 -j ACCEPT
# News
iptables -A FORWARD -i ppp0 -p tcp --sport 119 -j ACCEPT
iptables -A FORWARD -o ppp0 -p tcp --dport 119 -j ACCEPT


 #-j ACCEPT
Perche' e' commentata? :-O
BTW l'impressione generale e' che tu non abbia proprio chiaro
come funziona iptables: se vai su
 
http://www.netfilter.org
trovi il manuale completo, in italiano, stampabile (sono 42
pag.) che ti spiega tutto molto piu' chiaramente (ed
esaustivamente) di come sto facendo io a spizzichi e bocconi.
Ciao.
- -- 
Dario Basile
- ----------------------------------------------------------------
Lusus naturae: favae non durae. 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA5GF27mRkrRsDl/8RAvOSAJ0crm4gmxctgXLyo+RZHeD5DZzjxwCgnyHG
v0iPtA5E075qDKBHyGAMLkk=
=vxhx
-----END PGP SIGNATURE-----

 come funziona iptables: se vai su
Infatti è così. Tra google, howto vari, e siti ho un casino in testa che
metà basta. 
Domani stampo.
