Facile configurazione di IPTables ed esempi su Ubuntu 16.04

introduzione

iptablesè un potente strumento utilizzato per configurare il firewall integrato del kernel Linux. Viene preinstallato sulla maggior parte delle distribuzioni Ubuntu, tuttavia se si utilizza una versione Ubuntu personalizzata o si esegue all'interno di un contenitore, molto probabilmente sarà necessario installarlo manualmente.

sudo apt-get install iptables iptables-persistent

Dopo l'installazione, se ti viene chiesto se salvare le tue regole attuali, al momento non ha importanza perché rimuoverai o creerai nuove regole in seguito.

Suggerimenti

È possibile utilizzare il netcatcomando (su un computer diverso dal proprio server) per verificare quali porte sono aperte o chiuse.

nc -z -w5 -v SERVER_IP PORT
  • nc è il comando netcat.
  • -z basta inviare un pacchetto senza payload.
  • -w5 attendere fino a 5 secondi per una risposta.
  • -v modalità dettagliata.
  • Sostituisci SERVER_IPcon il tuo indirizzo del server.
  • Sostituire PORTcon la porta che si desidera verificare se è aperta (ad es 22.).

Sul tuo server puoi usare il netstatcomando per vedere quali porte sono attualmente in attesa di connessioni.

sudo netstat -tulpn

Nota: sebbene netstatsia utile trovare le porte con cui si desidera lavorare, è necessario essere consapevoli delle applicazioni attualmente installate sul server e delle porte in ascolto, non è necessario consentire tutte le porte trovate netstatnell'output .

Sintassi

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTaggiungere una regola alla INPUTcatena, una catena è un insieme di regole, quelle che usiamo più su questa guida sarà INPUT, OUTPUTe PREROUTING.
  • -p tcpimpostato tcpcome protocollo a cui verrà applicata questa regola, è inoltre possibile utilizzare altri protocolli come udp, icmpo all.
  • -m tcpusa il tcpmodulo. iptablessupporta funzionalità aggiuntive tramite moduli, alcuni dei quali sono già preinstallati iptablese altri, come il geoipmodulo.
  • --dport 22i comandi che iniziano con --indicano opzioni aggiuntive per il modulo precedentemente utilizzato, in questo caso diremo al tcpmodulo di applicare solo alla porta 22.
  • -m geoipusa il geoipmodulo. Limiterà i pacchetti su base nazionale (ulteriori informazioni al passaggio 5).
  • --src-cc PEdi 'al geoipmodulo di limitare i pacchetti in arrivo a quelli che provengono dal Perù. Per più codici paese cercare ISO 3166 country codessu Internet.
  • -j ACCEPTl' -jargomento dice iptablescosa fare se un pacchetto corrisponde ai vincoli specificati negli argomenti precedenti. In questo caso sarà ACCEPTquesti pacchetti, altre opzioni sono REJECT, DROPe altro ancora. Puoi trovare più opzioni cercando iptables jump targetssu Internet.

1. Nozioni di base

Elenca tutte le regole.

sudo iptables -L

Elenca tutti i comandi utilizzati per creare le regole attualmente utilizzate, utili per modificare o eliminare le regole.

sudo iptables -S

Per eliminare una regola specifica scegliere una regola sudo iptables -Se sostituirla -Acon -D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Elenca tutte le regole numerate nella INPUTcatena.

sudo iptables -L INPUT --line-numbers

Elimina una regola numerata.

sudo iptables -D INPUT 2

Per cancellare tutte le regole.

sudo iptables -F

Attenzione: potresti perdere la connessione se connesso tramite SSH .

Cancella solo le regole nella OUTPUTcatena.

sudo iptables -F OUTPUT

2. Creare regole iniziali

Consenti SSHsu eth0un'interfaccia

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 applica la regola a un'interfaccia specifica, per consentire a qualsiasi interfaccia di rimuovere questo comando.

Limitare i pacchetti in entrata a un IP specifico (ad es 10.0.3.1/32.).

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 specifica un IP / sottorete da cui consentire le connessioni.

Imposta le regole di catena predefinite.

Attenzione: prima di procedere assicurarsi di aver applicato le regole SSH corrette se si lavora su un server remoto .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP nega tutti i pacchetti in arrivo (ovvero nessuno sarà in grado di connettersi ai server in esecuzione come Apache, SQL, ecc.).
  • -P FORWARD DROP nega tutti i pacchetti inoltrati (ovvero quando si utilizza il sistema come router).
  • -P OUTPUT ACCEPTconsente tutti i pacchetti in uscita (ovvero quando si esegue una HTTPrichiesta).

Consenti tutto il traffico sull'interfaccia di loopback ( consigliata ).

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. Rendi persistenti le regole

Salva le iptablesregole correnti .

sudo netfilter-persistent save
sudo netfilter-persistent reload

Se stai eseguendo un contenitore, il netfilter-persistentcomando molto probabilmente non funzionerà, quindi devi riconfigurare il iptables-persistentpacchetto.

sudo dpkg-reconfigure iptables-persistent

4. Consenti connessioni in uscita

Consenti query DNS.

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Utilizzare il statemodulo per consentire RELATEDe i ESTABLISHEDpacchetti in uscita.

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Consentire le porte desiderate; in questo caso, HTTPporte.

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Altre porte che potresti voler usare.

  • FTP: tcp alla porta 21
  • HTTPS: TCP alla porta 443
  • DHCP: udp alla porta 67
  • NTP: udp alla porta 123

Nota: se si desidera consentire apt-get, potrebbe essere necessario consentire FTPeHTTPS .

Consentire il traffico restituito solo per RELATEDe già ESTABLISHEDconnessioni ( consigliato perché a volte è richiesta la comunicazione bidirezionale).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Altre regole utili

Consenti richieste ping dall'esterno.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Inoltra il traffico sulla eth0porta 2200a 10.0.3.21:22(utile se si desidera esporre un server SSH in esecuzione all'interno di un contenitore).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

Se accedi correttamente al tuo server usando SSH, verrà creata una connessione permanente (cioè nessuna nuova connessione anche se sei connesso per più di 1 ora). Se non si riesce e si tenta di accedere nuovamente, verrà creata una nuova connessione. Ciò bloccherà i tentativi di accesso SSH continui limitando le nuove connessioni all'ora.

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

Reindirizzare tutte le richieste da porta 443a porta 4430(utile se si desidera associare alla porta 443senza root).

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 l'interfaccia di rete.
  • -m geoip modulo blocco paese (vedi passaggio 5).

Avvertenza: non utilizzare lo, il sistema operativo eliminerà tutti i pacchetti reindirizzati all'interfaccia di loopback .

5. Consentire o bloccare interi paesi

5.1 Installa xtables-addons

Puoi installare il xtables-addonsmodulo usando vari metodi, sentiti libero di usare il metodo di installazione che funziona meglio per te.

  • Installa usando apt-get.

    sudo apt-get install xtables-addons-common
    
  • Installa usando module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • Installa dalla fonte.

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

Costruire un database "paesi".

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

Riavvia il tuo sistema.

sudo reboot

Dopo che xtables-addonsè stato installato con successo, dopo il primo riavvio, eseguire depmodaltrimenti il ​​blocco paese non funzionerà correttamente (questo è necessario solo per la prima volta).

sudo depmod 

Creare uno script su /etc/cron.monthly/geoip-updaterper aggiornare il geoipdatabase mensilmente.

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

Rendi /etc/cron.monthly/geoip-updatereseguibile.

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 Regole di esempio

_Nota: se si riceve un iptables: No chain/target/match by that nameerrore durante il tentativo di applicare una geoipregola, è possibile che xtables-addonsnon sia stato installato correttamente. Prova un altro metodo di installazione.

Blocca tutti i pacchetti in arrivo da Cina, Hong Kong, Russia e Corea.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

Consentire i pacchetti in entrata sul porto 80da qualsiasi luogo tranne i paesi sopra.

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Consenti pacchetti in entrata ens3sull'interfaccia sulla porta 22solo dal Perù (sentiti libero di scegliere il prefisso da cui vuoi accettare i pacchetti, ad esempio, USper gli Stati Uniti).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

Consentire i pacchetti in entrata sul porto 443solo dal Perù.

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Leave a Comment

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.