私はすぐに、誰かがこのようなものをネットワークに投稿したかどうかわからないと言って、自分ですべてに到達しました。
何が必要ですか? シスコなどの高価な独自ソリューションは心配する必要はありません。 一般的に言えば、GNUとオープンソースに取り組んでいるすべての人にいくつかの優しい言葉を言いたいです。 本当にありがとうございます。 私見は、惑星全体の前でオープンソースであり、私は未来がそれにあると思います。 そして、この記事はこれの別の確認です。
アイデアは次のとおりです。
ipsetでブロックされたIPの一意のリストを作成します。 次に、NAT PREROUTINGにルールを追加します。 宛先IPがリストにある場合は、URLで既にフィルター処理されている透過プロキシにまとめます。
そしてツールから-ipset 、 iptables 、 squid (ssl bump)。
私がオープンソースの賞賛を歌ったのは偶然ではありませんでした。事実は、今日はsquidだけがhttpsを調べることができる技術を提案しているということです(少なくとも他の人は知りません)。 また、ipsetは最高速度を示し、プロセッサをロードせずにネットワークの応答に影響を与えることなく、数千のルールを保持します。
アンロードを取得するプロセスを簡単に説明します。 P12FromGostCSPプログラムをダウンロードし、その助けを借りて秘密キーを削除します。 次に、それをpemに変換します。
$ / gost-ssl / bin / openssl pkcs12 -in p12.pfx -out provider.pem -nodes -clcerts
念のため、有効期間を確認してください
$ openssl x509 -in provider.pem -noout -dates
次に、ゲストアルゴリズムをサポートするopensslをコンパイルします。 これを行う方法は、インターネット上にたくさん書かれています。 詳細は説明しません。
アップロードを受信するスクリプト自体。 (私はスクリプトおよびxmlパーサーの作成者ではありません。 フォーマット2に書き直しただけです)スクリプトは、必要な間隔でパラメーター0および1で呼び出す必要があります。
したがって、スクリプトの結果は3つのexファイルの存在です
ip-abuse.txt-IPリスト
url-abuse.txt-ブロックされたURL
subnet-abuse.txt-ブロックされたサブネット
一般的に、私たちのタスクはIPアドレスとURLを別々のファイルで取得することです。
作業用のデータがありますが、今ではメカニズムを実装する必要があります。
現在のバージョンのsquid www.squid-cache.org/Versionsをダウンロードします
解凍してコンパイル:
$。/ configure --enable-ssl --enable-ssl-crtd --with-openssl
$ make
$ sudo make install
デフォルトでは、squidは/ usr / local / squidに設定されます
それぞれ設定ファイル/ usr / local / squid / etc
acl-それぞれ禁止/ usr / local / squid / etc / acls
証明書を生成します
openssl req -new -newkey rsa:1024 -days 3650 -nodes -x509 -keyout myCA.pem -out myCA.pem;
openssl x509 -in myCA.pem -outform DER -out myCA.der
以下は私の設定ファイルの例です:
acl deny_url url_regex -i "/ usr / local / squid / etc / acls / zapret" http_access deny deny_url http_accessすべて許可 dns_v4_firstオン http_port 10.20.0.1 {128 transparent http_port 3128 #HTTPS https_port 10.20.0.1 {129 transparent ssl-bump generate-host-certificates = on dynamic_cert_mem_cache_size = 4MB cert = / usr / local /squid/etc/myCA.pem sslproxy_flags DONT_VERIFY_PEER sslproxy_cert_errorすべて許可 always_directすべて許可 ssl_bump client-first all ssl_bump server-first all ssl_bump noneすべて sslcrtd_program / usr / local / squid / libexec / ssl_crtd -s / usr / local / squid / var / lib / ssl_db -M 4MB #sslcrtd_children 5 refresh_pattern ^ ftp:1440 20%10080 refresh_pattern ^ gopher:1440 0%1440 refresh_pattern -i(/ cgi-bin / | \?)0 0%0 refresh_pattern。 0 20%4320
次に、ACLのリストを作成する必要があります。このスクリプトを使用します
#!/ bin / bash > / usr / local / squid / etc / acls / zapret cat /gost-ssl21/rzs/dump/url-abuse.txt | 並べ替え| ユニック| LINEを読みながら; する echo $ LINE '。*' >> / usr / local / squid / etc / acls / zapret 完了; 猫/根/ ZAPRET / prokur | 並べ替え| uniq >> / usr / local / squid / etc / acls / zapret; / usr / local / squid / bin / squid -k reconfigure 出口0
アイデアは、各URLの末尾に「。*」を追加することです。これは、任意の文字シーケンスを意味します。 たとえば、「 casino.com 。*」は、ドメインとこのドメインを含むすべてのリンクをブロックします。
さらにいくつかのコマンドを完了する必要があります。
mkdir / usr / local / squid / var / lib
/ usr / local / squid / libexec / ssl_crtd -c -s / usr / local / squid / var / lib / ssl_db
これでイカで終わります。
次に、フィルタリングのために「禁止トラフィック」でラップする必要があります。
これを行うには、ipsetで2つのチェーンを作成します。ZAPRET-ブロックされたIPの一意のリスト、ZAPRETNET-ブロックされたサブネットのリスト。
ipset -N ZAPRETNETハッシュ:ネット
ipset -N ZAPRETハッシュ:ip
iptablesを使用して自分でルールを作成する
#プロキシをオンにします
iptables -t nat -A PREROUTING -s“ subscriber subnet” -p tcp -m set --match-set ZAPRET dst -m tcp --dport 80 -j DNAT --to-destination“ proxy IP”:3128
iptables -t nat -A PREROUTING -s“ subscriber subnet” -p tcp -m set --match-set ZAPRET dst -m tcp --dport 443 -j DNAT --to-destination“ proxy IP”:3129
#サブネット全体をブロックする
iptables -A FORWARD -s「サブスクライバーサブネット」-m set --match-set ZAPRETNET dst -j DROP
次に、ipsetリストに入力する必要があります。 私のスクリプトを持ち込みます:
#!/ bin / bash FILENAME = "create_ruls" > $ FILENAME; echo 'if [-z "` ipset -L | grep ZAPRET` "];' >> $ファイル名 echo 'then' >> $ FILENAME echo 'ipset -N ZAPRET hash:ip' >> $ FILENAME echo 'else' >> $ファイル名 echo 'ipset -F ZAPRET' >> $ファイル名 echo 'fi' >> $ファイル名 echo 'if [-z "` ipset -L | grep ZAPRETNET` "];' >> $ファイル名 echo 'then' >> $ FILENAME echo 'ipset -N ZAPRETNET hash:net' >> $ FILENAME echo 'else' >> $ファイル名 echo 'ipset -F ZAPRETNET' >> $ FILENAME echo 'fi' >> $ファイル名 cat /gost-ssl21/rzs/dump/ip-abuse.txt | 並べ替え| ユニック| LINEを読みながら; する echo ipset -A ZAPRET $ LINE >> $ FILENAME 完了; cat /gost-ssl21/rzs/dump/subnet-abuse.txt | 並べ替え| ユニック| LINEを読みながら; する echo ipset -A ZAPRETNET $ LINE >> $ FILENAME 完了;
$ sudo ./create_ruls
それだけです。ブラウザを開き、禁止されたリソースにアクセスしてみてください。 アクセスが拒否されたことを示すsquid-aメッセージが表示されます。 このようなもの:
プロットの美しさのために、ファイルを置き換えます:
/ usr / local / squid / share / errors / ja / ERR_ACCESS_DENIED
/ usr / local / squid / share / errors / ru / ERR_ACCESS_DENIED
あなたのページタイプロックで-「申し訳ありませんがリソースは法律に従ってブロックされています....」。
PSこのブロック方式は戦闘条件でテストされ、今日まで実サーバーで機能します。 同時に、pingは1ミリ秒増加しませんでした。 また、プロセッサの負荷に大きな違いはありませんでした。 ILVはアップロードの受信に非常にjeしているため、スクリプトの行のコメントを解除できます。
system( "/ usr / bin / gammu sendms TEXT 7910xxxxxxx -len 400 -text 'Get data'; echo 'Unload from ILV received' | mail -s 'ILVからのアンロード受信' kopita \ @ mail.ru");
電話とメールアドレスを自分のものに自然に置き換えます。 SMSアラートと電子メールアラートを受け取ります。 1つ目はロック解除されたメガホンモデムHuawei e1550 + gammuを使用し、2つ目はExim4などを構成する必要があります。 また、スクリプト自体に組織の詳細を入力する必要があります。
PS良い半分は何が問題なのかをまったく表していないことを理解しているので、説明することにしました。 多くの法律が義務付けています 、私は強調します、各オペレーターはこれをする義務があり、これは彼らの気まぐれではありません! そして、それを満たさないことに対する制裁は、免許が取り消されるまで肉体で非常に残酷です! 1日1回のアンロードの些細な非領収書の場合、数万の罰金が課されます。 そして、ここで、例えば、監督は半年の分割払いで荷降ろしの責任者に彼を「提示」しました。
読書に興味がある人のための法律のリストは次のとおりです。
2012年7月28日付の連邦法No.139-は、ロシア連邦の以下の法律を修正しました。
2010年12月29日の連邦法第436-「子どもの健康と発達に有害な情報からの子どもの保護について」。
行政犯罪に関するロシア連邦のコード。
2003年7月7日の連邦法 No.126-「コミュニケーションについて」;
2006年7月27日の連邦法 No.149-「情報、情報技術、情報保護について」。
これらの法則の影響を可能な限り「平滑化」する方法のみを引用しました。 また、URLがブロックされているホストへのアクセスを失わないようにすることができます。
すべてのhttpsトラフィックがプロキシを通過するわけではなく、ブロックされたIPに向かうプロキシのみを通過します 。 制限なしに他のすべてのhttpsサイトに引き続きアクセスできます。
だれもあなたをだますつもりはありません、あなたは左の証明書とそれを拒否し、監視されたリソースを訪問しないあなたの権利を見ます。 平均的なユーザーにとって、これはブロックされたIPでこのホストのブロックされていないリソースの残りを完全に使用する機会です。 すべての苦情はここrnk.gov.ruでお願いしますが、私からは、悪を普遍的な規模にする必要はありません。