Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

nginx 1.7.9によるメールプロキシ on CentOS6.6[auth.phpの解説編]

 

こんにちは、鯨井貴博@opensourcetechです。

 

 

本記事は、

nginx1.7.9によるメールプロキシ on CentOS6.6 - Opensourcetechブログ

にて使用したauth.phpの解説となります。

f:id:opensourcetech:20150129171951p:plain

 

 

auth.phpの内容

<?php
if (!isset($_SERVER["HTTP_AUTH_USER"] ) || !isset($_SERVER["HTTP_AUTH_PASS"] )){
  fail();

・・・Nginxから送信されるHTTPヘッダー情報から、

   Auth-UserとAuth-Passの有無を確認し、

   なければfunction failを実行します。

   あれば、次に進みます。

   _SERVERはグローバル変数


}
$username=$_SERVER["HTTP_AUTH_USER"] ;
$userpass=$_SERVER["HTTP_AUTH_PASS"] ;
$protocol=$_SERVER["HTTP_AUTH_PROTOCOL"] ;

・・・各変数にNginxから送信されるAuth-User・Auth-Pass・Auth-Protocolを格納します。


$backend_port=110;
if ($protocol=="imap") {
  $backend_port=143;
}
if ($protocol=="smtp") {
  $backend_port=25;
}

・・・変数protocolに入るプロトコルによって、

   変数backend_portに格納するポート番号を変えるif(条件)文


$backend_ip["mail.kujirai.test.local"] ="127.0.0.1";

・・・変数backend_ipに127.0.0.1を代入


if (!authuser($username,$userpass)){
  fail();
  exit;
}

・・・function authuserに変数usernameとuserpassを代入し、

   trueでなければfunction failを実行します。


$userserver=getmailserver($username);

・・・変数userserverにfunction getmailserverの内容を格納します。


$server_ip=(isset($backend_ip[$userserver]))?$backend_ip[$userserver] :$userserver;
pass($server_ip, $backend_port);

・・・$backend_ip[$userserver]が真(?)なら$backend_ip[$userserver] を、

   偽(:$)ならuserserverを代入。

   三項演算子


pass($server_ip, $backend_port)

・・・function passに変数server_ipとbackend_portを当てはめて実行する。


function authuser($user,$pass){
  return true;
}

・・・変数userとpassが合っていれば、

   trueを返すfunction authuser


function getmailserver($user){
    return "mail.kujirai.test.local";
}

・・・「mail.kujirai.test.local」を返すgetmailserverというfunction


function fail(){
  header("Auth-Status: Invalid login or password");
  exit;
}

・・・failというfunctionの定義

   header関数で、「Auth-Status: Invalid login or password」という

   ヘッダー情報を送信します。


function pass($server,$port){
  header("Auth-Status: OK");
  header("Auth-Server: $server");
  header("Auth-Port: $port");
  exit;

・・・Auth-Status: OK、Auth-Server: $server、Auth-Port: $portをヘッダー情報として

   応答する。


}
?>

 

以下のパケットキャプチャから、

Nginxからauth.php(apache)でやり取りされるヘッダーじゅほうが確認出来ます。

f:id:opensourcetech:20150204155613p:plain

 

f:id:opensourcetech:20150204155626p:plain

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

Opensourcetech by Takahiro Kujirai