Ubuntu 11.04でのパスワードを使用した透過Squidプロキシサーバー

最近、LinuxにいくつかのKerio関数を実装するタスク、つまり認証がありました
透過モードのSquidプロキシサーバーユーザー。 これは非常に簡単です
インターネット上にそれを行う方法に関する記事がたくさんありますが、透過モードで問題が発生しました
(透過プロキシ)認証が機能しません。 もちろん、ユーザー数が少ない場合
これは問題ではありません。透過的にオフにし、すべてのプロキシをブラウザに登録しました。それで終わりです。
しかし、多くのユーザーとコンピューターがあり、誰もがプロキシサーバーを登録する必要がない場合
機会/時間、ここで解決策を探す必要があります。 1つの解決策は、Squid + PHP + NATの束です。


これらすべてがテストされ、後でUbuntu 11.04で動作するシステム。
インストール:MySQL、PHP5、Apache2、iptables、squid
apt-get install squid mysql-server mysql-client php5 apache2
Squidで透過モードをオンにします。
nano /etc/squid/squid.conf
# NETWORK OPTIONS
http_port 192.168.0.1:3128 transparent

トラフィックを許可する:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptablesでNATを構成します。
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
サーバーでポート80をラップします。
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80
ファイル/etc/php5/apache2/php.iniに以下を追加します。
extension=pdo.so
extension=pdo_mysql.so

次に、ユーザーを格納するデータベースを作成します
mysql -u root -p
CREATE DATABASE authphp CHARACTER SET utf8;

新しいデータベースに接続します:
\r authphp
ログインとパスワードのフィールドを持つテーブルを作成する
CREATE TABLE User (login CHAR(20), password CHAR(20));
テーブルにデータを追加する
INSERT INTO User VALUES ('user','qwerty');
mysqlコンソールを終了します
\q
したがって、データベースを作成し、ユーザー「user」にパスワード「qwerty」を導入しました
次に、承認を実行するphpスクリプト自体のターンが来ました
データベースを操作するために、RedBeanPHPライブラリを使用しました。
公式サイト
Index.phpファイルの内容
<?php
require('rb.php');

$ip = getenv ("REMOTE_ADDR");

R::setup('mysql:host=localhost;dbname=authphp','root','qwerty');

if( $user = R::findOne('User',' login = ? and password = ?',
array( $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] ) )
)
{

header('Location: next.html');
system("sudo iptables -t nat -D PREROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80");
system("sudo iptables -t nat -D PREROUTING -s $ip -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128");
system("sudo iptables -t nat -A PREROUTING -s $ip -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128");
system("sudo iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80");
exit(0);

}

$title = "Squid Server";

{
header('WWW-Authenticate: Basic realm="'.$title.'"');
header('HTTP/1.0 401 Unauthorized');
die("Otkaz");
}

?>


hext.htmlファイルの内容
META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://google.ru"
META "<"の前とURL = http://google.ru ""> "の後に置くだけ

したがって、最初からインターネットにアクセスしたいユーザーは、サーバーにラップアップします。
phpスクリプトが実行されます。 ユーザーがユーザー名とパスワードを入力すると、ルールが追加されます
iptablesで、ユーザーポート80はポート3128でsquidにラップされています

実際、それだけです。当然、あなたは美しさをもたらし、一般的には
Kerioと同様に、1時間後に接続をリセットするために追加することもできます
再度許可を要求しました。 一般的に、創造性の分野があります。
これが誰かの役に立つことを願っています。幸運を祈ります。

Source: https://habr.com/ru/post/J140052/


All Articles