Condividi tramite


Parte 2.4 - Proteggere Linux usando il firewall locale e consentire l'accesso HTTP remoto

Si applica a: .NET Core 2.1, .NET Core 3.1, .NET 5

Questo articolo illustra come configurare un firewall locale per proteggere la macchina virtuale Linux.

Prerequisiti

Non esistono prerequisiti per completare questa parte dell'esercitazione.

Obiettivo di questa parte

Si apprenderà come proteggere la macchina virtuale Linux configurando un firewall.

Anche se non esistono prerequisiti per questa parte, la configurazione ideale seguirà le indicazioni delle parti precedenti. È necessario disporre degli elementi seguenti:

  • Nginx in esecuzione automaticamente e in ascolto delle richieste inviate sulla porta 80
  • Nginx configurato come proxy inverso e routing delle richieste in ingresso a un'applicazione ASP.NET Core in ascolto sulla porta 5000.
  • Applicazione ASP.NET Core configurata per l'avvio automatico dopo il riavvio del server o quando il processo viene arrestato o si arresta in modo anomalo

Configurare un firewall locale per consentire l'accesso da computer remoti

Quasi tutte le distribuzioni linux includono un firewall locale denominato iptables. Questa guida per principianti è sufficiente per una guida introduttiva. Iptables è un firewall leggero ma potente che usa catene di criteri per consentire o bloccare il traffico.

In base alla pagina della Guida della community ubuntu, per impostazione predefinita, iptables è installato in tutte le distribuzioni di Ubuntu ufficiali ed è configurato per consentire tutto il traffico.

Anche se iptables è un firewall leggero, non è facile gestire le regole persistenti. Fortunatamente, esistono diversi strumenti di configurazione del firewall che semplificano notevolmente l'attività di configurazione delle regole del firewall in Linux. In base alla documentazione ufficiale del firewall Ubuntu, lo strumento di configurazione del firewall predefinito per Ubuntu è ufw. Questo strumento fornisce un metodo più intuitivo rispetto a iptables per creare un firewall basato su host IPv4 o IPv6.

Note

ufw inizialmente è disabilitato per impostazione predefinita. Pertanto, è necessario abilitarlo per poterlo usare.

La macchina virtuale Linux usata in questa esercitazione non è protetta da alcuna regola del firewall. Ciò è dovuto al fatto che, sebbene iptables sia installato e in esecuzione, non esistono regole definite.

Screenshot del comando sudo iptables.

L'obiettivo è consentire solo il traffico HTTP e SSH (Secure Shell) per raggiungere la macchina virtuale dall'esterno. A tale scopo, seguire questa procedura:

  1. Prima di abilitare ufw, assicurarsi che la regola dei criteri predefinita sia impostata per consentire. In caso contrario, si rischia di perdere la connessione SSH alla macchina virtuale. La regola predefinita è la regola elaborata se non viene trovata alcuna corrispondenza con altre regole. L'abilitazione della regola predefinita "consenti" garantisce che il traffico SSH in ingresso non sia bloccato. A questo punto, non esiste alcuna regola di "negazione". Di conseguenza, tutto il traffico in ingresso è consentito.
  2. Importante

    Aggiungere in modo esplicito regole SSH e HTTP "allow". Si noti anche che, se la porta SSH è stata configurata su un valore diverso rispetto al valore predefinito 22, è necessario consentire tale porta. Ad esempio, se la porta SSH è stata modificata in 2222, è necessario eseguire questo comando: sudo ufw allow 2222.

  3. Impostare la regola predefinita come regola "nega". Ciò garantisce che se il protocollo è diverso da SSH o HTTP, la regola predefinita "deny" negherà il traffico. Ad esempio, il traffico HTTP in ingresso verrà negato.
  4. Abilitare .ufw

I comandi per questi passaggi sono elencati nello screenshot seguente.

Screenshot di sei comandi sudo.

Questo è ciò che si verifica in ogni passaggio.

  1. controlla lo stato dell'oggetto ufw eseguendo il sudo ufw status verbose comando . Per impostazione predefinita, l'oggetto ufw non è abilitato ed è inattivo.

  2. esegue sudo ufw default allow il comando . Poiché non esiste alcuna regola diversa dalla regola predefinita "consenti", ogni porta nella macchina virtuale verrà considerata aperta.

  3. Importante

    Aggiungere il protocollo SSH all'elenco di elementi consentiti eseguendo il sudo ufw allow ssh comando . Protocol.ssh è un protocollo noto ed è definito nel file /etc/services . Di conseguenza, "ssh" può essere usato invece di "22". Tenere presente che se si configura il servizio SSH per l'ascolto su una porta diversa dalla porta predefinita 22, è necessario aggiungere in modo esplicito l'altra porta. Ad esempio, se si configura SSH per l'ascolto della porta 2222, eseguire questo comando: sudo ufw allow 2222.

  4. Consentire il protocollo HTTP eseguendo sudo ufw allow http. HTTP è un protocollo noto definito nel file /etc/services. Di conseguenza, è possibile usare il nome del protocollo e il sudo ufw allow http comando può essere eseguito. Anche l'esecuzione sudo ufw allow 80 è perfettamente valida.

    Note

    Dopo aver consentito entrambi i protocolli SSH e HTTP, è necessario aggiungere tutti gli altri protocolli all'elenco "deny".

  5. A tale scopo, è possibile modificare la regola predefinita in modo da rifiutare eseguendo il sudo ufw default deny comando . Saranno consentiti solo i protocolli SSH e HTTP. Gli altri protocolli verranno negati.

  6. Abilitare ufw.

Ecco l'output sudo ufw status verbose dopo aver completato questa procedura.

Screenshot del comando sudo ufw status verbose.

Dopo aver configurato il firewall, verificare se funziona.

Testare il firewall locale

Testare il firewall è semplice: creare una regola "nega" per il protocollo HTTP e quindi provare ad accedere al sito da un altro computer. La richiesta deve essere bloccata.

Prima di creare questa regola di negazione, assicurarsi che l'applicazione sia accessibile al browser nella configurazione corrente. A tale scopo, modificare il file C:\Windows\System32\drivers\etc\hosts nel computer client aggiungendo il nome host buggyamb e usando l'indirizzo IP pubblico della macchina virtuale Linux. Il nome host buggyamb risolve l'indirizzo IP della macchina virtuale Linux. È possibile aggiungere qualsiasi nome host al file hosts oppure provare a connettersi direttamente all'indirizzo IP pubblico della macchina virtuale Linux.

Screenshot della pagina iniziale.

Dopo aver verificato che le richieste HTTP possano raggiungere la macchina virtuale, provare ad abilitare una regola che blocca il traffico HTTP. Questo è assicurarsi che il firewall funzioni. A tale scopo, aggiungere una regola "nega" per HTTP eseguendo sudo ufw deny http. In questo modo vengono aggiunte due regole di "negazione" per il protocollo HTTP (sulla porta 80). Uno è per IPv4, l'altro è per IPv6.

Screenshot del comando http sudo ufw deny.

Aprire di nuovo il browser e quindi provare ad accedere all'applicazione ASP.NET Core in esecuzione in Linux.

Screenshot della pagina non valida.

Questo screenshot mostra il risultato previsto.

È possibile eseguire un test simile direttamente all'interno della macchina virtuale Linux usando il wget comando . Lo screenshot seguente mostra i passaggi necessari per lo stesso test eseguendo wget.

Screenshot dei comandi sudo four.

Questo è ciò che si verifica in ogni passaggio.

  1. È stata aggiunta la regola "deny" per il protocollo HTTP.

  2. Il wget buggyamb-external comando è stato eseguito. Come si può immaginare, il nome host "buggyamb-external" risolve l'indirizzo IP pubblico della macchina virtuale Linux. A tale scopo, modificare il /etc/hosts file usando vi. Come illustrato, wget si è tentato di connettersi a esso, ma non è mai riuscito. Per interrompere l'operazione, è necessario premere CTRL+C.

  3. È stata aggiunta una regola "consenti" per il protocollo HTTP.

  4. L'esecuzione del wget buggyamb-external comando produce di nuovo risultati diversi. Questa volta, wget è stato in grado di connettersi perché il protocollo HTTP è stato consentito. Come illustrato, wget scarica il file Index.html nella directory corrente.

A questo punto si è un passo più vicino al completamento della configurazione necessaria per eseguire il debug dell'applicazione ASP.NET Core. Prima di passare alla parte successiva, assicurarsi di nuovo che sia SSH che HTTP siano consentiti nel firewall locale.

Screenshot del comando sudo ufw status.

Passaggi successivi

Parte 2.5: copiare i file dall'ambiente di sviluppo in una macchina virtuale Linux e quindi estrarre i file in Linux.