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

Come installare la piattaforma del carrello LiteCart su Ubuntu 16.04

Come installare la piattaforma del carrello LiteCart su Ubuntu 16.04

LiteCart è una piattaforma di carrello degli acquisti gratuita e open source scritta in PHP, jQuery e HTML 5. È un software di e-commerce semplice, leggero e facile da usare

Installa la condivisione NFS su Debian

Installa la condivisione NFS su Debian

NFS è un file system basato su rete che consente ai computer di accedere ai file attraverso una rete di computer. Questa guida spiega come esporre le cartelle su NF

Configurazione iniziale del server sicuro di Ubuntu 18.04

Configurazione iniziale del server sicuro di Ubuntu 18.04

Introduzione Durante questo tutorial imparerai come configurare un livello base di sicurezza su una nuovissima macchina virtuale Vultr VC2 che esegue Ubunt

Installazione di McMyAdmin su Ubuntu 14.10

Installazione di McMyAdmin su Ubuntu 14.10

McMyAdmin è un pannello di controllo del server Minecraft utilizzato per amministrare il tuo server. Sebbene McMyAdmin sia gratuito, ci sono più edizioni, alcune delle quali sono pai

Installa un TeamTalk Server su Linux

Installa un TeamTalk Server su Linux

TeamTalk è un sistema di conferenza che consente agli utenti di avere conversazioni audio / video di alta qualità, chat di testo, trasferire file e condividere schermate. Io

Come installare e configurare CyberPanel sul server CentOS 7

Come installare e configurare CyberPanel sul server CentOS 7

Usi un sistema diverso? Introduzione CyberPanel è uno dei primi pannelli di controllo sul mercato che è sia open source che utilizza OpenLiteSpeed. Che cosa

Come installare e configurare Sensu Monitoring su CentOS 7

Come installare e configurare Sensu Monitoring su CentOS 7

Introduzione Sensu è una soluzione di monitoraggio gratuita e open source che può essere utilizzata per monitorare server, applicazioni e vari servizi di sistema. Sensu i

Installa phpBB con Apache su Ubuntu 16.04

Installa phpBB con Apache su Ubuntu 16.04

PhpBB è un programma di bacheca open source. Questo articolo ti mostrerà come installare phpBB su un server web Apache su Ubuntu 16.04. Era scritto

Installa un utente non root con accesso Sudo su Ubuntu

Installa un utente non root con accesso Sudo su Ubuntu

Avere un solo utente, che è root, può essere pericoloso. Quindi risolviamolo. Vultr ci offre la libertà di fare ciò che vogliamo con i nostri utenti e i nostri server

Come accedere al VPS Vultr

Come accedere al VPS Vultr

Vultr offre diversi modi per accedere al tuo VPS per configurare, installare e utilizzare. Credenziali di accesso Le credenziali di accesso predefinite per il tuo VPS ar

Installazione di Fuel CMS su Ubuntu 16.04 LTS

Installazione di Fuel CMS su Ubuntu 16.04 LTS

Usi un sistema diverso? Fuel CMS è un sistema di gestione dei contenuti basato su CodeIgniter. Il suo codice sorgente è ospitato su GitHub. Questa guida ti mostrerà come t

Come installare Couch CMS 2.0 su un VPS Debian 9 LAMP

Come installare Couch CMS 2.0 su un VPS Debian 9 LAMP

Usi un sistema diverso? Couch CMS è un sistema di gestione dei contenuti (CMS) semplice e flessibile, gratuito e open source che consente ai web designer di progettare

Come installare Golang 1.8.3 su CentOS 7, Ubuntu 16.04 e Debian 9

Come installare Golang 1.8.3 su CentOS 7, Ubuntu 16.04 e Debian 9

Golang è un linguaggio di programmazione sviluppato da Google. Grazie alla sua versatilità, semplicità e affidabilità, Golang è diventato uno dei più popolari

Come installare OpenMeetings su CentOS 7

Come installare OpenMeetings su CentOS 7

Usi un sistema diverso? Apache OpenMeetings è unapplicazione per conferenze Web open source. È scritto in Java e supporta più server di database. io

Come installare Quassel su Debian 9

Come installare Quassel su Debian 9

IRC è popolare tra gli sviluppatori e gli utenti di software open source. Uno degli svantaggi di IRC è quando non sei in linea, potresti perdere Importan

Come usare Sudo su Debian, CentOS e FreeBSD

Come usare Sudo su Debian, CentOS e FreeBSD

Luso di un utente sudo per accedere a un server ed eseguire comandi a livello di root è una pratica molto comune tra Linux e Unix Systems Administrator. Luso di un sud

Come installare RabbitMQ su CentOS 7

Come installare RabbitMQ su CentOS 7

Usando un sistema diverso? RabbitMQ è un broker di messaggi open source ampiamente utilizzato scritto nel linguaggio di programmazione Erlang. Come middleware orientato ai messaggi

Come abilitare TLS 1.3 in Apache su Fedora 30

Come abilitare TLS 1.3 in Apache su Fedora 30

Usi un sistema diverso? TLS 1.3 è una versione del protocollo TLS (Transport Layer Security) che è stato pubblicato nel 2018 come standard proposto in RFC 8446

Configurare un Chroot su Debian

Configurare un Chroot su Debian

Questo articolo ti insegnerà come impostare una prigione chroot su Debian. Presumo che tu stia usando Debian 7.x. Se usi Debian 6 o 8, questo potrebbe funzionare, bu

Come installare PiVPN su Debian

Come installare PiVPN su Debian

Introduzione Un modo semplice per configurare un server VPN su Debian è con PiVPN. PiVPN è un programma di installazione e wrapper per OpenVPN. Crea semplici comandi per te t

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.