nginxでアクセス制限をしてみる。
#IPアドレス制限
設定ファイルでdenyまたはallowを定義する。
引数はIPアドレス または allという文字列。
IPドレスはCIDRで範囲指定可能。
deny 172.21.1.1
deny 172.21.0.0/16
allow all
さっそく設定ファイルをいじってみる。
コンテナ起動
[ec2-user]$ docker container run -d -p 80:80 --name nginx nginx:latest
2a01374534f5997dd2b44a8422b63eccff0d6a1ce21b82aa6f6dc3b10928de89
[ec2-user]$
[ec2-user]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a01374534f5 nginx:latest "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 80/tcp nginx
[ec2-user]$
設定ファイル修正
root@6775ebb4074c:~# vi /etc/nginx/nginx.conf
bash: vi: command not found
root@6775ebb4074c:~#
viが入っていない、、入れるか。
yumも入っていない
root@6775ebb4074c:~# yum install -y vim
bash: yum: command not found
root@6775ebb4074c:~#
yumも入ってない、、う~ん。
面倒になってきたので
ホスト側に設定ファイルをコピーしてきて
修正したのちコンテナ内に戻すことにした。
気を取り直して
まずは以下を設定ファイルに追加してみる。
##deny all;
設定ファイルコピー(ホスト←コンテナ)
[ec2-user]$ docker container cp nginx:/etc/nginx/nginx.conf .
[ec2-user]$
設定ファイル修正
vi nginx.conf
~~ 前略 ~~
http {
deny all;
include /etc/nginx/mime.types;
~~ 後略 ~~
設定ファイルコピー(ホスト→コンテナ)
[ec2-user]$ docker container cp ./nginx.conf nginx:/etc/nginx/nginx.conf
[ec2-user]$
設定ファイルのエラーチェック
[ec2-user]$ docker container exec nginx /bin/bash -c "nginx -t"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ec2-user]$
コンテナ再起動
[ec2-user]$ docker container restart nginx
nginx
[ec2-user]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a01374534f5 nginx:latest "/docker-entrypoint.…" 10 minutes ago Up 5 seconds 80/tcp nginx
[ec2-user]$
ブラウザアクセス
たしかに拒否された。
##allow IPアドレス;
allowで許可設定を行う。
allowやdenyを複数書いた場合は最初に該当したものが適用される。
せっかくなのでdeny allは残したまま
その前にallowを追加してみる。
設定ファイル修正
vi nginx.conf
~~ 前略 ~~
http {
allow xx.xx.xx.xx;
deny all;
include /etc/nginx/mime.types;
~~ 後略 ~~
設定ファイルコピー(ホスト→コンテナ)
[ec2-user]$ docker container cp ./nginx.conf nginx:/etc/nginx/nginx.conf
[ec2-user]$
設定ファイルのエラーチェック
[ec2-user]$ docker container exec nginx /bin/bash -c "nginx -t"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ec2-user]$
コンテナ再起動
[ec2-user]$ docker container restart nginx
nginx
[ec2-user]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a01374534f5 nginx:latest "/docker-entrypoint.…" 28 minutes ago Up 4 seconds 80/tcp nginx
[ec2-user]$
ブラウザアクセス
想定どおり繋がった。