EDIT: ho risolto il problema.
Le policy di default andavano o messe con la attuale sintassi ALLA FINE del firewall, OPPURE messe all'inizio con la sintassi da policy
Codice:iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
Qiuesto perché la sintassi che usavo finora bloccava i pacchetti senza mandarli alle successive regole del fw
Allora: ecco il mio firewall con alcuni commenti che indicano quello che nella mia idea dovrebbe fare.
Poiché tuttavia non funziona (ovvero tutte le connessioni tranne il DNS mi da "host not found", ci deve essere qualche errore... Mi aiutereste a trovarlo?
Si noti che in teoria tutte le regole che riguardano la scheda ethernet dovrebbero essere ininfluenti, visto che al momento non la sto usando (come confermato da ehtereal)
Fin qui sono solo settaggi. Si noti che al momento non ho niente di connesso alla eht0.Codice:#!/bin/bash # script di configurazione iptables # dati interfaccia interna LO_INT="lo" LO_ADDR=127.0.0.1/8 # dati interfaccia esterna EXT_INT="ppp0" IPADDR=`/sbin/ifconfig | grep -A 4 ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://` # dati scheda di rete NET_INT="eth0" NET_ADDR=192.168.1.0/24
Nella mia idea, dunque, nella rete esistono:
- loopback (che dovra' essere in grado di far tutto, altrimenti i vari servizi di sistema non potran funzionare a dovere)
- eth0 (scheda ethernet. Attualmente non ho nulla di attaccato ad essa, ma l'ho comunque configurata. Ethereal dice correttamente che non ci sono pacchetti che passano per essa.)
- ppp0 (modem adsl)
Questi sopra li ho trovati come altamente consigliati in molti tutorials. Comuqnue ho provato a commentare le linee, e non cambia nulla.Codice:#--------------------------------------------------------------- # Disable IP routing. Remember to enable if your firewall is protecting a # network, NAT included #--------------------------------------------------------------- echo '0' > /proc/sys/net/ipv4/ip_forward # blocco ping verso la macchina (DOS attack) echo '1' > /proc/sys/net/ipv4/icmp_echo_ignore_all echo '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # disabilitato nel kernel # echo '1' > /proc/sys/net/ipv4/tcp_syncookies #--------------------------------------------------------------- # Disable routing triangulation. Respond to queries out # the same interface, not another. Helps to maintain state # Also protects against IP spoofing #--------------------------------------------------------------- echo '1' > /proc/sys/net/ipv4/conf/all/rp_filter # loggo i pacchetti malformati echo '1' > /proc/sys/net/ipv4/conf/all/log_martians echo '0' > /proc/sys/net/ipv4/conf/all/accept_source_route echo '0' > /proc/sys/net/ipv4/conf/all/accept_redirects echo '0' > /proc/sys/net/ipv4/conf/all/send_redirects
Inizializzato tutto.Codice:modprobe ip_conntrack modprobe ip_nat_ftp modprobe ip_conntrack_ftp modprobe iptable_nat # salva le attuali impostazioni iptables-save > iptables_precedente.txt iptables -F iptables -t nat -F iptables -t mangle -F iptables --delete-chain iptables -t nat --delete-chain iptables -t mangle --delete-chain
Bene: qui sotto iniziano le regole sui pacchetti
Nessuna connessione puo' entrare o passare attraverso, mentre il traffico generato da me puo' uscire tranquillamenteCodice:# default: blocca tutto in entrata e in passaggio, # accetta tutto in uscita iptables -A INPUT -p all -j DROP iptables -A OUTPUT -p all -j ACCEPT iptables -A FORWARD -p all -j DROP
Per l'appunto, altrimenti i processi interni sballano.Codice:# l'interfaccia di loopback puo' tutto iptables -A INPUT -i $LO_INT -p all -j ACCEPT iptables -A OUTPUT -o $LO_INT -p all -j ACCEPT
I pacchetti in arrivo sono abilitati solo in due casi:Codice:# accetta i pacchetti in arrivo # se sono collegati a connessioni preesistenti iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # permetti di accedere dall'esterno al server ssh iptables -t filter -A INPUT -p tcp --dport 22 -i $EXT_INT -j ACCEPT
- connessioni collegate a connessioni gia' esistenti (ossia aperte da me)
- connessioni al server ssh
I pacchetti che vanno e vengono attraverso la scheda ethernet devono poter passare, per poter essere instradati da e verso un eventuale pc collegato alla porta ethernet.Codice:# abilitiamo il transito di pacchetti # attraveso la rete interna iptables -A FORWARD -i $NET_INT -j ACCEPT iptables -A FORWARD -o $NET_INT -j ACCEPT # abilitiamo i pacchetti icmp per la scheda di rete iptables -A INPUT -i $NET_INT -p icmp -j ACCEPT
I pacchetti che passano attraverso la scheda di rete devono essere mascherati in modo da uscire dal modem con l'indirizzo IP del modem, non quello (riservato) della scheda di rete.Codice:# abilitiamo il masquerading dei pacchetti # in uscita dalla rete interna verso la rete esterna iptables -t nat -A POSTROUTING -s $NET_ADDR -o $EXT_INT -j MASQUERADE
Codice:# e infine abilitiamo l'attraversamento dei pacchetti # tra un'interfaccia e l'altra echo '1' > /proc/sys/net/ipv4/ip_forward

LinkBack URL
About LinkBacks
