Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
L'obiettivo è consentire solo il traffico HTTP e SSH (Secure Shell) per raggiungere la macchina virtuale dall'esterno. A tale scopo, seguire questa procedura:
- 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. -
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
. - 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.
- Abilitare .
ufw
I comandi per questi passaggi sono elencati nello screenshot seguente.
Questo è ciò che si verifica in ogni passaggio.
controlla lo stato dell'oggetto ufw eseguendo il
sudo ufw status verbose
comando . Per impostazione predefinita, l'oggetto ufw non è abilitato ed è inattivo.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.-
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
. 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 ilsudo ufw allow http
comando può essere eseguito. Anche l'esecuzionesudo ufw allow 80
è perfettamente valida.Note
Dopo aver consentito entrambi i protocolli SSH e HTTP, è necessario aggiungere tutti gli altri protocolli all'elenco "deny".
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.Abilitare
ufw
.
Ecco l'output sudo ufw status verbose
dopo aver completato questa procedura.
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.
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.
Aprire di nuovo il browser e quindi provare ad accedere all'applicazione ASP.NET Core in esecuzione in Linux.
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
.
Questo è ciò che si verifica in ogni passaggio.
È stata aggiunta la regola "deny" per il protocollo HTTP.
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.È stata aggiunta una regola "consenti" per il protocollo HTTP.
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.