
私は自分のコンピュータに squid を設定して、同じコンピュータからの送信トラフィックのみを制御しようとしています。私の理解が正しければ、squid はほとんどの Linux ディストリビューション (私の場合は Fedora ですが) でユーザー「squid」として実行されます。
uid 0 と uid 23 (root と squid) からのパケットを除くすべての送信パケットをドロップするように iptables を設定しました。
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -m owner --uid-owner 0 -j ACCEPT
-A OUTPUT -m owner --uid-owner 23 -j ACCEPT
-A OUTPUT -j DROP
COMMIT
次に、ローカル ユーザー アカウントごとに、ブラウザーに squid プロキシ情報を手動で入力する必要があります (したがって、透過的なセットアップを求めているわけではないと思います)。可能であれば、squid に接続するためにユーザー名/パスワードを要求して、ユーザーが squid プロキシ経由以外でインターネットにアクセスできないようにしたいのですが。
私の現在の squid.conf は次のとおりですが、まったく機能せず、明らかにユーザー/パスワード要件が組み込まれていません。
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 1025-65535 # unregistered ports
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 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 localhost
http_access deny all
http_port 3128
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
refresh_pattern .
私がやろうとしていることは達成可能でしょうか、そして正しい方法で取り組んでいますか?
iptables で行ったことは機能しますか?
これは 10 分で正しく設定する方法を学べるものではないことは承知していますが、これを実現するためのガイドや代替ソリューションへの助言やヒントがあれば、ぜひ教えてください。
答え1
他のプログラムのために、少なくとも DNS へのアクセスを開く必要があるでしょう。
Squid には認証モジュールがありますが、あなたの場合は必要ありません。Squid だけが Web にアクセスできるため、すべてのユーザーはそれを強制的に使用する必要があります。
プロキシを設定するために使用される環境変数を確認し、それらをグローバルに設定します。http_proxy
少なくとも設定する必要があります。
プロキシを設定するためのメカニズムはありますwpad.dat
が、意図したとおりには使用していません。
多くのサービスがリストされていないポートを使用していることがわかり、ブラウジングのエクスペリエンスはあまり良くないと思います。
どのサイトもブロックしていないようなので、 を使用してポートを制限する方が簡単かもしれませんiptables
。