Caterpillar Proxy - The simple and parasitic web proxy with SPAM filter (formerly, php-httpproxy)
Go to file
2024-03-02 00:39:41 +09:00
.github Create FUNDING.yml 2024-02-23 17:10:43 +09:00
assets Update index.php 2024-03-01 04:43:54 +09:00
plugins Update fediverse.py 2024-03-02 00:39:41 +09:00
.gitignore Update .gitignore 2024-02-20 16:20:37 +09:00
ca.crt Add HTTPS decryption (Experimental) 2022-11-25 17:12:58 +09:00
ca.key Add HTTPS decryption (Experimental) 2022-11-25 17:12:58 +09:00
caterpillar.service Create caterpillar.service 2024-02-21 02:24:06 +09:00
cert.key Add HTTPS decryption (Experimental) 2022-11-25 17:12:58 +09:00
LICENSE Initial commit 2022-10-06 02:16:30 +09:00
README.md Update README.md 2024-03-01 03:10:30 +09:00
requirements.txt Create requirements.txt 2022-10-06 13:29:24 +09:00
server.py Update server.py 2024-03-02 00:38:48 +09:00
smtp.py Update smtp.py 2024-03-01 04:39:58 +09:00

gnh1201/caterpillar

Caterpillar - The simple and parasitic web proxy with spam filter (formerly, php-httpproxy)

title image

How it works

Basic structure

You <-> Proxy client (Python) <-> Parasitized proxy server (Optional, PHP) <-> On the Web

For example, build a simple web debugging proxy on the shared servers.

This project supports two modes of connection. The default is stateless. You can use the stateful mode to avoid being constrained by transfer capacity limits (e.g., max_upload_size).

Spam filtering strategy (Fediverse only)

  • K-Anonymity test - Estimating whether the characters has been arranged by humans. (use Have I Been Pwned)
  • Not CAPTCHA - Image spam containing characters that look very similar to CAPTCHA. (use TrueCaptcha)
  • VowelRatio10 - In characters arranged by humans, there is a high frequency of vowels (aeiou) and semivowels (wy) and vowel-ending patterns included in strings that are 10 characters.
  • Palindrome4 - Detect palindromes composed of 4 or more characters
  • KnownWords4 - Detect well-known words composed of 4 or more characters
  • SearchEngine3 - In public search engine, the given string yields more than 2 results. (use LibreY)
  • RepeatedNumber3 - Detect a repeated numbers 3 times or more.
  • SSL decryption (MITM) when relaying to federated servers.

The strategies were implemented to respond to the Fediverse Spam Attacks which started on the 15th of February.

(Optional) Before to use

If you have a server that will be parasitized and you want to proxy it, you should upload the index.php file to a shared server. The index.php file is located in the assets/php directory within this repository.

How to use

  1. Write a file .env(Linux) or settings.ini(Windows). Like this:
[settings]
PORT=5555
SERVER_URL=http://example.org
SERVER_CONNECTION_TYPE=stateless
CA_KEY=ca.key
CA_CERT=ca.crt
CERT_KEY=cert.key
CERT_DIR=certs/
OPENSSL_BINPATH=openssl
CLIENT_ENCODING=utf-8
LOCAL_DOMAIN=example.org
PROXY_PASS=http://127.0.0.1:3000
DICTIONARY_FILE=
TRUECAPTCHA_USERID=
TRUECAPTCHA_APIKEY=
LIBREY_APIURL=
sudo apt-get install -y ca-certificates
sudo cp ca.crt /usr/local/share/ca-certificates/caterpillar-ca.crt
sudo update-ca-certificates
  1. Run python3 server.py and set HTTP(S) proxy in your web browser (e.g. Firefox)

  2. Test 100MB/SSL, 1GB/SSL, 10GB/SSL download and check the speed (e.g. https://speed.hetzner.de/1GB.bin)

  3. Enjoy it

  4. (Optional) With Cloudflare, we can expect to accelerate the 4x speed and reduce the network stuck.

(Optional) For Mastodon users

In [Caterpillar installed directory]/settings.ini or .env

  1. set SERVER_URL variable to localhost in .env (e.g. SERVER_URL=localhost)
  2. set PROXY_PASS variable to Mastodon backend URI (e.g. http://127.0.0.1:3000)
  3. if you want use notification, set MASTODON_SERVER(server domain) and MASTODON_USER_TOKEN(access token) variables

In [Mastodon installed directory]/env.production

  1. set http_proxy variable to http://localhost:5555 (e.g. http_proxy=http://localhost:5555)

In NGINX configuration

  1. Check your port number of Caterpillar (default: 5555)
  2. In NGINX configuration (e.g. /etc/nginx/conf.d/mastodon.conf), edit the proxy_pass like a proxy_pass http://localhost:5555

References

Thanks to

Pan Art by @yeohangdang@i.peacht.art

Caterpillar Project Pan Art by @yeohangdang@i.peacht.art

Report abuse