|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2001
Città: Germania/Italia
Messaggi: 117
|
Firewall IPTABLES e Dnat
Salve ragazzi, premetto che sono un novellino del mondo Linux/unix ma mi appasiona davvero molto. Io ho un problema tosto. La mia rete in questione è così configurata (a grandi linee):
- Internet: ADSL Alice Flat PPPoA (Ip Dinamico) - Router Alcatel SpeedTouch Pro (NAT-PAT attivata) WAN xxx.xxx.xxx.xxx LAN 192.168.254.254 e tutto il traffico è indirizzato verso un Linux BOX con RH 8.0 e iptables come firewall - Linux (firewall) con 2 Schede di rete: (1) al router con ip 192.168.254.253 ed (1) direttamente collegata ad un Windows 2000 Server con cavo cross, quindi 192.168.0.249 - Windows 2000 Server con: Exchange 2000, ISA 2000, FAX server, DNS, WINS, DHCP etc etc etc con 2 schede di rete: (1) 192.168.0.250 dal Linux BOX ed (1) 10.1.0.6 verso lo switch con i client ed è un PDC. Il motivo principale per cui ho optato per questa soluzione è una sorta di mia semplicità mentale nel senso che trovo più facile ed immediato dire agli utenti dove possono andare e chi può andare semplicemente creando delle regolette sull'ISA 2000 avendo preparato il Linux BOX a far transitare quello o l'altro pacchetto verso una od un altra destinazione. Comunque al di là di questo io mi trovo un pò incasinato con il DNAT su Linux, dopo essermi iscritto ad un DDNS, ho pubblicato l'OWA di Exchange su Internet sulla porta 8082. Quindi semplicemente l'utente da qualsiasi parte può sulla barra degli indirizzi internet digitare http://pippo.DDNS.net:8082/exchange/nomeutente a quel punto viene chiesto di autentificarsi con nome utente e password del dominio ed il gioco è fatto. Tuttavia io vorrei fare un passo oltre cioè togliere la specifica della porta (che in alcuni casi è bloccata da alcuni firewall) quindi vorrei che l'utente possa digitare : http://pippo.DDNS.net/exchange/nomeutente. Siccome il mio script del firewall me lo sono scritto da solo leggendo di tutto e di + prendendo spunti di qua e spunti di là, insomma da autodidatta, lui poverino funziona anche bene e ormai ho una certa dimestichezza nell'aprire e chiudere porte etc. Io per permettere l'OWA avevo fatto una DNAT "dritta" cioè gli ho specificato nella tabella di NAT nel PREROUTING che tutto il traffico proveniente dall'esterno (eth1) con destinazione 8082 me lo gira al server 2000 all'indirizzo 192.168.0.250 sempre sulla porta 8082. Poi ho aggiunto la regolina sulla tabella di FORWARD permettendo il transito dei pacchetti sul TCP 8082 e così l'OWA in qualche istante è stato pubblicato. Ora però volendo fare un passo avanti, io ho pensato (magari stupidamente) di modificare la regola dicendo che tutto il traffico proveniente da internet sulla porta 80 me lo giri sempre sul server 2000 sulla porta 8082. Ho aggiunto al FORWARD di accetare anche chiamata sulla porta 80. Risultato???? Niente non va così. Cioè dall'esterno inserisco il mio indirizzo http://pippo.DDNS.net/exchange/nomeutente, mi chiedere nome utente e password e poi dopo qualche istante mi restituisce che è impossibile visualizzare la pagina. Da quello che mi sembra di intuire ci deve essere un qualche impedimento nel momento in cui il pacchetto ritorna indietro da server 2000, quasi che la richiesta entri da internet dalla porta 80, poi viene girata sulla porta 8082 a questo punto il server 2000 elabora il pacchetto e lo restituisce naturalmente sulla porta 8082 e però o si ferma nel FORWARDING oppure esce sempre sulla 8082 ma la richiesta dell'utente si aspetta un pacchetto in risposta sulla porta 80. L'unico modo che ho avuto per farlo funzionare è stato quello di lasciare entrambe le regole nel POSTROUTING (quella diritta che dal 8082 va alla 8082 e quella che da 80 va al 8082). In questo modo l'utente scrive l'indirizzo http://pippo.DDNS.net/exchange/nomeutente e dopo la verifica di nome utente e password l'indirizzo muta in http://pippo.DDNS.net:8082/exchange/nomeutente e tutto funziona. Il problema è che in certi posti la porta 8082 è bloccata e quindi dopo la verifica della password mi restituisce un errore di pagina non raggiungibile. RAGAZZI AIUTOOOOOO Vi copia il mio script del firewall e quindi potete magari capire dove sbaglio, se è da buttare via in toto o.... boh quello che pensate. AIUTOOOOOO!!!! #!/bin/sh iptables="/sbin/iptables" route del -net 192.168.0.0/24 dev eth0 route del -net 192.168.254.0/24 dev eth1 route add -host 192.168.0.250 dev eth0 route add -host 192.168.254.254 dev eth1 route add -host 192.168.0.249 dev eth0 modprobe ipt_LOG modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ipt_MASQUERADE modprobe ip_nat_ftp modprobe ipt_multiport # blocco i ping verso il firewall echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # attivo la protezione contro gli attacchi Spoofing 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 # configuro la policy di default della tabella filter iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP # configuro la policy di default della tabella nat iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # definisco la politica di default della tabella mangle iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P OUTPUT ACCEPT # scarto subito i pacchetti malformati iptables -A INPUT -m unclean -j DROP # consento pero' che il firewall possa essere raggiunto con connesioni webmin # provenienti dal server 2K dalla sua scheda di rete esterna iptables -A INPUT -p tcp -s 192.168.0.250 --dport 10000 -j ACCEPT # consento anche naturalmente che possa essere raggiunto da connessioni SSH # dall'interno della rete e quindi dalla sk esterna del win2k iptables -t filter -A INPUT -m limit --limit 10/min -p tcp -s 192.168.0.250 --syn --dport ssh -j ACCEPT # consento il traffico loopack iptables -A INPUT -i lo -j ACCEPT # ora comincio a creare le regole vere e proprie per il firewall: # in primo luogo desidero tutto sommato che anche questo firewall # possa accedere a internet, controllare la posta con SMTP e POP3 # scaricare da siti ftp..... # # accetto tutte le connessioni correlate alla mia iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # abilito le richieste DNS per i protocolli tcp e udp al DNS di turno # potrei anche specificare gli indirizzi IP statici degli stessi cioè # 212.216.112.222 per il primario e 212.216.172.162 per il secondario iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT # abilito ora la navigazione web, il traffico sicuro https e l'update # del client di no-ip.com che usa la porta 8245 e la 10000 per le connessioni con # webmin iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443,8245,10000 -j ACCEPT # abilito le richieste di ftp per i siti ftp iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT #iptables -t filter -A OUTPUT -p udp --dport 21 -j ACCEPT # abilito i download da siti ftp iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT #iptables -t filter -A OUTPUT -p udp --dport 22 -j ACCEPT # abilito le connessioni SMPT e POP3 iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT # attivo le connesioni SSH (Secure Shell) verso l'esterno iptables -t filter -A OUTPUT -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Accetto che il firewall possa essere raggiunto attraverso connesioni SSH dall'esterno (NO) # iptables -t filter -A INPUT -m limit --limit 10/min -p tcp --syn --dport ssh -j ACCEPT # questa riga permette che il server possa essere pingato ma all'inizio l'ho negato # quindi questa riga non c'entra # iptables -t filter -A INPUT -p icmp ! --icmp-type 8 -j ACCEPT # aggiungo questa regola nel caso subentrino problemi nella politica di default iptables -A INPUT -j DROP # # ora passo a configurare il bridge tra le due reti # cioe' il filtraggio e poi il nat tra eth0 (la rete interna) e eth1 # (la rete internet attraverso router ADSL) # iptables -N laninet iptables -N inetlan iptables -A FORWARD -i eth0 -o eth1 -j laninet iptables -A FORWARD -i eth1 -o eth0 -j inetlan # ora che ho creato le due catene di traffico e le ho appese alla # catena FORWARD della tabella di filter, passo a definire i target # che desidero applicare al traffico # # droppa tutto quello che non proviene dalla rete interna iptables -A laninet -s ! 192.168.0.0/24 -j DROP # permetto il passaggio delle richieste di interrogazione per il DNS # sia per i protocolli tcp che udp iptables -A laninet -p tcp -d 212.216.112.222 --dport 53 -j ACCEPT iptables -A laninet -p udp -d 212.216.112.222 --dport 53 -j ACCEPT iptables -A laninet -p tcp -d 212.216.172.162 --dport 53 -j ACCEPT iptables -A laninet -p udp -d 212.216.172.162 --dport 53 -j ACCEPT # abilito il traffico web ed https iptables -A laninet -p tcp -m multiport --dports 80,443 -j ACCEPT # abilito il traffico ftp, SSH e telnet in uscita iptables -A laninet -p tcp --dport 21 -j ACCEPT iptables -A laninet -p udp --dport 21 -j ACCEPT iptables -A laninet -p tcp --dport 22 -j ACCEPT iptables -A laninet -p tcp --dport 23 -j ACCEPT # abilito le richieste di SMTP e POP3 per i miei specifici indirizzi iptables -A laninet -p tcp -d pop3.freenet.de --dport 110 -j ACCEPT iptables -A laninet -p tcp -d mx.freenet.de --dport 110 -j ACCEPT iptables -A laninet -p tcp -d mail.interfree.it --dport 110 -j ACCEPT iptables -A laninet -p tcp -d 195.130.225.172 --dport 110 -j ACCEPT iptables -A laninet -p tcp -d 212.216.176.129 --dport 110 -j ACCEPT iptables -A laninet -p tcp -d 62.211.72.30 --dport 110 -j ACCEPT iptables -A laninet -p tcp -d 62.211.72.20 --dport 25 -j ACCEPT iptables -A laninet -p tcp -d 217.169.102.100 --dport 25 -j ACCEPT # abilitiamo la chat di MSN,C6,ICQ e le richieste VNC in uscita iptables -A laninet -p tcp --dport 1863 -j ACCEPT iptables -A laninet -p tcp --dport 4800 -j ACCEPT iptables -A laninet -p tcp --dport 5190 -j ACCEPT iptables -A laninet -p tcp --dport 5900 -j ACCEPT # abilito lo streaming radio di Radio Sherwood permettendo # il traffico diretto al'IP e alla porta del loro web link iptables -A laninet -p tcp -d 62.101.68.187 --dport 8000 -j ACCEPT # abilito lo streaming al'IP e alla porta 8000 di Gamma5 iptables -A laninet -p tcp -d 82.50.211.234 --dport 8000 -j ACCEPT # abilito il gioco on-line di yahoo! Games che usa la TCP 11999 iptables -A laninet -p tcp --dport 11999 -j ACCEPT # permetto le connessioni in corso iptables -A laninet -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # permetto le connessioni in corso anche per le VPN sul protocollo GRE (47) iptables -A laninet -p 47 -m state --state ESTABLISHED,RELATED -j ACCEPT # risolvo i problemi di timeout di risposta dei server iptables -A laninet -p tcp -j REJECT --reject-with tcp-reset # # ora passo alla catena in transito da internet verso la lan # # droppa tutto quello che ha come indirizzo sorgente la mia lan iptables -A inetlan -s 192.168.0.0/24 -j DROP # passo a definire le regole per la VPN dall'esterno: # permetto il transito del protocollo 47 (GRE) verso il Server Windows 2k # sulla interfaccia verso Linux (segue la regola di NAT in fondo) iptables -A inetlan -p 47 -d 192.168.0.250 -j ACCEPT # permetto il transito del protocollo TCP 1723 sempre verso il Server windows # sulla interfaccia esterna (segue la regola di NAT in fondo) iptables -A inetlan -p tcp -d 192.168.0.250 --dport 1723 -j ACCEPT # permetto il transito del protocollo TCP 5900 per il VNC in entrata sempre # verso la interfaccia esterna del server (segue la regola di NAT in fondo) iptables -A inetlan -p tcp -d 192.168.0.250 --dport 5900 -j ACCEPT # permetto il transito del protocollo TCP 8082 per OWA di Exchange in entrata # sempre verso la interfaccia esterna del server (segue la regola di NAT) iptables -A inetlan -p tcp -d 192.168.0.250 --dport 8082 -j ACCEPT iptables -A inetlan -p tcp -d 192.168.0.250 --dport 80 -j ACCEPT # le solite due regole fondamentali # cioè quelle di far transitare solo i pacchetti in risposta a delle mie # richieste provenienti dall'interno, così da evitare che qualcuno # o qualcosa dall'esterno ne crei delle nuove per poter penetrare # iptables -A inetlan -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A inetlan -p tcp -j REJECT --reject-with tcp-reset # # # ora e'il caso di far partire il FORWARD tra le schede di rete echo 1 > /proc/sys/net/ipv4/ip_forward # # la cosa piu' importante ora e' far partire il mascheramneto altrimenti # non funzionera' nulla di tutto quello fatto # quindi: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # adesso nella tabella di nat appendo alla catena di PREROUTING l'instradamento # vero e prorpio iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 1723 -j DNAT --to 192.168.0.250:1723 iptables -t nat -A PREROUTING -p 47 -i eth1 -j DNAT --to 192.168.0.250 iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 5900 -j DNAT --to 192.168.0.250:5900 #regola che funziona iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 8082 -j DNAT --to 192.168.0.250:8082 # REGOLA CHE NON FUNZIONA iptables -t nat -A PREROUTING -p-tcp -i eth1 --dport 80 -j DNAT --to 192.168.0.250:8082 RAGA ho prvato anche il REDIRECT ma nulla, poi ho specificato sul POSTROUTING che tutto il traffico proveniente dal SERVER dalla porta 8082 e destinato alla 8082 me lo mascheri con la porta 80 (per disperazione!!!). Non so davvero dove sbaglio ed ormai la mia mente comincia a schiatarsi. Spero qualcuno possa aiutarmi in questo senso. NATURALMENTE sono a conoscenza che esistono ditribuzioni migliori, firewall basati su linux avvianti da floppy o CD, oppure firewall fisici, so anche dovrei buttare via tutto Windows 2000 server etc etc etc etc. SONO pienamente cosciente che esitono alternative migliori, di qualità ed accetto volentieri ogni suggerimento in merito ..... ma il mio scopo adesso è capire come far funzionare questa dannata regola se non altro per imparare una cosa in più. GRAZIE A TUTTI VOI |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Intanto che mi riprendo dal malditesta per aver cercato di capire tutto quello che hai scritto, noto inizialmente che questa regola
iptables -A inetlan -p tcp -d 192.168.0.250 --dport 80 -j ACCEPT è superflua in quanto la dnat della porta 80 deve impedire che accada. A parte questo, ti consiglio di togliere tutte le regole tranne quelle che hanno a che vedere con la porta 80->8082, e utilizzare degli opportuni target LOG per capire dove è l'inghippo. Altra prova che potresti fare, giusto per scrupolo, è aggiungere un MASQUERADE in POSTROUTING se il target è 192.168.0.250 e la porta 8082. Hai visto mai...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:19.