如何设置 Squid 代理(用于本地主机服务以及 Tor 和 I2P)

如何设置 Squid 代理(用于本地主机服务以及 Tor 和 I2P)

所以,这就是我的困境。我有一个好主意,我可以使用 DNS 为我的电脑创建自己的 TLD。我希望所有服务都在 localhost 上运行,因为我将创建可以修改我的电脑的网站。所有这些网站都将在 .senor TLD 下运行。我目前已将此 TLD 与我的 jekyll 服务器配合使用http://nic.senor/

问题在于尝试让 .onion.senor 和 .i2p.senor 等域名与各自的代理一起工作。显然,我在计划将数据从我的代理代理到 Tors 或 I2Ps 代理时有所疏忽,因为这不是我创建 .senor TLD 时的最初计划。我当前的设置是 127.0.0.1:53 上的 dnsmasq,它将 /etc/dnsmasq.hosts 文件中未列出的任何域重定向到托管在 127.0.0.1:52 上的 dnscrypt。

我尝试搜索如何像这样设置 squid 的答案,因为配置让我很困惑(我会继续搜索),甚至发现了以下问题Squid 通过 i2p、tor 和 localhost 资源要求做我想做的事情,但自从两年前提出这个问题以来,没有人回答过,所以我仍然陷入困境。任何帮助或指明正确方向的人都将不胜感激!

答案1

编辑 3:所以,我仍在研究完整的答案,但至少我已经用 Squid 搞定了代理本身。我只需要弄清楚如何让 Tor 和 I2P 与 Squid 一起工作。(我在 Android 上测试时也遇到了让代理在浏览器之外工作的问题,但这超出了这个问题的范围,而且我必须禁用我的数据连接才能让服务器连接在我的 Android 上工作,而不会抛出 DNS 未找到错误,例如 nic.senor 和 mailpile.senor)。

编辑 3(继续):我修改了配置,这样我就可以在 .onion 上连接到 Tor,在 .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 和位于 /etc/dnsmasq.hosts 的 hosts 文件,然后将未缓存或未在 hosts 文件中找到的所有内容路由到 dnscrypt-proxy。DNSMasq 位于 127.0.0.1:53,而 DNSCrypt 位于 127.0.0.1:52。

在 dnsmasq.hosts 中找到的网站位于端口 80 和 443 上,并使用 nginx 将其与各种其他服务器的任何连接路由到这些服务器,例如 blog.senor 路由到位于 127.0.0.2:4000 的 Jekyll 服务器(我可能应该使用 Squid 阻止对这些 URL 的直接访问),无论如何,nic.senor 只是指向https://mailpile.senor/因为它目前没有合适的网站,而 mailpile.senor 会转到 127.0.0.1:33411 上的 mailpile。此 TLS 之所以有效,是因为我有自己的根 CA,我已将其导入手机和笔记本电脑(我使用 Open SSL 生成了它,使用https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/)。

我的网站使用的 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:我刚刚用 Wireshark 测试了我的代理,并意识到基本身份验证根本没有加密我的数据,所以我现在也正在努力解决这个问题!

编辑 2:我找到了 http //patchlog.com/security/squid-digest-authentication/(删除了 : 因为需要 10 个代表才能发布超过 2 个链接消息),它帮助我了解了如何创建摘要身份验证系统以及如何创建新的密码文件,即根据 $user:$realm:$pass 创建 md5sum。我还从 https //bbs.archlinux.org/viewtopic.php?id=152346 了解到 digest_pw_auth 已重命名为 digest_file_auth。

/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

相关内容