検証環境
- [サーバー側] CentOS 7.5.1804 (Core)
- [接続側] Windows 10 Home 64bit
概要
サーバー機にCentOS7をインストールをし、WindowsからTeraTermを用いて、リモート操作するまでの手順を記載する
WindowsでRufusを用いてCentOS7をUSBに書き込み、サーバー機に作成したUSBを用いてインストール
CentOS7の基本的なセットアップを行い、公開鍵認証によるSSH接続をする
セキュリティ強化のためFail2banをインストールし、無差別ログインの対策を行う
CentOSのインストールはこちらを参考にしました
OSの用意
USBメモリを使用してCentOS 7をインストール
OSのダウンロード
OSイメージDVD ISOを以下からダウンロード
ISOイメージを元にブートUSBを作成
Rufusのダウンロード
Windwos機にて以下からRufusをダウンロード
USBメモリを挿しRufusを起動
ISOイメージを選択する
スタートをクリック
ダイアログが出るので、ISOイメージモードで書き込む(推奨)を選びOKをクリック
OSをインストール
起動デバイスをUSBメモリにしてPCを起動
起動時にF12を押し、BOOT設定を変更
起動デバイスをUSBメモリにして起動
インストール
Install CentOS 7を選択しEnter
インストールの言語を選択
下にスクロールし、日本語を選択
続行(C)をクリック
インストール概要設定
地域設定
日付と時刻
下記の点だけ設定されていることを確認
| 設定値 | 値 |
|---|---|
| 地域(R) | アジア |
| 都市(C) | 東京 |
キーボード(K)設定
言語support(L)設定
SECURITY POLICY設定
インストールソース(I)設定
ソフトウェアの選択(S)
インストール先
ローカルの標準ディスクにあるハードディスクを選択
ハードディスクにチェックが入っていることを確認し、完了(D)をクリック

KDUMP設定
KDUMPとは
KDUMPとは、カーネルパニック(システムの中核部分で何らかの理由により致命的なエラーが発生し、安全に復旧することができなくなった状態)が起きた時、原因を特定するためのdumpファイル(OSがやアプリが異常終了した際に原因特定のため、最後の瞬間のメモリやレジスタの内容を記録したファイル)を保存してくれるサービス。
参考
CentOS7でkdumpの設定
ダンプファイル 【 dump file 】 .dmpファイル / dmpファイル
カーネルパニック
今回は、便宜上無効化させていただく。
ネットワークとホスト名(N)設定
イーサネットの設定をオンにして、ホスト名(H)を設定
設定後、右下にある設定(O)をクリック

CentOS7のインストール開始
設定が終わり次第、右下のインストールの開始(B)をクリックし、インストールを開始

インストールユーザ作成
rootパスワードの設定
rootのパスワードを入力し、完了(D)をクリック
rootとはシステムを管理する最高権限を有するユーザーのため、予測し辛いパスワードを設定してください。

ユーザの作成
| 項目 | 値 |
|---|---|
| フルネーム(F) | フルネーム |
| ユーザー名(U) | ユーザー名 |
| このユーザーを管理者にする | チェックを入れる |
| このアカウントを使用する場合にパスワードを必要とする | チェックを入れる |
![]() |
設定完了後の再起動
rootパスワードとユーザーを作成し、インストールが完了したら右下の再起動(R)をクリックし、再起動

OSインストール後
再起動したら
再起動したらOSイントール時と同様に起動時にF12を押し、BOOT設定を変更
起動デバイスをOSをインストールしたHDDにして起動
起動後
マシンを再起動した後、OS選択画面が表示されます
一番上のOSを選択しEnter

ターミナルについて
今回は最小構成のインストールを選択したため、Windowsのようなマウスを使っての操作(GUI)ではなく、黒い画面に白い文字だけのターミナルでの操作(CUI)となります。
OS起動後
CentOS Linux 7 (Core)
Kernel 起動したOS
localhost login:
のような画面が表示されます
ここで先ほど作成したユーザーでログインしてみましょう
localhost login:ユーザー名
Password:パスワード
### Linuxはパスワードを打っても画面に変化はない
### そのため、文字数など間違えないように打つ
ログインしたら
Last login:曜日 月 日 時刻 from ログインしたIP
[ユーザー名@localhost ~]$
と表示されます
[ユーザー名@localhost ~]$とはユーザー名はユーザー名で、localhostはローカルホスト名です。
1スペース空けて書かれている~はユーザーがいるディレクトリ名です。
ディレクトリとは
ディレクトリとはフォルダのようなものです。
参考
#と$の違いについて
[ユーザー名@localhost ~]$の一番右にある$とはコマンド入力待ちであることを表しています。$で表示されている場合は一般ユーザーで、$が#だった場合はスーパーユーザー(システム管理者:root)であることを表しています。
コマンドを打つ際に
$ コマンド
となっている場合は一般ユーザーでコマンドを打つことを表し
# コマンド
となっている場合はrootでコマンドを打つことを表します。
ユーザーの切り替え
使うコマンドはsuです
| コマンド | 意味 | 説明 |
|---|---|---|
| su | ユーザーを切り替える(Switch User) | ユーザーを切り替えるのに使用する |
$ su
参考
パッケージ
パッケージとは
パッケージとは、Linuxが採用しているアプリケーションの配布形態のこと
セットアップファイルのようなもの
CentOSではyumやrpm、dnfなどを用いてパッケージの名前を入力するだけでアプリケーションをダウンロード、インストールできる
参考
パッケージのアップデート
OSのインストール時についてくるパッケージのアップデートを行う
### まず管理者権限(root)になる
$ su -
パスワード:パスワードを入力
# yum update
# yum upgrade
必要最低限のパッケージ
yum
後述するyum -yの-yとは
インストールしますか?(y/n)などの確認に対して、自動ですべてyを入力するもの
参考
時刻同期
# yum -y install ntpdate
# yum -y install chrony
テキストエディタ
# yum -y install vim
zip解凍に使う
# yum -y install unzip
Chrony(NTP)設定
一度時刻同期をする
# ntpdate ntp.nict.jp
chrony.confのバックアップ
cp /etc/chrony.conf /etc/chrony.conf.origin
chronyの設定ファイル編集
# sh -c "echo -e 'server ntp.nict.jp\nserver ntp.nict.jp\nserver ntp.nict.jp' > /etc/chrony.conf"
chronyの起動設定
# systemctl start chronyd
# systemctl enable chronyd
Chronyの動作確認
# chronyc sources -v
出力例
210 Number of sources = 4
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- kuroa.me 2 6 377 58 +15ms[ +15ms] +/- 56ms
^* ntp-b2.nict.go.jp 1 6 377 57 -650us[-1016us] +/- 3514us
^- time.cloudflare.com 3 6 377 59 +9134us[+8770us] +/- 70ms
^+ ntp-a2.nict.go.jp 1 6 377 58 +703us[ +338us] +/- 8305us
SELinuxの無効化
SELinuxとは
SELinuxとはセキュリティ関連のLinuxカーネル(システムの中核)制御機能である。強制アクセス制御機能を加える。
事後防衛的な手段で、もしサーバーに侵入されたとしても、被害を最小限に抑えるための仕組みとなっている。
そのため、侵入自体を防衛できるものではない。
参考
今回は、便宜上無効化させていただく。
SELinuxのConfigのバックアップ
# cp /etc/selinux/config /etc/selinux/config.origin
vimでコンフィグを編集
# vim /etc/selinux/config
SELINUX=enforcing <- コメントアウト
SELINUX=disabled <- 追加
IPv6の無効化
IPv6が必要なければ無効にしておく。
vimでコンフィグを編集
# vim /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
有効にする
| コマンド | 意味 |
|---|---|
| sysctl | カーネルパラメータを設定する |
-pは指定されたファイルから読み込んだ内容をsysctl設定にロードする
# sysctl -p /etc/sysctl.d/disable_ipv6.conf
参考
# man sysctl
SSH(Secure Shell)とは
ネットワークを経由して他のコンピュータ(主にサーバー)に接続し、遠隔操作するためのもの。
また、通信途中の情報はすべて暗号化される
昔は暗号化通信をしないtelnetというものがあった
また、sshdのdはデーモン
Windows側の操作
Windowsでssh接続するにはTeratermというソフトが使われる。
ソフトのダウンロード
窓の杜等からダウンロードする
表示されるダイアログに従ってインストールを進める
公開鍵認証によるSSH接続
ssh接続を行う際、そのままではユーザーIDとパスワードがあればどのPCからでもログインができる
これではパスワードが分かればだれでもサーバーを操作することができる
これを防ぐため、パスフレーズを使ってログインする公開鍵認証方式を行う
公開鍵認証ではサーバーに公開鍵を登録し、遠隔操作したいPC(クライアント)は保存してある秘密鍵を用いてログインする
公開鍵と秘密鍵の生成
公開鍵と秘密鍵を生成するために、Tera Termを起動する
起動すると新しい接続ウィンドウが表示されるので、キャンセルをクリック
TeraTermの設定からSSH鍵生成をクリック
鍵生成ウィンドウが表示されるため生成(G)をクリック
パスフレーズは空でも構いません
公開鍵の保存(I)をクリック
保存先はどこでも良いのですが、ここではC:\Users\ユーザー名フォルダに.sshフォルダを作り、その中に保存しましょう
秘密鍵の保存(P)をクリックし、同様のフォルダに保存
これで、公開鍵と秘密鍵の生成は完了
公開鍵の転送
ここで一度パスワード認証でログインSSH接続を行う
Teratermを再起動し、新しい接続ウィンドウを表示
ホストに接続したいPCのIPやURLを入力
OKをクリック
ユーザー名とパスワードを入力し、プレインテキストを使うが選択されていることを確認しOKをクリック
これにてログインが完了する
Teratermに先ほど作成した公開鍵ファイル(id_rsa.pub)をドラックアンドドロップする
SCPが選択されており、送信先が~/になっていることを確認してウィンドウ下部のOKをクリック
ホームディレクトリでlsコマンドを打ち、ファイルが入っているかを確認
これで公開鍵の転送は終了
TeraTermのショートカットによるログインの簡略化
Teratermにはショートカットを用いることでログインまでの操作を簡略化できる
そのため、ログイン用のショートカットを作成する
デスクトップで右クリック
新規作成からショートカットをクリック
項目の場所の入力部分に以下の内容を入力し次へをクリック
# "teratermのexeファイルの場所の指定" 接続先IPアドレス:ポート番号 認証方法 ユーザー名 パスワード 鍵のファイルパス
# 初期のSSHのポート番号は22なのでIPアドレス:22と入力
例
"C:\Program Files (x86)\teraterm\ttermpro.exe" aaa.bbb.ccc.ddd:xx /auth=publickey /user=username /keyfile=C:\Users\username\.ssh\id_rsa
ショートカットの名前を適当に決め、完了をクリック
これでショートカットの作成は終了
参考
CentOS7側の操作
sshdの設定
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.origin
# vim /etc/ssh/sshd_config
# 39行目 - rootユーザーによるログインを許可するか
PermitRootLogin no <-追加
# 66行目 - パスワードなしのログインを許可するか
PermitEmptyPasswords no <-追加
# 68行目 - パスワード認証を許可するか
PasswordAuthentication no <-追加
SSHサービスの起動
SSHのサービスを起動する
# systemctl start sshd.service
サービスが起動したかの確認
# systemctl status sshd.service
出力例
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 月 2020-02-10 00:02:16 JST; 1 day 5h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1696 (sshd)
CGroup: /system.slice/sshd.service
mq1696 /usr/sbin/sshd -D
ファイアウォールの設定
CentOS 7.3ではSSH用のポートが元から開放されているため、設定は不要
一応確認方法
# firewall-cmd --list-all
service:欄にsshが入っていればOK
もし入っていなければ
# firewall-cmd --permanent --add-service=ssh
公開鍵の登録
ここで作成した一般ユーザーに切り替える
# su - user
クライアントからアップロードした公開鍵を登録する
~/.ssh/authorized_keysに公開鍵の内容を追記することで登録できる
authorized_keysには複数の公開鍵を登録できる
vimやcatで追記しよう
# ~/.ssh フォルダが存在しない場合, 作成する
$ mkdir ~/.ssh
# 転送したid_rsa.pubの内容をauthorized_keysに追記する
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
# 所有者以外のアクセスを許可しない
$ chmod 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys
# 登録済みの公開鍵を削除する
$ rm ~/id_rsa.pub
これでWindows側のショートカットを起動すると接続できる
参考
セキュリティ強化について
セキュリティを無視していると無差別ログインが1日だけでも膨大な量アクセスアタックされるため
そのためfail2banを導入する
fail2banのインストールと設定
epel-releaseリポジトリをインストールする
yum install epel-release
Fail2ban等のインストール
yum install fail2ban fail2ban-systemd direwalld
Fail2banの設定
# vim /etc/fail2ban/jail.d/jail.local
23行目
# [sshd] <- コメント削除
# enabled = true <- コメント削除
banaction = firewallcmd-ipset <- 追加
43行目-72行目
# [DEFAULT] <- コメント削除
# 24時間以内に3回不審なアクセスがあったら24時間BAN
bantime = 86400 <- 変更
findtime = 86400 <- 変更
maxretry = 3 <- 変更
96行目
# CentOS7のためsystemd
backend = systemd <- 変更
OS再起動時にサービスを自動的に起動する
# systemctl enable fail2ban
# systemctl enable firewalld
サービスの起動
# systemctl start firewalld
# systemctl start fail2ban
Fail2banのステータスを確認
# systemctl status fail2ban
出力例
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2020-02-09 23:40:59 JST; 1min 32s ago
Docs: man:fail2ban(1)
Process: 16160 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 16163 (f2b/server)
CGroup: /system.slice/fail2ban.service
mq16163 /usr/bin/python -s /usr/bin/fail2ban-server -xf start
2月 09 23:40:59 localhost.localdomain systemd[1]: Starting Fail2Ban Service...
2月 09 23:40:59 localhost.localdomain systemd[1]: Started Fail2Ban Service.
2月 09 23:41:00 localhost.localdomain fail2ban-server[16163]: Server ready
Hint: Some lines were ellipsized, use -l to show in full.
BANされたIPアドレスの確認
# fail2ban-client status sshd
出力例
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 2
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
参考
CentOS7での fail2banのインストールと設定方法(with firewalld)
CentOS7 fail2banでSSH, SMTPへの攻撃からサーバを守る






















