System Settings Limitations
GNOME & KDE Plasma
In Linux desktops (GNOME, KDE Plasma), global Network Proxy settings (found under Settings → Network) act differently than on other OSs. While you can input a SOCKS IP and Port, there are no fields for a username and password.
Because of this, system GUI proxy settings function only as a "recommendation" for apps. They will not automatically authenticate apps. Most networking tools will simply reject the connection without the credentials.
Web Browsers
1. Firefox (Best Choice)
Firefox remains the most reliable option on Linux as it features full native support for SOCKS5 with authentication.
- Step 1: Go to
Settings→General→ scroll toNetwork Settingsand clickSettings... - Step 2: Select Manual proxy configuration.
- Step 3: Enter your SOCKS Host and Port, and check
SOCKS v5. - Step 4: Click OK. When you visit your first website, a prompt will appear asking for your proxy login and password. Check "Remember password".
about:config in the URL bar, search for network.proxy.socks_remote_dns, and switch it to true.
2. Chrome / Chromium / Edge / Brave
These browsers rely on the inadequate Linux system network stack. To circumvent this, you must use a dedicated proxy extension.
- Step 1: Install the Proxy SwitchyOmega from the extensions web store.
- Step 2: Open the extension options, create a new profile indicating
SOCKS5, and input your server details. - Step 3: Click the lock icon on the right side to enter your proxy authentication limits (Username and Password).
- Step 4: Apply changes and activate the profile via the extension toolbar icon.
Terminal Utilities & Environment Variables
Direct Commands: cURL, wget, git
cURL: Always use the --socks5-hostname flag so that DNS queries are securely resolved remotely over the proxy.
curl --socks5-hostname login:pass@ip:1080 https://api.ipify.org
Wget: Pass the proxy arguments explicitly.
wget --proxy=on --socks5-hostname=ip:1080 --proxy-user=login --proxy-password=pass https://example.com/file.zip
Git: You can apply the proxy configuration globally for all clones and pulls.
git config --global http.proxy "socks5://login:pass@ip:1080"
git config --global https.proxy "socks5://login:pass@ip:1080"
Environment Configuraion (The Universal approach)
The easiest way to make most console apps use a proxy is by setting standard networking Variables. You can set them for a specific session, or append them to your ~/.bashrc or ~/.zshrc file for persistence.
export ALL_PROXY="socks5://login:pass@ip:1080"
export HTTP_PROXY="socks5://login:pass@ip:1080"
export HTTPS_PROXY="socks5://login:pass@ip:1080"
# Important: Exclude local network routes
export NO_PROXY="localhost,127.0.0.1,.local,192.168.0.0/16"
Note on Security: Storing passwords within a plain text .bashrc file can be a vulnerability. In production environments, rely on encrypted variables or credential managers like pass.
Proxyfying Specific Applications (proxychains-ng)
For applications without native proxy configuration options (like Spotify, Discord, or Steam), the most reliable console tool on Linux is proxychains-ng. It acts as a wrapper, forcing the software's network traffic entirely through your custom proxy.
Installation and Usage
- Step 1: Get the package
# Ubuntu/Debian:
sudo apt install proxychains-ng
# Arch Linux:
sudo pacman -S proxychains-ng
- Step 2: Configure the server
Edit the configuration file (/etc/proxychains.confor~/.proxychains/proxychains.conf). At the end of the file under the[ProxyList]section, input your credentials:
socks5 1.2.3.4 1080 login pass
(Tip: Enable quiet_mode at the top of the file to stop proxychains from printing verbose logs on every connection).
- Step 3: Run your apps
Simply prepend the proxychains command to the application's executable:
proxychains curl https://api.ipify.org
proxychains spotify
Apps with Native SOCKS5 Support
Telegram Desktop
- Open Telegram
Settings→Advanced→Connection type. - Select
Use custom proxy. Choose theSOCKS5configuration type. - Enter your host, port, login, and password, then save.
qBittorrent
- Open the
Options→Connectiontab. - Select
SOCKS5in the Proxy Server section and apply auth details. - Critical: Ensure "Use proxy for peer connections" and "Use proxy for hostname lookups" are both checked.
Languages and Docker
1. Python
You need to install the SOCKS dependency before sending requests:
pip install requests[socks]
import requests
proxies = { "http": "socks5://user:[email protected]:1080", "https": "socks5://user:[email protected]:1080" }
response = requests.get("https://api.ipify.org", proxies=proxies, timeout=10)
print(response.text)
2. Node.js
Using the socks-proxy-agent package:
const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');
const agent = new SocksProxyAgent('socks5://user:[email protected]:1080');
axios.get('https://api.ipify.org', { httpsAgent: agent, httpAgent: agent })
.then(res => console.log(res.data));
3. Docker Setup
To pass proxy execution locally through a docker container, inject ENVs at runtime.
docker run --env HTTPS_PROXY="socks5://login:[email protected]:1080" my-image
To enforce the proxy on the Docker networking daemon scale, modify ~/.docker/daemon.json:
{
"proxies": {
"default": {
"httpsProxy": "socks5://login:[email protected]:1080"
}
}
}
Security Checklist & Alternative Tools
Redsocks (Transparent Traffic Routing)
If you want absolute, transparent, OS-wide traffic proxying without configuring exceptions per-app, administrators utilize redsocks alongside an iptables firewall.
RedSocks acts as an invisible system daemon. It translates generic TCP connections generated by the machine and feeds them directly into your authorized SOCKS5 endpoint.
Note: This process is complex, requires strict iptables rule chains to avoid network loopbacks, and warrants extensive testing within a Virtual Machine beforehand.
Local SSH Tunnels
If you control a remote server directly via SSH, you can instantiate a localized passwordless SOCKS5 tunnel dynamically using the SSH client, circumventing explicit configuration passwords inside application settings.
ssh -D 1080 -N -C [email protected]
After running this, an unauthenticated local tunnel is opened at 127.0.0.1:1080. You can point proxychains or your terminal utilities to that local host and bypass standard password exposure.
Critical Security Reminders
- Always specify NO_PROXY for Localhost:
export NO_PROXY="localhost,127.0.0.1,.local". Never route local docker containers or router-gateway IP requests to an external proxy server. - Secure Configurations: .env parameter structures shouldn't be publicly uploaded on Git repositories. Provide a file permissions hierarchy constraint:
chmod 600 ~/.bashrc - DNS Verification: Utilize dnsleaktest.com natively from your browser. SOCKS5 connections must also tunnel your IP lookups via
socks_remote_dns=trueto avoid leaking website visits to your ISP securely.
Found an error or the method isn't working?
Technology is constantly evolving. If the guide is outdated, you encounter an issue, or something isn't working — let us know! We will quickly verify the information and help you get set up.
Need personalized help?
Leverage the power of AI. We've prepared a specific prompt for ChatGPT that will analyze your situation and provide a step-by-step connection guide for your device.