Newsgroup: it.comp.os.linux.sys
Titolo: [LUNGHETTO] errore di routing con iptables?

nella mia azienda ho installato un pc con linux (redhat 8.0) e ho
messo su squid e iptables. Abbiamo un collegamento ad internet fornito
da Telecom Italia, su ADSL. il collegamento prevede l'utilizzo di un
firewall modello netscreen, quindi ho
1. internet
2. modem adsl telecom (80.x.y.z)
3. netscreen teleco connesso al modem di cui al punto 2 (10.0.0.70)
4. switch cisco al quale e' connessa la mia lan aziendale della
direzione
5. router ibm (10.0.0.1) al quale e' connessa una sottorete di una
filiale (10.1.0.0)
6. il mio pc (10.0.0.21)
7. un pc della filiale (10.1.0.21)
questa e' la tabella delle route statiche dentro il router 10.0.0.1
route to 10.1.0.0       ,255.255.255.0   via 10.255.255.16   cost 1
route to 10.254.254.16  ,255.255.255.255 via 10.255.255.16   cost 1
route to 10.0.0.0       ,255.0.0.0       via 10.0.0.200      cost 1
route to 0.0.0.0        ,0.0.0.0         via 10.0.0.70        cost 1
al router 10.0.0.200 c'e' connessa una extranet con un fornitore...
mentre le rimanenti route, esclusa la 
0.0.0.0/0.0.0.0
 le ho gia'
trovate cosi' perche' l'ibm viene configurato dalla telecom...
come vedi ho messo alla fine delle route statiche, per ultima, la
"via" per internet, che e' appunto per 
0.0.0.0/0.0.0.0
 esci da
10.0.0.70 che sarebbe poi il firewall netscreen della telecom e da
esso poi si esce su internet via 80.x.y.z che e' l'IP del modem adsl
telecom.
ho messo un hub dietro al momdem adsl telecom, allo stesso hub
troviamo connessi sia il netscreen 10.0.0.70 che il mio proxy,
10.0.0.15, il quale rientra nello switch di direzione generale. Se
"spengo" il netscreen (10.0.0.70) e modifico la route statica nel
router principale (10.0.0.1) come segue
vecchia route: route to 0.0.0.0        ,0.0.0.0         via 10.0.0.70 
      cost 1
nuova route: route to 0.0.0.0        ,0.0.0.0         via 10.0.0.15   
    cost 1
accade che tutti i client che intendono navigare su internet vanno a
finire nel mio proxy. Difatti nessuno in questo modo poteva navigare
tranne che non avesse impostato come "proxy" nel browser interner
explorer, l'indirizzo del proxy...
successivamente abilito iptables, il firewall linux che agisce a
livello kernel di linux (in realta' si chiama netfilter, iptables e'
solo un gestore di regole ...) con le seguenti regole:
#!/bin/sh
 
IPTABLES="/sbin/iptables"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" >/proc/sys/net/ipv4/tcp_syncookies  
for file in /proc/sys/net/ipv4/conf/*/rp_filter; do echo "1" >
$file;done
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all 
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route 
/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 
extip="80.x.y.z"
extint="eth1"
intip="10.0.0.15"
intint="eth0"
intnet="
10.0.0.0/255.0.0.0
"
dnsservers=( 151.1.2.1 151.1.1.1 )
echo "  Starting up..."
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -F -t mangle
$IPTABLES -F -t nat
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT DROP
$IPTABLES -I INPUT 1 -j REJECT
$IPTABLES -I OUTPUT 1 -j REJECT
$IPTABLES -I FORWARD 1 -j REJECT
$IPTABLES -A INPUT -i lo  -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES --policy INPUT           DROP
$IPTABLES --policy OUTPUT          ACCEPT
$IPTABLES --policy FORWARD         DROP
echo "  Attivazione ssh..."
# Consento una connessione ssh su firewall dalla rete  locale
$IPTABLES -A INPUT -i $intint -p tcp -s $intnet --sport 1023:65535  -d
$intip --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -o $intint -p tcp -d $intnet --dport 1023:65535 -s
$intip --sport 22 -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
echo "  Masquerading della rete interna..."
$IPTABLES  -t nat -A POSTROUTING -o $extint -s $intnet -j MASQUERADE
echo "  Stateful forwarding della rete interna..."
#$IPTABLES -A FORWARD -o $extint -j DROP
$IPTABLES -A INPUT -i eth1 -p tcp --sport 80 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 80 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i eth1 -p tcp --sport 80 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -o eth1 -p tcp --dport 80 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i eth1 -p tcp --sport 25 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 25 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i eth1 -p tcp --sport 25 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -o eth1 -p tcp --dport 25 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i eth1 -p tcp --sport 110 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 110 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i eth1 -p tcp --sport 110 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -o eth1 -p tcp --dport 110 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i eth1 -p udp --sport 53 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o eth1 -p udp --dport 53 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i eth1 -p udp --sport 53 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -o eth1 -p udp --dport 53 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i eth1 -p tcp --sport 443 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 443 -m state --state
NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i eth1 -p tcp --sport 443 -m state --state
ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -o eth1 -p tcp --dport 443 -m state --state
NEW,ESTABLISHED -j ACCEPT
echo "  Sblocco delle chains..."
# A firewall configurato le chain vengono sbloccate
$IPTABLES -D INPUT 1 
$IPTABLES -D OUTPUT 1 
$IPTABLES -D FORWARD 1 
$IPTABLES -N tcp_flags
$IPTABLES -A tcp_flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A tcp_flags -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A tcp_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j
DROP
$IPTABLES -A tcp_flags -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A tcp_flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A tcp_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A tcp_flags -p tcp --tcp-flags FIN FIN -j DROP
#echo "  Attivo Squid..."
$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT
--to-port 8080
$IPTABLES -N laninet
$IPTABLES -A laninet -s ! 
10.0.0.0/16
 -j ACCEPT
come vedi, con il comando $IPTABLES -t nat -A PREROUTING -p tcp
--dport 80 -i eth0 -j REDIRECT --to-port 8080
faccio in modo che in maniera trasparente ogni qual volta si chiama un
servizio sulla porta 80 di un servente esterno, il firewall lo passi
non direttamente alla scheda di rete "esterna", quella cioe' che punta
a 80.21.200.16 ma al server proxy... il quale ascisce di conseguenza,
controllando con delle sue regole se il sito web e' visitabile e da
chi...
mentre noterai anche che ho messo una regola
$IPTABLES -A laninet -s ! 
10.0.0.0/16
 -j ACCEPT
che secondo quello che voglio fare io, mi dovrebbe consentire di
accettare tutti i pacchetti provenienti dalla sottorete 
10.0.0.0/16
quindi anche dalla lan della filiale (10.1.0.0) e farli "navigare"
correttamente.
ma con questo setup navigano correttamente solo i client della
sottorete 
10.0.0.0/24
, cioe' il mio 10.0.0.21 naviga che e' una
meraviglia mentre il 10.1.0.21 che e' nella filiale no!
non riesco a capire dove sbaglio.
Marcella!

 correttamente.
Mamma che casino...mi sono perso...:-)...comunque non vorrei dire una
stupidaggine (proprio perchè mi sono perso), ma se leggi la regola qui
sopra....mi sembra di vedere che tu accetti tutti i pacchetti con qualsiasi
sorgente TRANNE 
10.0.0.0/16
 (c'è il punto esclamativo)
Ciao
Alessandro