Ricerca nel sito web

Come configurare Dante Proxy per connessioni private su Debian 11


introduzione

I server proxy sono un tipo di applicazione server che funge da gateway tra un utente finale e una risorsa Internet. Attraverso un server proxy, un utente finale è in grado di controllare e monitorare il proprio traffico Web per un'ampia varietà di scopi, tra cui privacy, sicurezza e memorizzazione nella cache. Ad esempio, puoi utilizzare un server proxy per effettuare richieste Web da un indirizzo IP diverso dal tuo. Puoi anche utilizzare un server proxy per ricercare in che modo il Web viene servito in modo diverso da una giurisdizione all'altra o evitare alcuni metodi di sorveglianza o limitazione del traffico Web.

Dante è un proxy SOCKS stabile, popolare e open source. In questo tutorial, installerai e configurerai Dante per fornire un proxy SOCKS su un server Debian 11.

Prerequisiti

Per completare questa guida avrai bisogno di:

  • Un server Debian 11 e un utente non root con privilegi sudo. Puoi saperne di più su come configurare un utente con questi privilegi nella nostra guida Configurazione iniziale del server con Debian 11.

Utilizzerai il nome di dominio tuo_dominio in questo tutorial, ma dovresti sostituirlo con il tuo nome di dominio o indirizzo IP.

Passaggio 1: installazione di Dante

Dante è un server proxy SOCKS open source. SOCKS è un protocollo meno diffuso, ma è più efficiente per alcune applicazioni peer-to-peer ed è preferito a HTTP per alcuni tipi di traffico. Inizia eseguendo i seguenti comandi come utente non root per aggiornare gli elenchi dei pacchetti e installare Dante:

  1. sudo apt update
  2. sudo apt install dante-server

Dante imposterà automaticamente anche un servizio in background e si avvierà dopo l'installazione. Tuttavia, è progettato per chiudersi normalmente con un messaggio di errore la prima volta che viene eseguito, perché viene fornito con tutte le sue funzionalità disabilitate. Puoi verificarlo usando il comando systemctl:

  1. systemctl status danted.service
Output
● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-12-15 21:48:22 UTC; 1min 45s ago Docs: man:danted(8) man:danted.conf(5) Main PID: 14496 (code=exited, status=1/FAILURE) Dec 15 21:48:21 proxies systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)... Dec 15 21:48:22 proxies systemd[1]: Started SOCKS (v4 and v5) proxy daemon (danted). Dec 15 21:48:22 proxies danted[14496]: Dec 15 21:48:22 (1639604902.102601) danted[14496]: warning: checkconfig(): no socks authentication methods enabled. This means all socks requests will be blocked after negotiation. Perhaps this is not intended?

Per avviare correttamente i servizi di Dante, dovrai abilitarli nel file di configurazione.

Il file di configurazione di Dante è fornito, per impostazione predefinita, in /etc/danted.conf. Se apri questo file usando nano o il tuo editor di testo preferito, vedrai un lungo elenco di opzioni di configurazione, tutte disabilitate. Potresti provare a navigare attraverso questo file e abilitare alcune opzioni riga per riga, ma in pratica sarà più efficiente e più leggibile eliminare questo file e sostituirlo da zero. Non preoccuparti di farlo. Puoi sempre rivedere la configurazione predefinita di Dante navigando nell'elenco dei pacchetti per ottenere nuovamente il file di configurazione dello stock, se lo desideri. Nel frattempo, vai avanti ed eliminalo:

  1. sudo rm /etc/danted.conf

Ora puoi sostituirlo con qualcosa di più conciso. L'apertura di un file con un editor di testo creerà automaticamente il file se non esiste, quindi utilizzando nano o il tuo editor di testo preferito, ora dovresti ottenere un file di configurazione vuoto:

  1. sudo nano /etc/danted.conf

Aggiungi i seguenti contenuti:

logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
internal: 0.0.0.0 port=1080

# The proxying network interface or address.
external: eth0

# socks-rules determine what is proxied through the external interface.
socksmethod: username

# client-rules determine who can connect to the internal interface.
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

Ora hai una configurazione del server SOCKS utilizzabile, in esecuzione sulla porta 1080, che è una convenzione comune per SOCKS. Puoi anche suddividere il resto di questo file di configurazione riga per riga:

  • logoutput si riferisce al modo in cui Dante registrerà le connessioni, in questo caso utilizzando la normale registrazione del sistema
  • user.privileged consente a Dante di avere i permessi di root per il controllo dei permessi
  • user.unprivileged non concede al server alcuna autorizzazione per l'esecuzione come utente senza privilegi, in quanto ciò non è necessario quando non si concedono autorizzazioni più granulari
  • I dettagli della connessione
  • interna specificano la porta su cui è in esecuzione il servizio e quali indirizzi IP possono connettersi
  • I dettagli della connessione
  • external specificano l'interfaccia di rete utilizzata per le connessioni in uscita, eth0 per impostazione predefinita sulla maggior parte dei server

Il resto dei dettagli di configurazione riguarda i metodi di autenticazione, discussi nella sezione successiva. Non dimenticare di aprire la porta 1080 nel tuo firewall se stai usando ufw:

  1. sudo ufw allow 1080

A questo punto, potresti riavviare Dante e connetterti ad esso, ma avresti un server SOCKS aperto a tutto il mondo, cosa che probabilmente non vuoi, quindi prima imparerai come proteggerlo.

Passaggio 2: protezione di Dante

Se hai seguito questo tutorial finora, Dante utilizzerà i normali account utente Linux per l'autenticazione. Questo è utile, ma la password utilizzata per quella connessione verrà inviata in testo normale, quindi è importante creare un utente SOCKS dedicato che non disponga di altri privilegi di accesso. Per fare ciò, utilizzerai useradd con flag che non assegneranno una shell di login all'utente, quindi imposterai una password:

  1. sudo useradd -r -s /bin/false your_dante_user
  2. sudo passwd your_dante_user

Ti consigliamo inoltre di evitare di accedere a questo account tramite una connessione wireless non protetta o di condividere il server troppo ampiamente. In caso contrario, gli attori malintenzionati possono e faranno ripetuti sforzi per accedere.

Dante supporta altri metodi di autenticazione, ma molti client (ad esempio applicazioni) che si connetteranno ai proxy SOCKS supportano solo l'autenticazione di base con nome utente e password, quindi potresti voler lasciare quella parte così com'è. Quello che puoi fare in alternativa è limitare l'accesso solo a specifici indirizzi IP. Questa non è l'opzione più sofisticata, ma data la combinazione di tecnologie in uso qui, è sensata. Potresti aver già imparato come limitare l'accesso a indirizzi IP specifici con ufw dai nostri tutorial sui prerequisiti , ma puoi anche farlo direttamente all'interno di Dante. Modifica il tuo /etc/danted.conf:

  1. sudo nano /etc/danted.conf
…
client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

Per supportare più indirizzi IP, puoi utilizzare la notazione CIDR o semplicemente aggiungere un altro blocco di configurazione client pass {}:

client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

client pass {
    from: another_ip_address/0 to: 0.0.0.0/0
}

Successivamente, puoi finalmente riavviare Dante con le modifiche alla configurazione.

  1. sudo systemctl restart danted.service

Questa volta, quando controlli lo stato del servizio, dovresti vederlo funzionare senza errori:

  1. systemctl status danted.service
Output
● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enable> Active: active (running) since Thu 2021-12-16 18:06:26 UTC; 24h ago

Nel passaggio successivo, ti connetterai finalmente al tuo proxy.

Passaggio 3: connessione tramite Dante

Per dimostrare il tuo server Dante, utilizzerai un programma a riga di comando chiamato curl, popolare per effettuare diversi tipi di richieste web. In generale, se vuoi verificare se una data connessione dovrebbe funzionare in un browser in circostanze ideali, dovresti sempre testare prima con curl. Utilizzerai curl sul tuo computer locale per fare ciò: è installato per impostazione predefinita su tutti i moderni ambienti Windows, Mac e Linux, quindi puoi aprire qualsiasi shell locale per eseguire questo comando:

  1. curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
Output
* Trying 68.183.159.74:1080... * SOCKS5 connect to IPv4 142.251.33.68:80 (locally resolved) * SOCKS5 request granted. * Connected to 68.183.159.74 (68.183.159.74) port 1080 (#0) > GET / HTTP/1.1 > Host: www.google.com …

Le credenziali che hai usato per curl ora dovrebbero funzionare ovunque tu voglia utilizzare il tuo nuovo server proxy.

Conclusione

In questo tutorial, hai imparato a distribuire un popolare endpoint API open source per l'inoltro del traffico con un sovraccarico minimo o nullo. Molte applicazioni hanno un supporto proxy integrato (spesso a livello di sistema operativo) che risale a decenni fa, rendendo questo stack proxy altamente riutilizzabile.

Successivamente, potresti voler imparare come distribuire Squid, un proxy HTTP che può essere eseguito insieme a Dante per il proxy di diversi tipi di traffico web.

Poiché uno dei casi d'uso più comuni per i server proxy è l'inoltro del traffico da e verso diverse regioni globali, potresti voler rivedere come utilizzare Ansible per automatizzare le distribuzioni del server in seguito, nel caso in cui ti ritrovi a voler duplicare questa configurazione in altri data center .