Skip to content

Forward Proxy on Debian 12 Linode

NOTE

If you want a faster setup, see this guide.

Referred from this official doc.

By default, a Linode server within a VPC cannot access other networks, or the internet. However, you'll need internet access to download and install software packages (for ex, updating apt packages).

To achieve this, you need to either enable NAT or send traffic to a forward proxy, which acts as a gateway between the VPC and the public internet. NAT allows the server to present a public IP address to the wider network while using a VPC-based address inside the private network. A proxy, on the other hand, is a general term for any intermediate device or application lying between a client and the target server.

Using the forward proxy is recommended, as it greatly enhances security by hiding some or all of the original addressing information. To the destination server, the request appears to come from the forward proxy. All details about the originating VPC remain hidden.

This setup utilizes a Public (Proxy) Subnet, since the proxy server should be able to connect to internet.

Launch Linode for Forward Proxy

ParameterValue
Regionin-maa (Chennai)
OSDebian (Debian 12 as of 5-Jun-2025)
PlanNanode 1 GB (Shared CPU)
LabelGive your preferred label (Label can't have spaces)
Root PasswordCreate a Strong Password and store it in iCloud Passwords
SSH KeysYou can add an existing SSH key or add this later when you deploy a new server
Disk EncryptionEnable
VPCCreate and assign a VPC
SubnetSelect a different subnet under the same VPC
Auto-assign a VPC IPv4Enable
Assign a public IPv4Enable
FirewallCreate and assign a Firewall (that allows all outbound and no inbound)
BackupsDisable
Private IPDisable

TIP

Use LISH Console to connect to the Linode server.

Set timezone

Install all locales first to disable locale warnings:

shell
sudo apt-get install locales-all

All new Linode servers are set to UTC time by default. To change it to IST, use:

shell
timedatectl set-timezone 'Asia/Kolkata'

Confirm date by running date command in the terminal.

Disable Root Login

NOTE

LISH Console doesn't rely on SSH, so you can still access internals of your system using it, including root login.

  • First create a limited user account using:
shell
adduser piratedev
# You'll be prompted to provide password
  • Add new user to the sudo group for administrative privileges:
shell
adduser piratedev sudo
  • Exit and SSH as the new user using password:
shell
exit
ssh piratedev@<Linode IP>
  • Add SSH Public key (of your administrative system - Mac Mini in my case) to authorized keys:
shell
vi ~/.ssh/authorized_keys
  • Disable Root login and Password Authentication:
sh
sudo vi /etc/ssh/sshd_config
# Set `PasswordAuthentication` to `no`
# Set `PermitRootLogin` to `no`
# Set `AddressFamily` to `inet` (to disable IPv6 connections)
  • Restart SSH service:
sh
sudo systemctl restart sshd

Configure Firewall

Add the following inbound rules to the Forward proxy Firewall:

  • Allow ICMP (ping) traffic within the VPC:
    • Label: Choose a label
    • Protocol: ICMP
    • Ports: Leave this field blank
    • IP / Netmask: VPC CIDR block (10.0.0.0/24)
    • Action: Accept
  • Allow proxy traffic from other Linode servers within the VPC:
    • Label: Choose a label
    • Protocol: TCP
    • Ports: Custom (8080)
    • IP / Netmask: All VPC Subnet CIDR blocks
    • Action: Accept
  • Allow SSH connections from any administrative systems:
    • Label: Choose a label
    • Protocol: TCP
    • Ports: SSH (22)
    • IP / Netmask: Admin system's IP address (use /32 address)
    • Action: Accept

Install and Configure Apache

  • Install Apache package using:
shell
sudo apt update -y && sudo apt install apache2 -y
  • Enable the Apache modules that provide the forward proxy functionality:
shell
sudo a2enmod proxy proxy_http proxy_connect
  • Create and edit an Apache configuration file to store the forward proxy settings:
shell
sudo nano /etc/apache2/sites-available/fwd-proxy.conf
  • Use following config (change IP addresses if needed):
    • 10.0.2.2 is Proxy Server Private IP.
    • 10.0.0.0/24 is the VPC IP range.
shell
Listen 10.0.2.2:8080
<VirtualHost *:8080>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/fwd-proxy-error.log
    CustomLog ${APACHE_LOG_DIR}/fwd-proxy-access.log combined
    ProxyRequests On
    ProxyVia On
    <Proxy "*">
        Require ip 10.0.0.0/24
    </Proxy>
</VirtualHost>
  • Set the owner of the file to root:root and set the correct file permissions:
shell
sudo chown root:root /etc/apache2/sites-available/fwd-proxy.conf
sudo chmod 0644 /etc/apache2/sites-available/fwd-proxy.conf
  • Enable the Apache configuration file that was created in a previous step:
shell
sudo a2ensite fwd-proxy
  • Restart the Apache server to activate the new configuration:
shell
sudo systemctl restart apache2

Test connectivity from the other server

  • SSH into another Linode using Launch LISH Console link.
  • Add the following line to the apt proxy configuration:
shell
echo 'Acquire::http::proxy "http://10.0.2.2:8080";' > /etc/apt/apt.conf.d/proxy.conf
  • Test connectivity through forward proxy using:
shell
sudo apt update && sudo apt upgrade -y
  • To transmit curl requests, append the --proxy parameter to the request:
shell
curl --proxy 10.0.2.2:8080 http://google.com

🎉 Congrats! You should have a working Forward Proxy Server now.