AmazonLinuxにForward ProxyをApacheで構築する

これまでSquidで運用していたフォワードプロキシをサーバ移転に伴いApacheに置き換えました。Squidの方が柔軟性は高い印象ですが、それほどクリティカルな内容ではなかったので今回は設定の容易さを優先しました。

インストール

Apacheを入れる

yumで一発です。

$ sudo yum install httpd24 httpd24-devel httpd24-tools mod24_ssl

今回入ったのは以下のバージョン。

$ apachectl -v
Server version: Apache/2.4.27 (Amazon)
Server built:   Sep 24 2017 23:19:50

Apacheの設定を行う

以下のような設定ファイルを準備します。ポート番号や誰を許可するかといった部分は環境や要件に合わせて変更してください。ファイル名は拡張子が".conf"になっていれば何でも大丈夫です。

$ sudo vi /etc/httpd/conf.d/fwproxy.conf
Listen 8080
<IfModule proxy_module>
  ProxyRequests On
  ProxyVia      On
  ProxyTimeout  300

  CustomLog logs/proxy_log combined

  <Proxy *>
    Order deny,allow
    Deny  from all
    Allow from xxx.xxx.xxx.xxx
  </Proxy>
</IfModule>

ポートを開放する

EC2であれば「セキュリティグループ」から、Lightsailであればインスタンスの「ネットワーキング」からconfで指定したポートを開放する必要があります。

EC2の場合

Lightsailの場合

ここではSSHに22、プロキシに8080を使用してますが、ピュアすぎるので実際には別の番号に変更するのがおすすめです。

起動して動作確認

ここまで終わったら早速起動してみましょう。

$ sudo service httpd start
Starting httpd:                                            [  OK  ]

無事に立ち上がったらブラウザないしOSの設定を行い動作チェックを行います。 合わせてアクセスログにも吐き出されているかチェックしておきましょう。

自動起動の設定

サーバを立ち上げた際に自動的にhttpdが起動するよう設定をしておきます。

$ sudo chkconfig httpd on
$ chkconfig --list | grep httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

BASIC認証をかける

IPアドレスで認証をかけるのが利用者は何も入力しなくてすみますし、管理者にとってもリスクが少なくて楽なのですが、不特定多数のネットワーク(スタバのWiFiとか(;´∀`))からアクセスしたいという要望があったため、チャチャッと手早くできるところでBASIC認証で制限をかけることにします。

.htpasswdファイルをの作成

ユーザーIDとパスワードのリストをファイルに保存します。この時のパスワードはハッシュ化されている必要があるため、Apacheに付属しているhtpasswdコマンドを用いると自動で良い感じに保存してくれます。必要なユーザー数分htpasswdコマンドを実行してください。

$ sudo touch /etc/httpd/conf.d/.htpasswd
$ sudo htpasswd -b /etc/httpd/conf.d/.htpasswd (ユーザーID) (パスワード)
Adding password for user foobar

$ cat /etc/httpd/conf.d/.htpasswd
foobar:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

もしパスワードを変更したい場合は、htpasswdコマンドを同じユーザー名で実行すればパスワードが上書かれます。ユーザーを削除したい場合は-Dオプションをつけ削除したいユーザー名を指定すればOKです。

Apacheの設定ファイルを変更

Proxyタグ内を変更しています。他の箇所は変更していません。

$ sudo vi /etc/httpd/conf.d/fwproxy.conf
  <Proxy *>
    AuthUserFile /etc/httpd/conf.d/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Basic Auth"
    AuthType Basic
    Require valid-user
  </Proxy>

再起動して動作確認

Apache再起動をし、早速ブラウザからアクセスしてみましょう。見慣れたBASIC認証のダイアログが表示されれば成功です。認証完了後、ブラウザを終了させるまでは再認証は行われません。

$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]