[CHIUSA] Incomprensione settaggio iptables

di il
7 risposte

[CHIUSA] Incomprensione settaggio iptables

Ciao a tutti.
Sono un hobbista e cerco di imparare iptables per crearmi un firewall normale:
Ho ideato questa soluzione; potreste dirmi perchè non mi funziona ?
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT


Da quel poco che comprendo , avrei potuto scrivere anche così per aver il medesimo modo:
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tpc --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT


Non comprendo perchè la connessione non funzioni: entrando nei motori di ricerca come google la connessione non è possibile.
Io imposto DROP all'inizio per chiudere qualsiasi tipo di connessione di pacchetti, poi scelgo quali debbano entrare.
Non bloccare de default le chiavi INPUT e OUTPUT credo che non avrebbe senso mettere in ACCEPT porte già abilitate in default.
Potreste spiegarmi come funziona ?
Ho sotto mano anche dei manuali, spunti da internet, ma nulla, non capisco il motivo.
Grazie.
Allegati:
20646_1f9e4fe070ebf1ca029b38c3b5b6509a.pdf
20646_1f9e4fe070ebf1ca029b38c3b5b6509a.pdf

7 Risposte

  • Re: [CHIUSA] Incomprensione settaggio iptables

    Se non sbaglio iptables segue le righe, quindi se alla prima riga blocchi tutto il traffico le successive righe non vengono proprio prese in considerazione, dovresti prima inserire quelle per le quali il traffico è accettato poi come ultima riga quella che blocca tutto.
    Quindi queste:
    iptables -A INPUT -j DROP
    iptables -A OUTPUT -j DROP
    dovrebbero stare alla fine.
  • Re: [CHIUSA] Incomprensione settaggio iptables

    Ciao, ho iniziato a capre le regole:
    prima di tutto devo impostare le policy a monte per ogni catena, in cui normalmente quella di OUTPUT è sempre aperta.
    iptables- P INPUT -j DROP
    iptables -P OUTPUT -j ACCEPT
    iptables -P FORWARD -j DROP
    poi posso bloccare o abilitare porte per specifici protocolli per ogni chiave, ma facendo attenzione che le chiavi droppate hanno necessità di un comando specifico per abilitare i soli protocolli senza intaccare la regola di POLICY che ho impostato DROP.
    esempio, mantenendo la struttura di POLICY come quella scritta: iptables -A INPUT --m state -m state RELATION,ESTABLISHED - j ACCEPT.
    Questo comando impartisce di accettare le connessioni da stabilite ed esistenti; non è consigliato inserire nel match state la possibilità di concedere una nuova connessione senza il controllo dell'utente (io): la sigla è NEW.
    Stesso ragionamento è da impartire anche alla chiave FORWARD che svolge la funzione di NAT/PAT per smistare i pacchetti: lo stato di mach state dovrà, per logica tecnica, avere la sola funzione: iptables -A FORWARD --m state --state ESTABLISHED
    Questo perchè il firewall deve far passare solo le connessioni esistenti nella macchina di rete (ESTABLISHED).
    Impostate le chiavi alle vostre esigenze, e per ogni chiave posso appendere delle regole per abilitare dei protocolli interessati se la chiave è impostata in DROP e lasciarli passare:
    iptables -A INPUT - p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p udp --dport 47 -j ACCEPT
    iptables -A INPUT -p udp --dport 53 -j ACCEPT

    Volendo posso anche aggiungere, per finezza, ma non conosco ancora bene la sintassi, di aggiungere per OUTPUT e INPUT una regola di appendere "I" da cui collocare e smistare determinati pacchetti, anche per diversi host della rete: normalmente ciò che sto per scrivere è utilizzato per un rete privata o NAS.
    iptables -A INPUT -p tcp -I eth1 -s 192.168.0.1 --d 192.168.x.x --dport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT. Poi ovviamente dovranno essere aperte porte particolari adibite alla porta aperta: in questo caso il collegamento dns e ip di porta è essenziale per la navigazione web dei protocolli ftp - http (47 , 57)
    Traduco la regola: mette una regola nella chiave INPUT e specifico che la porta di uscita ethernet (eth1) debba ricevere (d) e accettare da me (numero host "x.x") pacchetti per la determinata porta di rete (80).
    Viceversa di smistamento, devo inserire per l'ingresso eth0, ma nella chiave OUTPUT e mach state ESTABLISHED dato che devo essere sicuro che la sicurezza dei miei pacchetti sia collegata a servizi già stabiliti.
    Ricordarsi di inserire lo stato di mach (-m state) per concedere di accettare le connessioni stabilite ed esistenti nella rete dalla politica POLICY nelle catene che hanno il DROP.
    In questo modo permette che dall'esterno possano avviare una chiamata dal mio pc, ma a scapito che la gestione non sarà più controllata da me per quanto riguarda la sicurezza per la suddetta macchina host connessa, con un cliente sicuro e certificato: in questo caso i protocolli della porta 80 (e chiaramente anche della porta 443) sono sicuro perchè certificati per la navigazione in rete web.
    Per ricevere e avviare chiamate senza problemi, può essere indicato, per finezza, di accettare il protocollo della porta 80 sia in OUTPUT che INPUT.
    Difatti ritengo sia opportuna droppare tutte le chiavi e abilitare una personalizzazioni più strutturata per accettare determinati pacchetti e verifiche di prefix-log limitando il tempo di connessione.
    Non ho ancora capito come funzionano i prefix -log, diverse funzioni di regole di -j, ma al momento ho solo preso appunti da cui mi pare che servi per memorizzare la navigazione web... Non di più...
    Se qualcuno, o tu @vinnuy74man, puoi delucidarmi maggiormente le mie lacune e l'argomento del firewall, sarebbe una grande gratitudine: sto studiando, cercando di capire e associare nel limite delle mie conoscenze tecniche con la pratica, teoria ed esempi delle più grandi servizi di rete da internet.
  • Re: [CHIUSA] Incomprensione settaggio iptables

    Io non so su cosa precisamente stai lavorando, ma se devi creare un firewall a monte della tua rete ti consiglio di usare PfSense, è una distribuzione basata su FreeBSD, serve proprio per creare firewall con altissime prestazioni e in modo da personalizzare ogni regola che ti serve, oltre a poter creare VPN basate sia su OpenVpn che su Ipsec, per l'amministrazione usi l'interfaccia web, purtroppo non esiste una traduzione in italiano, io la uso da un pò e va alla grande. Ovvio che se vuoi impostare un firewall su una macchina che utilizzi anche per altro non puoi usarlo, la macchina non ha bisogno di grandi risorse se vuoi solo un firewall se invece ti serve anche un proxy server allora un po di HDD e un po di ram, anche 32GB e 4GB vanno bene, poi almeno due schede di rete, una per l'adsl e l'altra per la tua rete interna.
  • Re: [CHIUSA] Incomprensione settaggio iptables

    Ciao "vinny74man".
    ok, seguirò il tuo suggerimento e dritte .
    Vorrei rimanere in tema per la sintassi del firewall se non disgusta:
    sto cercando di configurare, sempre per imparare, iptables in modo che mi avvii chiamate dall'esterno, all'interno specificando solo determinate porte nella stessa macchina: parole povere chiedo che il mio pc attivi solo le porte 80; 443 e che qualsiasi altra porta in OUTPUT e INPUT sia bloccata e non considerata.
    Nell'esempio avevo messo DROP in INPUT e richiedevo che accettasse le sole chiamate stabilite in OUTPUT con politica ACCESS: in questo modo avrei maggior sicurezza di non avviare chiamate dall'interno verso l'esterno ( iptables -A INPUT --m state -state ESTABLISHED)
    Mettendo OUTPUT -P ACCEPT, tutti i protocolli entrano nel pc.
    Come POLICY vorrei metterei tutto a DROP e poi aprire per ogni chiave le porte di trasmissione: non riesco a ideare una soluzione per le porte hht https.
    Riporto una mia idea di configurazione, ma non funziona mai:
    iptables -F
    iptables -X
    iptables -Z

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

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
    iptbles -A OUTPUT -p tcp --sport 443 -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  • Re: [CHIUSA] Incomprensione settaggio iptables

    Questo è quello che ho io su un server vps creato con l'aiuto di webmin
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m tcp -m state --dport 5000:6000 --state NEW -j ACCEPT
    -A INPUT -p tcp -m tcp -m state --dport 25000:25100 --state NEW -j ACCEPT
    ###########################   USER1   #############################
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 15500 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 18000 -j ACCEPT
    ###################################################################
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    
    puoi prenderlo come spunto ovviamente questo è solo per l'ingresso in uscita al momento non ho esigenze particolari.

    Se proprio non vuoi installare PfSense perchè magari non puoi, vedi Webmin, lo installi su qualsiasi macchina, ha la sua interfaccia web, imposti le tue regole con quello e vedi come eventualmente scriverle e poi quando hai abbastanza esperienza le scrivi direttamente, con webmin la configurazione di iptables è abbastanza comoda.
    Puoi anche installarlo su una macchina virtuale per capire la sintassi giusta e poi ti riporti le regole sulla macchina che ti serve.
    Non porta via molte risorse e ti agevola molto il lavoro.
  • Re: [CHIUSA] Incomprensione settaggio iptables

    Ciao.
    Sono riuscito a capire il problema del mio script: mettendo tutto a DROP mi ero dimenticato di aggiungere gli udp dei dns
    Ho guardato le varie porta da qui: https://it.wikipedia.org/wiki/Lista_di_porte_standar
    Scrivendo così lo script tutto funziona:
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT - p tcp --dport 80 -j ACCEPT
    iptables -A INPUT - p tcp --dport 443 -j ACCEPT
    iptables -A INPUT -p udp --dport 53 -j ACCEPT
    iptables -A INPUT -p udp --dport 47 -j ACCEPT
    iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
    iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
    iptables -A OUTPUT -p udp --sport 47 -j ACCEPT

    Ovviamente posso anche modificare la catena FORWARD, come nelle chiavi INPUT e OUTPUT, per gestire i pacchetti di reti, richiedendo però l'indirizzo ip da cui il firewall deve abilitare la sola connessione per il protocollo interessato da non bloccare; ecco un esempio:
    iptables -A FORWARD -s 192.168.0.1 -m state --state ESTABLISHED-RELATED -j ACCEPT
    iptables -A FORWARD -d 192.168.0.1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    Adesso inserisco (ATTENZIONE, NON AGGIUNGO NUOVE REGOLE con A, ma I) i dati per abilitare la connessione in ingresso e uscita al solo indirizzo ip di rete attuale in uso per specifici pacchetti, tipo quello dei dns che utilizzano protocolli udp port 53: l'indirizzo ip attuale è denominato nella stringa con sigla "$i".
    iptables - ­I FORWARD - ­p udp ­-s $i ­-d 192.168.0.1 --­­dport 53 -j ACCEPT
    iptables - I FORWARD - p udp -s 192.168.0.1 -d $1 --dport 53 -j ACCEPT

    Lasciando tutto droppato in FORWARD, ho impostato la macchina per la navigazione web su porte essenziali, ma se avessi necessità di inserire porte diverse, come quelle di E-mule o Torrent, o ideare un firewall che mi accetti determinate porte, mi basta aggiungerle, o modificare in lista e salvare lo script.
  • Re: [CHIUSA] Incomprensione settaggio iptables

    Sono riuscito a capire bene la tabella NAT/PAT: ho cancellato la domanda in cui chiedevo aiuto per capirla.
    Dunque: la tabella FILTER e la tabella NAT sono distinte, non c'è da fare confusione che le due siano insieme come avevo capito io.
    La tabella NAT smista i pacchetti che richiamiamo (OUTPUT) con la chiave POSTROUTING, ma dobbiamo specificare la sorgente (-s) del nostro indirizzo ip (esempio host 192.168.0.2) smistando il traffico dei dati che il nuovo host sta chiamando dall'esterno in "SNAT" (OUTPUT) con l'indirizzo " --to -source" esterno dalla rete interna del nostro host router (192.168.0.1).
    La stringa sarà così: iptables ­t nat ­A POSTROUTING ­-s 192.168.0.2 j SNAT –­to-­source "XXX.XXX.XX.XX"
    Procedimento inverso se vogliamo che il router dall'interno invii i pacchetti all'esterno: iptables -t nat -A PREROUTING -d "XXX.XXX.XX.XX" -jDNAT --to destination 192.168.0.1.
    Da notare che non ho inserito il "source" dopo "to", perchè i pacchetti sono in destinazione.
    Ho imparato una nuova regole da inserire nella tabella NAT: la catena POSTROUTING (OUTPUT) ­può mascherare i pacchetti dell'host interno (io), in modo che non siano chiamati all'esterno, specificandone l'interfaccia di rete " -o eth1": il comando è -j MASQUERADE
    ESEMPIO: iptables -t nat -A POSTEROUTING -s 192.168.0.2 -j MASQUERADE - o eth1.
    Come detto, i miei collegamenti nat sono mascherati, e il router non può leggerli e inviarli ad altri host.

    ­
Devi accedere o registrarti per scrivere nel forum
7 risposte