5
10

More than 3 years have passed since last update.

[Linux初心者] CentOS 7 基本セットアップからTeraTermを用いたSSH接続まで [Windows]

Last updated at Posted at 2020-02-11

検証環境

  • [サーバー側] CentOS 7.5.1804 (Core)
  • [接続側] Windows 10 Home 64bit

概要

サーバー機にCentOS7をインストールをし、WindowsからTeraTermを用いて、リモート操作するまでの手順を記載する
WindowsでRufusを用いてCentOS7をUSBに書き込み、サーバー機に作成したUSBを用いてインストール
CentOS7の基本的なセットアップを行い、公開鍵認証によるSSH接続をする
セキュリティ強化のためFail2banをインストールし、無差別ログインの対策を行う

CentOSのインストールはこちらを参考にしました

CentOS7基本セットアップ
CentOS7の初期セットアップ手順
CentOS 7 インストール

OSの用意

USBメモリを使用してCentOS 7をインストール

OSのダウンロード

OSイメージDVD ISOを以下からダウンロード

https://www.centos.org/download/

ISOイメージを元にブートUSBを作成

Rufusのダウンロード

Windwos機にて以下からRufusをダウンロード

https://rufus.akeo.ie
untni.png

USBメモリを挿しRufusを起動

ISOイメージを選択する

Rufus2.png

1.png

スタートをクリック

2.png

ダイアログが出るので、ISOイメージモードで書き込む(推奨)を選びOKをクリック

OSをインストール

起動デバイスをUSBメモリにしてPCを起動

起動時にF12を押し、BOOT設定を変更
起動デバイスをUSBメモリにして起動

インストール

Install CentOS 7を選択しEnter

687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a54584a694e5574334d337058616c6b.png

インストールの言語を選択

下にスクロールし、日本語を選択
続行(C)をクリック

687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a4d576458626e6855545767324d6b45.png

インストール概要設定

各設定事項を設定していく
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a5a486c565956466c656b5a784e6d4d.png

地域設定

日付と時刻

下記の点だけ設定されていることを確認

設定値
地域(R) アジア
都市(C) 東京

キーボード(K)設定

デフォルトで日本語キーボードになっていることを確認
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a536e6c475a4534314f554a69643273.png

言語support(L)設定

日本語になっているかを確認し、完了(D)をクリック
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a627a4a3253546778596d5a69636a41.png

SECURITY POLICY設定

オフにして完了(D)をクリック
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a626a6435616b686d4e453879575645.png

インストールソース(I)設定

変更点は無いので完了(D)をクリック
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a655645355254553464464a30636d4d.png

ソフトウェアの選択(S)

最小構成のインストールを選択し、完了(D)をクリック
3-2-2-software.jpg

インストール先

ローカルの標準ディスクにあるハードディスクを選択
ハードディスクにチェックが入っていることを確認し、完了(D)をクリック
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a4d6e4e3061323957537a686e63316b.png

KDUMP設定

KDUMPとは

KDUMPとは、カーネルパニック(システムの中核部分で何らかの理由により致命的なエラーが発生し、安全に復旧することができなくなった状態)が起きた時、原因を特定するためのdumpファイル(OSがやアプリが異常終了した際に原因特定のため、最後の瞬間のメモリやレジスタの内容を記録したファイル)を保存してくれるサービス。

参考

CentOS7でkdumpの設定
ダンプファイル 【 dump file 】 .dmpファイル / dmpファイル
カーネルパニック

今回は、便宜上無効化させていただく。

チェックをはずし、完了(D)をクリック
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a595442354d577435556b6452554645.png

ネットワークとホスト名(N)設定

イーサネットの設定をオンにして、ホスト名(H)を設定
設定後、右下にある設定(O)をクリック
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a644664575a45557459564e72536c55.png

CentOS7のインストール開始

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

インストールユーザ作成

インストール中にrootのパスワードとユーザ作成を実施
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a636b56575958467957545a4c566e4d.png

rootパスワードの設定

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

ユーザの作成

項目
フルネーム(F) フルネーム
ユーザー名(U) ユーザー名
このユーザーを管理者にする チェックを入れる
このアカウントを使用する場合にパスワードを必要とする チェックを入れる

687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a524556715a57785054323434613263.png

設定完了後の再起動

rootパスワードとユーザーを作成し、インストールが完了したら右下の再起動(R)をクリックし、再起動
687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a544864485a57357262314d77596a67.png

OSインストール後

再起動したら

再起動したらOSイントール時と同様に起動時にF12を押し、BOOT設定を変更
起動デバイスをOSをインストールしたHDDにして起動

起動後

マシンを再起動した後、OS選択画面が表示されます
一番上のOSを選択しEnter
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f36313630362f30313535376662322d653731382d396531322d643737302d3765383537373162313433662e706e67.png

ターミナルについて

今回は最小構成のインストールを選択したため、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

参考

最低限覚えておくべき事
suコマンドの基本

パッケージ

パッケージとは

パッケージとは、Linuxが採用しているアプリケーションの配布形態のこと
セットアップファイルのようなもの
CentOSではyumやrpm、dnfなどを用いてパッケージの名前を入力するだけでアプリケーションをダウンロード、インストールできる

参考

パッケージ

パッケージのアップデート

OSのインストール時についてくるパッケージのアップデートを行う

### まず管理者権限(root)になる
$ su -
パスワード:パスワードを入力
# yum update
# yum upgrade

必要最低限のパッケージ

yum

後述するyum -y-yとは
インストールしますか?(y/n)などの確認に対して、自動ですべてyを入力するもの

参考

yumコマンドで覚えておきたい使い方19個(+1個)

時刻同期
# 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とは?
SELinux を使おう.使ってくれ.

今回は、便宜上無効化させていただく。

SELinuxのConfigのバックアップ
# cp /etc/selinux/config /etc/selinux/config.origin

vimでコンフィグを編集

# vim /etc/selinux/config
/etc/selinux/config
SELINUX=enforcing      <- コメントアウト
SELINUX=disabled       <- 追加

IPv6の無効化

IPv6が必要なければ無効にしておく。

vimでコンフィグを編集

# vim /etc/sysctl.d/disable_ipv6.conf
/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を起動する
起動すると新しい接続ウィンドウが表示されるので、キャンセルをクリック

teraterm1.png

TeraTermの設定からSSH鍵生成をクリック

teraterm2.png

鍵生成ウィンドウが表示されるため生成(G)をクリック

image.png

パスフレーズは空でも構いません
公開鍵の保存(I)をクリック

保存先はどこでも良いのですが、ここではC:\Users\ユーザー名フォルダに.sshフォルダを作り、その中に保存しましょう

image.png

秘密鍵の保存(P)をクリックし、同様のフォルダに保存

image.png

これで、公開鍵と秘密鍵の生成は完了

公開鍵の転送

ここで一度パスワード認証でログインSSH接続を行う
Teratermを再起動し、新しい接続ウィンドウを表示
ホストに接続したいPCのIPやURLを入力
OKをクリック

image.png

ユーザー名パスワードを入力し、プレインテキストを使うが選択されていることを確認しOKをクリック

これにてログインが完了する
Teratermに先ほど作成した公開鍵ファイル(id_rsa.pub)をドラックアンドドロップする

teraterm3.png

SCPが選択されており、送信先が~/になっていることを確認してウィンドウ下部のOKをクリック

teraterm4.png

ホームディレクトリでlsコマンドを打ち、ファイルが入っているかを確認
これで公開鍵の転送は終了

TeraTermのショートカットによるログインの簡略化

Teratermにはショートカットを用いることでログインまでの操作を簡略化できる
そのため、ログイン用のショートカットを作成する

デスクトップで右クリック
新規作成からショートカットをクリック

tera5.png

項目の場所の入力部分に以下の内容を入力し次へをクリック

# "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

ショートカットの名前を適当に決め、完了をクリック
これでショートカットの作成は終了

参考

公開鍵認証によるSSH接続 - Tera Termの使い方
【手順】teratermのショートカット作成方法

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には複数の公開鍵を登録できる
vimcatで追記しよう

# ~/.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側のショートカットを起動すると接続できる

参考

CentOS7.3でSSH接続(公開鍵認証)する方法

セキュリティ強化について

セキュリティを無視していると無差別ログインが1日だけでも膨大な量アクセスアタックされるため
そのためfail2banを導入する

fail2banのインストールと設定

epel-releaseリポジトリをインストールする

yum install epel-release

Fail2ban等のインストール

yum install fail2ban fail2ban-systemd direwalld

Fail2banの設定

# vim /etc/fail2ban/jail.d/jail.local
jail.loacl
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への攻撃からサーバを守る

5
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
10