この記事では、別のマシン上にあるSquid + TPROXYの束について説明します。 結局のところ、このトピックはインターネットではほとんどカバーされていません。
占領の性質上、サイトのブラックリストを
ROSKOMNADZORからフィルタリングするタスクが発生し
ました 。 監査中、私たちはそうしないと制裁を課すと脅されました。 馬鹿げた(ほんの数分)愚かで、お客様の実装にあまり友好的ではないと言われました。 同時に、フィルタリングはIPによるものでした。 そしてもちろん、IP上のすべてのサイトへのアクセスをブロックしました。
やり直しが必要でした。 第一に、それは美しく/不器用ではありません。第二に、タスク自体が非常に興味深いです。
この記事では、このリストの自動受信を構成する方法については説明しません。 私はただ一つのことしか言えません、私は絶えずリクエストに署名することを気にしませんでしたが、インストールされたソフトウェアとキーを備えたコンピューターで一度しました。
Squid3がインストールされたマシンから始めましょう。
ほとんどすべての設定は公式の
Squid + TPROXYから取得され
ましたip -f inet rule add fwmark 1 lookup 100 ip -f inet route add local default dev eth0 table 100
cat /etc/sysctl.conf: .... net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0
どのトラフィックがすでにテストされており、どのトラフィックがテストされていないかを判別できるように、発信パケット用に別のVLAN(この場合は5)を作成します。 TPROXYモードでは、送信元アドレスは変更されないことを思い出させてください。
default via 192.168.70.2 dev eth0.5 192.168.1.35/25 dev eth0 proto kernel scope link src 192.168.1.36 192.168.70.0/30 dev eth0.5 proto kernel scope link src 192.168.70.1
iptablesルール
iptables -t mangle -N DIVERT iptables -t mangle -A DIVERT -j MARK --set-mark 1 iptables -t mangle -A DIVERT -j ACCEPT
既存の接続がTPROXYルールに該当しないようにするには
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
実際にはTPROXYルール自体
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129
基本設定。
http_port 3129 tproxy disable-pmtu-discovery=off ... acl bad_urls url_regex "/etc/squid3/bad_hosts.list" .... http_access deny bad_urls http_access allow localnet deny_info http://www.somehost.ru bad_urls ...
構成の最後の行は、ユーザーが禁止サイトの1つを要求した場合に指定されたサイトにリダイレクトします。
squid3の残りの設定を試してみてください。
ルーターの設定
これらの設定をルーターに適用する必要があります。
cat /etc/sysctl.conf: .... net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0
自然に有効化されたNATグレーサブネット。
フィルタリングするチェーンを作成します
iptables -t mangle -F DIVERT
このチェーンでは、80の発信ポートまたは宛先ポートを持つすべてのパケットにラベルを付けます(記事を書いているときのみ、ここでポートの指示が冗長であることに気付きましたが、突然、誰でも理解しやすくなりました)
iptables -t mangle -A DIVERT ! -i eth1.5 -p tcp --dport 80 -j MARK --set-mark 1 iptables -t mangle -A DIVERT ! -i eth1.5 -p tcp --sport 80 -j MARK --set-mark 1
送信元アドレスまたは宛先が80で、5つのVLANからこれらのパケットを受信しなかったすべてのパケットをこのチェーンに送信します(この場合、接続がトレースされず、逆チェックを行う必要がある理由を誰かが教えてくれます)
iptables -t mangle -A PREROUTING ! -i eth1.5 -p tcp -m set --match-set badip dst -m tcp --dport 80 -j DIVERT iptables -t mangle -A PREROUTING ! -i eth1.5 -p tcp -m set --match-set badip src -m tcp --sport 80 -j DIVERT
パケットにラベル1がある場合、101ルーティングテーブルに送信するルールを作成します
ip rule add fwmark 1 lookup 101
ルーティングテーブル自体
ip route list table 101 default via 192.168.1.35 dev eth1.3
そして最後に。 ここに悪いサイトのリストがあります
create badip hash:ip ipset flush badip ipset add badip 111.111.111.111 ipset add badip 2.2.2.2 ...
両方のマシンでブロックされたサイトのリストは自動的にロードされますが、解釈が異なります。
パケット移動パターン
青-ライン発信パケット
緑は戻りパケットです。