Dockerでたてたコンテナにtelnet-serverを入れて、telnetでコンテナ間通信ができるようにしてみた
いきさつ
networkやセキュリティ、telnetデーモンを叩き起こすxintedの勉強がてらやってみた。
手順
0. 準備
0-1. telnet-server用のコンテナを走らせる
$ docker pull centos:centos7 $ docker run --privileged -d --name centos_test centos:centos7 /sbin/init
なお、telnet-serverコンテナでは、
後程systemdを用いてサービスを走らせるので、
--privilegedと/sbin/initが必要になってくる。
0-2 telnet-client用のコンテナを走らせる
$ docker run -d --name telnet-client centos:centos7
1. telnet-serverコンテナの設定
1-1. telnet-serverのinstall
$ docker exec -it telnet-server /bin/bash # yum -y install telnet-server
1-2. リモートホストからのアクセス制御の設定をする
他のサーバからのアクセスを制御します。
すべてのhost/すべてのサービスからのアクセスを拒否します。
# echo 'ALL: ALL' >> /etc/hosts.deny
特定のサービス/特定のホストからのアクセスを許可します。
# echo 'in.telnetd: 172.18.0.5' >> /etc/hosts.allow
telnetデーモンに対して、172.18.0.5からアクセスがあった場合は許可します。
なお、172.18.0.5はtelnet-clientコンテナのipアドレス。
1-3. xinetdの設定
# vi /etc/xinetd.d/telnet
以下を追記します。
service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }
2. telnet-serverの起動
# systemctl status telnet.socket
3. telnet接続用のuserを作成する
# useradd telnet-user # passwd telnet-user Changing password for user telnet-user. New password: Retype new password:
4. telnet-clinentコンテナの設定
4-1. telnet-clinentのinstallをする
$ docker exec -it telnet-client /bin/bash # yum install -y telnet
4-2. 接続
いちおう、サーバ側のポートが空いていることを確認してみる。
$ nmap -sV -PE -p 23 172.18.0.4 Starting Nmap 6.40 ( http://nmap.org ) at 2018-01-09 16:00 UTC Nmap scan report for 172.18.0.4 Host is up (0.000039s latency). PORT STATE SERVICE VERSION 23/tcp open telnet Linux telnetd
あいてた。
$ telnet 172.18.0.4 23 Trying 172.18.0.4... Connected to 172.18.0.4. Escape character is '^]'. Kernel 4.14.11-coreos on an x86_64 f71734bf26ca login: telnet-user Password: Last login: Tue Jan 9 16:07:51 from 172.18.0.5
入れた!
感想
コンテナからコンテナにtelnetログインするだけでそれなりの作業量となる。
色々勉強になった。