#背景
先日、「Linuxサーバ構築」というテーマで
社内で勉強会が行われましたので、メモを残しておきます。
そもそも、、、
日常の業務ではDockerを触ってはいるものの、
DockerFileを一から自分で構築したことはありませんでしたし、
構築するにしてもそのファイルはLinuxコマンド
で書かれています。
なので、Dockerの理解を深めるためにも、とても良い機会となりました。
環境構築
まず、下記のdocker-compose.ymlを作業ディレクトリに追加します。
(docker-compose.ymlについての説明は割愛させていただきます。)
version: '3'
services:
host_server:
image: centos:7
command: /usr/sbin/init
privileged: true
ports:
- 38080:80
client_machine1:
image: centos:7
command: /usr/sbin/init
privileged: true
client_machine2:
image: centos:7
command: /usr/sbin/init
privileged: true
ここからはターミナルで作業を行います。
作業ディレクトリに移動し、Dockerコンテナを作成し、起動させます。
docker-compose up -d
ターミナルを3つ用意し、それぞれのターミナルで各serviceのコンテナに入ります。
docker-compose exec host_server /bin/bash
docker-compose exec client_machine1 /bin/bash
docker-compose exec client_machine2 /bin/bash
host_serverでOpenSSHサーバ、net-tools、vimをインストールします。
yum install -y openssh-server net-tools vim
同様に、client_machine1,2でもOpenSSHクライアント、net-tools、vimをインストールします。
yum install -y openssh-clients net-tools vim
SSH接続するためにサーバ(host_server)側でパスワードを設定しておきます。(パスワード確認のため再入力もあります。)
passwd
host_serverを立ち上げます。
systemctl start sshd.service
ここで、host_serverのIPアドレスを確認しておきましょう。
ifconfig
=> 172.20.0.3
同様にclient_machineのIPも確認しておきます。
(host_server: 172.20.0.3
)
client_machine1: 172.20.0.4
client_machine2: 172.20.0.5
#SSH接続
それでは、クライアント(client_machine1)からサーバ(host_server)にSSHで接続してみましょう。(ここではパスワード認証で接続していますが、脆弱性があるらしいので公開鍵認証の方が良いみたいです。)
ssh 172.20.0.3
=> Last login: Wed Jun 19 22:01:33 2019 from linux_test_client_machine1_1.linux_test_default
Last loginが表示されれば成功です。接続に成功したらログアウトしておきます。
exit
また、client_machine2でも接続ができることを確認しておきましょう。
(ここではパスワード認証で接続しているので、接続の度にパスワードを求められますが、公開鍵認証接続であればそれは必要なくなります。)
IP制限
それでは、サーバ(host_server)に接続できるIPアドレスを制限してみます。
指定したIPアドレスを拒否する
サーバ側でhosts.denyファイルを変更します。
vim /etc/hosts.deny
ALL:ALL
この設定では、すべてのIPアドレスからの接続を拒否しているので
client_machine1、client_machine2 どちらからとも接続できないことを確認します。
ssh 172.20.0.3
=> ssh_exchange_identification: read: Connection reset by peer
接続できないことが確認できました。
指定したIPアドレスを許可する
次は、client_machine1: 172.19.0.4
のIPアドレスのみ許可してみます。
先程と同様に、今度はhosts.allow
ファイルを変更します。
vim etc/hosts.allow
ALL:172.19.0.4
接続してみます。
client_machine1: 172.19.0.4 => success
client_machine2: 172.19.0.5 => failed
期待通りの結果になりました。
おわりに
普段はソフトウェア開発をしているので、サーバやネットワークといったインフラ周りは慣れないですね。
次回のテーマは「ユーザに権限を付与する」です。