List of open source/free proxy/forward proxy/reverse proxy/cache/ server software

Keywords:

Squid

A caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes a great server accelerator. It runs on most available operating systems, including Windows and is licensed under the GNU GPL.

  • Open source and Free
  • Forward proxy
  • Reverse proxy
  • Cache function
  • Log function
  • Very feature rich
  • Needs some time to configure (file based configuration)

Great for long term setup

-> Official website

FreeProxy Internet Suite

Services roughly divide into Proxy related services and Internet Server related services. Proxy services include HTTP, SMTP, POP3, SOCKS, FTP and a generalized TCP tunnel. The server services include a Web server (HTTP and HTTPS), SMTP with extensions and POP3. ISAPI plugins are accepted allowing for server side scripting such as PHP to be processed by the web server.

FreeProxy offers NTLM, Basic and Digest authentication for HTTP. Ban lists or Whitelists can be imported, URL filtering can be defined, Caching and logging can be configured.

  • Free
  • Forward proxy
  • Cache function
  • Log function
  • Feature rich
  • Very Easy to configure (Configure through GUI)

Great for quick setup and long term setup

-> Official website

Privoxy

Privoxy is a non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk. Privoxy has a flexible configuration and can be customized to suit individual needs and tastes. It has application for both stand-alone systems and multi-user networks.

  • Open source and Free
  • Forward proxy
  • No cache function
  • Log function
  • Needs some time to configure (file based configuration)

Good for filtering purpose

-> Official website

Other Noteworthy projects which can be used as proxy or proxy projects

Configure Squid proxy with php redirector

Squid proxy can be used with different redirectors and rewriters, in this guide we will be using a redirector written with php.

This guide is using Ubuntu 18.04 LTS, your configuration file maybe located differently if using different version or Linux distribution etc.

Note: Before starting following this guide, you have to make sure your squid proxy is configured properly and running without any issue.

Squid configuration

1 Open squid configuration file from

/etc/squid/squid.conf

or

/etc/squid3/squid.conf

For following steps, make sure you are using right path/configuration file (either /squid/ or /squid3/), I will be using /squid/

2 Add following line

url_rewrite_program /usr/bin/php /etc/squid/redirect.php

This indicates that we will be using an redirector/ url write program written in php so that we will need php binary to run the script thus “/usr/bin/php” the redorector file path is “/etc/squid/redirect.php” which means will be putting the “redirect.php” file under “/etc/squid”

PHP url rewrite program/redirector

1 We create a “redirect.php” file under “/etc/squid/”

2 We write necessary script

#!/usr/bin/php
<?php
//By https://dannyda.com
//Modified based on
//http://wiki.squid-cache.org/ConfigExamples/PhpRedirectors
//Using PHP for Redirects
 
//and
 
//https://aacable.wordpress.com/tag/squid-url-redirection/
//------------------------------------------------------------------------------
$temp = array();
// Extend stream timeout to 24 hours
stream_set_timeout(STDIN, 86400);
while ( $input = fgets(STDIN) ) {
  // Split the output (space delimited) from squid into an array.
  $temp = explode(' ', $input);
  // Set the URL from squid to a temporary holder.
  $output = $temp[0] . "\n";
	if(preg_match("/(.*[0-9])\/ABCD\/.*/i", $input)){
		//Replace any url matching xxx.xxx.xxx.xxx/ABCD/aaaaaaaaaaaaaaaaaaaaaa and change to to my.blocked.com/ABCD/aaaaaaaaaaaaaaaaaaaaaa
		$output = "308:".str_replace(parse_url($input,PHP_URL_HOST),'my.blocked.com',strtok($input, ' '))."\n"; //Outout intended modified url (308 Permanent Redirect)
		//file_put_contents("/etc/squid/a.txt", $input,FILE_APPEND); //For debugging we can enable this line, output will be found at /etc/squid/a.txt
		//$output = "302:"."http://www.google.com/"."\n"; //(302 Found, Moved Temporarily)
		
		//We can either output modified url based on ip address, partial url matching, domain matching and modify partialy as well or we can redirect to another url completely
		//Following by more examples
	}
	
	if(preg_match("/(.*[0-9])\/forum\/.*\/sign\=.*\.jpg/i", $input)){
		$output = "308:".str_replace(parse_url($input,PHP_URL_HOST),'mytestforum.com',strtok($input, ' '))."\n";
		// /forum/*/sign
	}
	
	if(preg_match("/(.*[0-9])\/forum\/pic\/item\/.*\.jpg/i", $input)){
		$output = "308:".str_replace(parse_url($input,PHP_URL_HOST),'mytestforum.com',strtok($input, ' '))."\n";
		// /forum/pic/item
	}
	//---------------------------------------------------------------------------
	//Temporarily block URLs based on partial url match with regular expression
	if(preg_match("/ad\.m\.domain\.com(\/.*|$)/i", $input)){
		$output = "308:"."http://255.255.255.255"."\n";
		//adash.m.taobao.com
	}
	if(preg_match("/.*admaster\.com.*/i", $input)){
		$output = "308:"."http://255.255.255.255"."\n";
		//*.admaster.com.cn
	}
	
	if(preg_match("/.*\/AdvertiseInterface\//i", $input)){
		$output = "308:"."http://255.255.255.255"."\n";
		//ad
		//http://albatrosscn.buddylync.com:8080/AdvertiseInterface/
	}
	
	if(preg_match("/.*\/advertise\//i", $input)){
		$output = "308:"."http://255.255.255.255"."\n";
		//ad
		//http://*/advertise/
	}
	
  echo $output;
}

3 We add execute permission

chmod +x /etc/squid/redirect.php

4 We restart squid

~# systemctl restart squid

5 Now we should be able to see the redirector in action

Extended reading

Bonus

Online regular expression testers

Which can help you craft desired regular expression for use within redirector

How to change Windows proxy settings using cmd/command prompt/registry/.cmd/.bat

Keywords: Microsoft Windows proxy, proxy settings, Registry, regedit, Registry Editor, wildcard

Method 1: Using Registry directly

Warning: Changing other parameters from registry might cause damage to operating system, please modify carefully.

1 Use Win + R key combination open “Run” window

Microsoft Windows - Run window
Microsoft Windows – Run window

2 Enter “regedit” then press “OK” button

3 Find following path

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
Microsoft Windows - Registry Editor
Microsoft Windows – Registry Editor

4 Change/Create “DWORD” Key “ProxyEnable”, Set value to “0” to disable proxy, “1” to enable proxy

Registry Editor - ProxyEnable
Registry Editor – ProxyEnable

If you have enabled proxy from Step 4, follow below steps to continue configuration process

5 Change/Create “String Value” Key “ProxyServer”, Set value to <proxy address>:<port>. e.g.

127.0.0.1:1234 OR myproxyname.com:5678
Registry Editor - ProxyServer
Registry Editor – ProxyServer

Extra: If you need to exclude some addresses from proxy follow Step 6

6 Change/Create “String Value” Key “ProxyOverride”, Set value to include desired addresses which you want to exclude

10.0.0.1;google.com;localhost;*.bing.com;<local>;192.168.100.*
Registry Editor - ProxyOverride
Registry Editor – ProxyOverride

*.bing.com: Any domain under bing.com e.g. ads.bing.com, cdn.bing.com

192.168.100.*: Including the whole subnet (192.168.100.1-192.168.100.254)

<local>: Check the “Don’t use the proxy server for local (intranet) addresses” from Windows Settings

Windows Settings - Proxy
Windows Settings – Proxy

Method 2: Using command prompt

1 Use Win + R key combination open “Run” window

  • Enter following command and hit Enter key to disable proxy
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
  • Enable proxy
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
  • Set proxy IP address and port
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d 10.0.1.1:1234 /f
  • Bypass for selected addresses
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "10.0.0.1;google.com;localhost;*.bing.com;192.168.100.*;<local>" /f
  • Clean proxy settings
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /f

Method 3: Import proxy settings by using Registry file

1 Save desired proxy settings to a text file then change file extension from “.txt” to “.reg”

e.g. Save following text to “proxy.reg”

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000001
"ProxyServer"="10.0.1.0:1234"
"ProxyOverride"="10.0.0.1;google.com;localhost;*.bing.com;192.168.100.*"

2 Double click on “proxy.reg”

proxy.reg
proxy.reg

3 Click on “Yes” if you see this Window

User Account Control (UAC) Window - Registry Editor
User Account Control (UAC) Window – Registry Editor

4 Click on “Yes” to continue

Registry Editor - "Adding information can unintentionally change of delete values and cause components to stop working correctly. If you do not trust the source of this information in .... .reg, do not add it to the registry." "Are you sure you want to continue?"
Registry Editor – “Adding information can unintentionally change of delete values and cause components to stop working correctly. If you do not trust the source of this information in …. .reg, do not add it to the registry.” “Are you sure you want to continue?”

5 Now the proxy settings is imported, click on “OK”.

Registry Editor - "The keys and values contained in .. .reg have been successfully added to the registry."
Registry Editor – “The keys and values contained in .. .reg have been successfully added to the registry.”

Method 4: Using “.cmd” “.bat” file

1 Create a text file

2 Add following content to the text file

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d 10.0.1.0:1234 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "10.0.0.1;google.com;localhost;*.bing.com;192.168.100.*" /f

3 Rename it to “enable-proxy.cmd” or “enable-proxy.bat”

4 Double click on enable-proxy.cmd” or “enable-proxy.bat”, now the proxy is configured (If not, run with administrator account)

To Disable proxy

1 Add following content to “disable-proxy.cmd” or “disable-proxy.bat”

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f

2 Double click on “disable-proxy.cmd” or “disable-proxy.bat” to run the commands

To Clean proxy settings (Doesn’t matter enabled or disabled)

1 Add following content to “clean-proxy.cmd” or “clean-proxy.bat”

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /f

2 Double click on “clean-proxy.cmd” or “clean-proxy.bat” to run the commands

Note: Using unknown proxy servers can be danger, especially when browsing websites or using apps which requires to login.

How to Add “X-Forwarded-For” information to Apache Web Server access log and error log

Keywords: Apache 2.4, Apache show client IP Address behind proxy, access log, error log, access.log, error.log, X-Forwarded-For

(For Apache 2.4 and newer versions)

By default, the apache access log and error log will not log “X-Forwarded-For” information, so that if the client is connecting via a proxy, the log might only contain the proxy server’s IP address.

By adding X-Forwarded-For information to log files, we will be able to tell the possible real IP address of the client.

Access Log Format

The default access log format in configuration file is

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

To add “X-Forwarded-For” information to the access log we just need to change it to:

LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Apache 2.4 logformat documentation: https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#logformat

Error Log Format

The default error log format is:

Example (default format for threaded MPMs)
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"

To add ” X-Forwarded-For ” information to the error log we need to change it to:

ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] [%{X-Forwarded-For}i] %M% ,\ referer\ %{Referer}i"

Apache 2.4 logformat documentation: https://httpd.apache.org/docs/2.4/mod/core.html#errorlogformat