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時間後に接続をリセットするために追加することもできます

再度許可を要求しました。 一般的に、創造性の分野があります。

これが誰かの役に立つことを願っています。幸運を祈ります。



All Articles