これまで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 ]