Proxychain Version Dependencies

Proxy-chaining SOCKS/HTTP server (see also proxyutils library)

Configuration

Configuration through proxychain.coffee script:

entry = [
  "socks://localhost:9050" # TOR
]

loadMiddle = () ->
  socks = ProxySource.fromURL("http://localhost:36800/proxylist.txt?list=public&protocol=socks&alive=true&latency=1500").map((ip) -> "socks://" + ip)
  https = ProxySource.fromURL("http://localhost:36800/proxylist.txt?list=public&protocol=https&alive=true&latency=1500")
  proxies = socks.concat(http)
  Logger.info("Loaded {} proxies", proxies.length)
  proxies

middle = loadMiddle()
exit = [
  "http://exit-proxy.com:8080"
]

isHttp = (address) ->
  address.getPort() in [80, 443]

isLocalhost = (client) ->
  client.getHostString() in ["localhost", "127.0.0.1", "::1"]

return {
  connectionIsAllowed: (client, address) -> isLocalhost(client) && isHttp(address) && DefaultFirewall.connectionIsAllowed(client, address)
  proxyChainsFor: (address) -> ChainBuilder.chainsFrom(2, entry, ChainBuilder.hops(middle, 3), exit)
}

Configuration through proxychain.conf:

proxyChain {
  host = "0.0.0.0" // Listen IP
  port = 1080 // Listen port
  
  tls { // Transport layer security settings
    port = 0 // TLS listen port (0 to disable)
    client-auth = true // Is client auth mandatory
    key-store = "proxychain.jks" // Key store path
    key-store-pass = "proxychain" // Key store password
    trust-store = "proxychain-trust.jks" // Trust store path
  }
  
  // Firewall settings:
  allowedRanges = [
    // IP ranges whitelist
  ]
  blockedRanges = [
    // IP ranges blacklist
  ]
  
  allowedPorts = [
    // Ports whitelist
  ]
  blockedPorts = [
    // Ports blacklist
  ]
  
  allowedHosts = [
    // Hosts whitelist
  ]
  blockedHosts = [
    // Hosts blacklist
  ]
  
  allowedClients = [
    // Clients whitelist
  ]
  
  blockedClients = [
    // Clients blacklist
  ]
  
  // Proxy servers here:
  entry {
    // Default hop settings
    hops = 0
    randomize = false
    
    proxies = [
      "http://user:password@proxy1.com:8080"  // First server in chain
    ]
  }
  middle {
    // Custom hop settings
    hops = 3
    randomize = true
    
    proxies = [
      // Intermediate proxies here
    ]
  }
  exit {
    // Hop settings omitted - using default
  
    proxies = [
      "socks://proxy2.com:1080"  // Last server in chain 
    ]
  }
}