Редактировать 3: Итак, я все еще работаю над полным ответом, но по крайней мере у меня есть сам прокси с Squid.Мне просто нужно выяснить, как заставить Tor и I2P работать со Squid. (У меня также возникают проблемы с настройкой прокси-сервера для работы вне браузера при тестировании на моем Android, но это выходит за рамки этого вопроса, плюс я должен отключить соединение для передачи данных, чтобы соединения с серверами работали на моем андроиде, не выбрасывая ошибка DNS не найдена, для таких вещей, как nic.senor и mailpile.senor).
Изменить 3 (продолжение): я изменил конфигурацию, чтобы я мог подключиться к Tor на .onion и I2P на .i2p. Я проверил I2P, но так как Tor в настоящее время заблокирован на моем соединении, мне придется обойти это, чтобы проверить, работает ли Tor позже, однако, в настоящее время это достаточно хорошо для меня, и, возможно, в будущем, если я получу Tor Разблокировав, я добавлю свой собственный прокси-сервер для Tor (для целей "Адресной книги" Tor (поскольку dnsmasq не поддерживает CNAME, к сожалению :()). (Я получил помощь по адресу https://serverfault.com/questions/198806/squid-selects-parent-depending-on-requested-url?newreg = 6cd1dcadf97e4794bfcf4f1dcf977426). Это достаточно хорошо для меня, чтобы принять этот ответ, так что все, что осталось, это настройки и тестирование! :)
По сути, для моей реализации моей частной сети у меня сначала есть свой браузер, который затем проходит через мой прокси-сервер, который затем выполняет внутренние запросы DNS (как при использовании DNS-сервера моего ноутбука), который затем соединяет меня с любым сайтом, который я хочу, чтобы это было доступно для моего ноутбука.
Что касается преобразователя DNS, я использую dnsmasq с файлом hosts, расположенным в /etc/dnsmasq.hosts, который затем направляет все, что не кэшировано или не найдено в файле hosts, в dnscrypt-proxy. DNSMasq находится на 127.0.0.1:53, а DNSCrypt - на 127.0.0.1:52.
Веб-сайты, найденные в dnsmasq.hosts, расположены на портах 80 и 443 и используют nginx для маршрутизации любых подключений к различным другим серверам, таким как маршруты blog.senor, к серверу Jekyll, расположенному по адресу 127.0.0.2:4000 (вероятно, следует заблокировать прямой доступ к этим URL-адресам с помощью Squid), в любом случае nic.senor просто указывает на https://mailpile.senor/, так как в настоящее время у него нет надлежащего сайта, а mailpile.senor переходит на mailpile 127.0.0.1:33411. Этот TLS работает, потому что у меня есть собственный корневой CA, который я импортировал как на свой телефон, так и на ноутбук (я сгенерировал его с помощью Open SSL, используя инструкции с https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl- центр сертификации /).
Пример файла конфигурации nginx, который я использую для своих сайтов (с небольшими изменениями):
/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
Редактировать 1: Я просто проверил мой прокси и понял, что базовая аутентификация вообще не шифрует мои данные, так что теперь я также работаю над исправлением этого!
Редактировать 2: я нашел http //patchlog.com/security/squid-digest-authentication/ (забрал: из-за необходимости 10 повторений, чтобы опубликовать более 2 ссылок), который помог мне узнать, как создать систему аутентификации дайджеста и как создать новый файл паролей, который просто создает md5sum из $ user: $ realm: $ pass. Я также узнал, что digest_pw_auth был переименован в digest_file_auth с 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