Edit 3: Jadi, saya masih mengerjakan jawaban lengkapnya, tapi setidaknya saya punya proksi sendiri dengan Squid. Saya hanya perlu mencari cara untuk mendapatkan Tor dan I2P untuk bekerja dengan Squid. (Saya juga memiliki masalah dalam mendapatkan proxy untuk bekerja di luar browser saat menguji di Android saya, tetapi itu berada di luar cakupan pertanyaan ini, ditambah lagi saya harus menonaktifkan koneksi data saya untuk membuat koneksi server untuk bekerja di Android saya tanpa membuang DNS tidak menemukan kesalahan, untuk hal-hal seperti nic.senor dan mailpile.senor).
Sunting 3 (lanjutan): Saya telah memodifikasi konfigurasi sehingga saya dapat terhubung ke Tor pada .onion dan I2P pada .i2p. Saya telah menguji I2P, tetapi karena Tor saat ini diblokir pada koneksi saya, saya harus mengatasinya untuk menguji apakah Tor bekerja nanti, namun, saat ini cukup baik untuk saya, dan mungkin di masa depan jika saya mendapatkan Tor tidak terblokir, saya akan menambahkan proksi terpisah saya sendiri untuk Tor (untuk tujuan "Buku Alamat" Tor (karena dnsmasq tidak mendukung CNAME, sayangnya :()). (Saya mendapat bantuan dari https //serverfault.com/questions / 198806 / squid-select-parent-dependent-on-asked-url? Newreg = 6cd1dcadf97e4794bfcf4f1dcf977426). Ini cukup baik bagi saya untuk menerima jawaban ini, jadi yang tersisa hanyalah tweak dan pengujian! :)
Pada dasarnya, untuk implementasi jaringan pribadi saya, saya pertama-tama memiliki browser, yang kemudian melewati proxy saya, yang kemudian akan menyelesaikan permintaan dns secara internal (seperti menggunakan server dns laptop saya), yang kemudian akan menghubungkan saya ke situs apa pun yang saya ingin yang dapat diakses ke laptop saya.
Sedangkan untuk resolver DNS, saya menggunakan dnsmasq dengan file hosts yang terletak di /etc/dnsmasq.hosts, yang kemudian merutekan apa pun yang tidak di-cache atau ditemukan di file hosts ke dnscrypt-proxy. DNSMasq berada di 127.0.0.1:53 sementara DNSCrypt berada di 127.0.0.1:52.
Situs web yang ditemukan di dnsmasq.hosts terletak di port 80 dan 443 dan menggunakan nginx untuk merutekan koneksi apa pun yang dimilikinya ke berbagai server lain, seperti rute blog.senor ke server Jekyll yang terletak di 127.0.0.2:4000 (saya mungkin harus memblokir akses langsung ke URL ini menggunakan Squid), toh nic.senor tetap saja menunjuk https: //mailpile.senor/ karena saat ini tidak memiliki situs yang tepat, dan mailpile.senor pergi ke mailpile di 127.0.0.1:33.411. TLS ini berfungsi karena saya memiliki root CA sendiri. Saya mengimpor ke ponsel dan laptop saya (saya membuatnya dengan Open SSL menggunakan instruksi dari https://datacenteroverlords.com/2012/03/01/creating-your-own-ss- ).
Contoh file konfigurasi nginx yang saya gunakan untuk situs saya (dengan sedikit modifikasi):
/etc/nginx/conf.d/mailpile.conf
## our http server at port 80
server {
listen 127.0.0.3:80 default;
server_name mailpile.senor;
## redirect http to https ##
rewrite ^ https://$server_name$request_uri? permanent;
}
## our https server at port 443
server {
# IP Address, Port, and Protocol to use
listen 127.0.0.3:443 ssl;
# Server URL
server_name mailpile.senor;
# Certs
ssl_certificate certs/public/mailpile.senor.pub.pem;
ssl_certificate_key certs/private/mailpile.senor.priv.pem;
# Only use "Safe" TLS protocols, not SSL or TLS 3.0 (POODLE Attack)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Use ciphers the server supports
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
# Don't know how secure this elliptic curve algorith is, so needs more research!
#ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
# Basically reuses ssl sessions to speed up page load
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
# Stapling is sending OSCP info (may require resolver too)
#ssl_stapling on; # Requires nginx >= 1.3.7
#ssl_stapling_verify on; # Requires nginx => 1.3.7
#resolver $DNS-IP-1 $DNS-IP-2 valid=300s;
#resolver_timeout 5s;
# Remember HSTS? Well, have FUN!
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
# Prevents this site from being loaded in an iframe
add_header X-Frame-Options DENY;
# Prevents browser from changing MIME-Types from what the server says (supposedly more secure)
add_header X-Content-Type-Options nosniff;
# File with revoked certificates used to determine if client-side cert is valid or not!
#ssl_dhparam /etc/nginx/ssl/dhparam.pem;
location / {
access_log /var/log/nginx/mailpile_access.log;
error_log /var/log/nginx/mailpile_error.log info;
proxy_pass http://127.0.0.1:33411;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
/etc/dnsmasq.hosts
127.0.0.1 nic.senor
127.0.0.2 blog.senor
127.0.0.3 mailpile.senor
Sunting 1: Saya baru saja Wiresharked proxy saya dan menyadari bahwa auth dasar tidak mengenkripsi data saya sama sekali, jadi saya sekarang juga bekerja memperbaikinya!
Sunting 2: Saya telah menemukan http //patchlog.com/security/squid-digest-authentication/ (mengambil: karena perlu 10 rep untuk mengirim lebih dari 2 tautan pesan) yang membantu saya belajar cara membuat sistem otentikasi intisari dan cara membuat file kata sandi baru, yang hanya membuat md5sum dari $ user: $ realm: $ pass. Saya juga mengetahui bahwa digest_pw_auth telah diubah namanya menjadi digest_file_auth dari https //bbs.archlinux.org/viewtopic.php?id=152346.
/etc/squid/squid.conf
auth_param digest program /usr/lib/squid/digest_file_auth -c /etc/squid/passwords
auth_param digest realm Proxy
auth_param digest child 5
auth_param digest nonce_garbage_interval 5 minutes
auth_param digest nonce_max_duration 30 minutes
auth_param digest nonce_max_count 50
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_port 3128
# External Proxies
# Format is: hostname type http_port udp_port
cache_peer 127.0.0.1 parent 4444 0
cache_peer 127.0.0.2 parent 9050 0
# Determines When to Use External Proxies
cache_peer_domain 127.0.0.1 .i2p
cache_peer_domain 127.0.0.2 .onion
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
#http_access allow localnet
#http_access allow localhost
http_access deny all
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
vrefresh_pattern . 0 20% 4320