Configurar um proxy no Linux envolve definir variáveis de ambiente para as sessões de usuário, configurar o APT para o gerenciamento de pacotes e especificar as configurações de proxy para os serviços do Systemd, garantindo que todos os componentes do sistema consigam acessar redes externas através do proxy.
Muitos ambientes Linux operam atrás de firewalls corporativos ou exigem que o tráfego seja roteado por um servidor proxy para fins de segurança, registro ou controle de acesso. A configuração correta do proxy é crítica para o funcionamento do sistema, incluindo atualizações de software, acesso à internet para aplicações de usuário e comunicação de serviços em segundo plano. Este artigo detalha os métodos de configuração de proxy nos componentes mais comuns do Linux.
Variáveis de ambiente
Ambientes de shell e as aplicações que os herdam costumam depender de variáveis de ambiente padrão para a configuração de proxy. Essas variáveis definem o endereço do servidor proxy para tráfego HTTP, HTTPS e FTP, além das exceções para conexões diretas.
Variáveis de ambiente de proxy padrão
HTTP_PROXY: proxy para conexões HTTP.HTTPS_PROXY: proxy para conexões HTTPS.FTP_PROXY: proxy para conexões FTP.NO_PROXY: uma lista separada por vírgulas de nomes de host, endereços IP ou faixas CIDR que devem ignorar o proxy. Exemplo:localhost,127.0.0.1,*.local,192.168.0.0/24.
Essas variáveis diferenciam maiúsculas de minúsculas em alguns contextos (por exemplo, o wget costuma usar http_proxy em minúsculas, enquanto outros preferem HTTP_PROXY em maiúsculas). É prática comum definir as versões em maiúsculas e em minúsculas para maior compatibilidade.
Configuração temporária na sessão do shell
Para definir as variáveis de proxy na sessão atual do shell e em todos os processos iniciados a partir dela:
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
# Para compatibilidade, defina também as versões em minúsculas
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"
Substitua proxy.example.com:8080 pelo endereço e pela porta do seu servidor proxy. Se for necessária autenticação, inclua as credenciais: http://user:[email protected]:8080.
Configuração persistente por usuário
Para que as configurações de proxy persistam entre as sessões de login do usuário, adicione os comandos export ao arquivo de perfil do shell do usuário.
- Bash:
~/.bashrcou~/.profile - Zsh:
~/.zshrc
Exemplo para ~/.bashrc:
# Configurações de proxy
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"
Após modificar, carregue o arquivo ou saia e entre novamente: source ~/.bashrc.
Configuração persistente em todo o sistema
Para configurações de proxy válidas em todo o sistema, que afetam todos os usuários e alguns processos do sistema (embora não diretamente todos os serviços do Systemd), use /etc/environment ou arquivos em /etc/profile.d/.
/etc/environment
Este arquivo é lido pelo PAM (Pluggable Authentication Modules) no login, para todos os serviços e aplicações iniciados por um shell de login. Ele só aceita a sintaxe KEY="value", sem export.
HTTP_PROXY="http://proxy.example.com:8080"
HTTPS_PROXY="http://proxy.example.com:8080"
FTP_PROXY="http://proxy.example.com:8080"
NO_PROXY="localhost,127.0.0.1,.example.com"
http_proxy="http://proxy.example.com:8080"
https_proxy="http://proxy.example.com:8080"
ftp_proxy="http://proxy.example.com:8080"
no_proxy="localhost,127.0.0.1,.example.com"
Alterações em /etc/environment normalmente exigem reinicialização ou novo login para que as novas sessões as reconheçam.
/etc/profile.d/
Scripts colocados em /etc/profile.d/ são carregados pelos shells de login. Isso é adequado para definir variáveis de ambiente que exigem lógica ou instruções export. Crie um novo arquivo, por exemplo /etc/profile.d/proxy.sh:
#!/bin/bash
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"
Certifique-se de que o script seja executável: sudo chmod +x /etc/profile.d/proxy.sh.
sudo e variáveis de proxy
Ao usar sudo, as variáveis de ambiente costumam ser redefinidas por motivos de segurança. Para preservar as configurações de proxy em comandos executados com sudo:
- Use
sudo -E: isso preserva as variáveis de ambiente atuais.
bash sudo -E apt update - Configure o
sudoers: edite/etc/sudoerscomsudo visudoe adicione/modifiqueenv_keep.
Defaults env_keep += "HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY http_proxy https_proxy ftp_proxy no_proxy"
Essa abordagem geralmente é mais segura quesudo -Epara configurações persistentes do sistema.
APT (Advanced Package Tool)
O APT, gerenciador de pacotes usado pelas distribuições baseadas em Debian (por exemplo, Ubuntu), exige sua própria configuração de proxy, separada das variáveis de ambiente do shell.
Arquivo de configuração de proxy do APT
As configurações de proxy do APT são definidas em arquivos de configuração dentro de /etc/apt/apt.conf.d/. Crie um novo arquivo, por exemplo /etc/apt/apt.conf.d/01proxy, com o seguinte conteúdo:
Acquire::http::Proxy "http://proxy.example.com:8080/";
Acquire::https::Proxy "http://proxy.example.com:8080/";
# Acquire::ftp::Proxy "ftp://proxy.example.com:8080/"; # Descomente se necessário
Substitua proxy.example.com:8080 pelo endereço e pela porta do seu servidor proxy.
Se o proxy exigir autenticação:
Acquire::http::Proxy "http://user:[email protected]:8080/";
Acquire::https::Proxy "http://user:[email protected]:8080/";
Para hosts que devem ignorar o proxy do APT, use Acquire::NoProxy:
Acquire::NoProxy "localhost,127.0.0.1,archive.ubuntu.com";
Isso é menos usado que o NO_PROXY global, mas pode ser específico para o APT.
Depois de criar ou modificar o arquivo, o APT passará a usar essas configurações automaticamente nas operações seguintes (por exemplo, apt update, apt install). Não é necessário reiniciar nenhum serviço.
Serviços do Systemd
O Systemd gerencia serviços e aplicações do sistema. Os serviços iniciados pelo Systemd não herdam automaticamente as variáveis de ambiente de proxy definidas nos perfis de shell ou em /etc/environment. Cada unidade do Systemd que precisa de acesso via proxy deve ser configurada explicitamente.
Proxy para um serviço específico do Systemd
Para configurar as definições de proxy de um serviço individual do Systemd, crie um arquivo de override. Esse é o método recomendado para evitar a modificação direta dos arquivos de unidade originais, que podem ser sobrescritos durante atualizações de pacotes.
-
Crie um diretório de override:
bash sudo systemctl edit <service_name>
Esse comando abre um editor para/etc/systemd/system/<service_name>.service.d/override.conf. -
Adicione as variáveis de ambiente de proxy:
Dentro do editor, adicione a seção[Service]e as diretivasEnvironment:ini [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080" \ "HTTPS_PROXY=http://proxy.example.com:8080" \ "NO_PROXY=localhost,127.0.0.1" Environment="http_proxy=http://proxy.example.com:8080" \ "https_proxy=http://proxy.example.com:8080" \ "no_proxy=localhost,127.0.0.1"
Cada diretivaEnvironmentpode conter várias variáveis, separadas por espaços dentro das aspas, ou você pode usar várias linhasEnvironment. A\serve para continuação de linha no arquivo de override. -
Salve e saia: salve o arquivo. O Systemd recarregará o daemon automaticamente e perguntará se deseja reiniciar o serviço. Confirme a reinicialização. Se não for solicitado, recarregue e reinicie manualmente:
bash sudo systemctl daemon-reload sudo systemctl restart <service_name>
Configuração global de proxy do Systemd
Para serviços que não têm configurações de proxy específicas ou para definir um padrão em todo o sistema, configure o proxy no ambiente global do Systemd. Isso afeta todos os serviços que não sobrescreverem explicitamente essas variáveis.
-
Crie um diretório para configurações drop-in:
bash sudo mkdir -p /etc/systemd/system.conf.d/ -
Crie um arquivo de configuração de proxy:
bash sudo nano /etc/systemd/system.conf.d/proxy.conf -
Adicione as variáveis de ambiente de proxy:
ini [Manager] DefaultEnvironment="HTTP_PROXY=http://proxy.example.com:8080" DefaultEnvironment="HTTPS_PROXY=http://proxy.example.com:8080" DefaultEnvironment="NO_PROXY=localhost,127.0.0.1" DefaultEnvironment="http_proxy=http://proxy.example.com:8080" DefaultEnvironment="https_proxy=http://proxy.example.com:8080" DefaultEnvironment="no_proxy=localhost,127.0.0.1" -
Recarregue o daemon do Systemd e reinicie os serviços:
bash sudo systemctl daemon-reload sudo systemctl restart --all # Use com cautela, reinicia todos os serviços de usuário e de sistema
Reiniciar o sistema por completo costuma ser a forma mais segura de garantir que todos os serviços assumam essas mudanças globais.
Verificação
Após configurar as definições de proxy, verifique se estão funcionando:
- Variáveis de ambiente:
bash env | grep -i proxy - APT:
bash apt config dump | grep -i proxy
Tente uma atualização:sudo apt update. - Acesso geral à rede:
bash curl -v http://ifconfig.me
A saída deve mostrar o endereço IP do servidor proxy se o tráfego for roteado por ele, ou o seu IP externo se oNO_PROXYestiver em vigor. - Serviço do Systemd: verifique o status e os logs do serviço em busca de problemas de conectividade.
bash sudo systemctl status <service_name> sudo journalctl -u <service_name>
Você também pode inspecionar o ambiente do processo de um serviço em execução. Descubra o PID do serviço e então:
bash sudo cat /proc/<PID>/environ | tr '\0' '\n' | grep -i proxy
Comparação dos métodos de configuração de proxy
| Método | Escopo | Persistência | Componentes afetados | Exemplo de configuração |
|---|---|---|---|---|
| Ambiente de shell (temporário) | Sessão atual do shell | Não | Comandos iniciados no shell atual | export HTTP_PROXY="..." |
Perfil de usuário (~/.bashrc) |
Sessões de login do usuário | Sim | Aplicações do usuário, comandos de shell | Adicione linhas export ao ~/.bashrc |
Todo o sistema (/etc/environment) |
Todas as sessões de login, alguns processos do sistema | Sim | Shells de login, algumas aplicações (não Systemd) | HTTP_PROXY="..." em /etc/environment |
Todo o sistema (/etc/profile.d/) |
Todos os shells de login | Sim | Shells de login, aplicações iniciadas por eles | Script com linhas export em /etc/profile.d/ |
APT (/etc/apt/apt.conf.d/) |
Apenas o gerenciador de pacotes APT | Sim | apt, apt-get, aptitude |
Acquire::http::Proxy "..."; em 01proxy |
Override de serviço do Systemd (override.conf) |
Unidade específica do Systemd | Sim | Um serviço do Systemd | Environment="..." em /etc/systemd/system/<service>.service.d/override.conf |
Systemd global (system.conf.d/) |
Todos os serviços do Systemd (padrão) | Sim | Todos os serviços do Systemd, salvo sobrescrita | DefaultEnvironment="..." em /etc/systemd/system.conf.d/proxy.conf |
