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

#検証環境
- [サーバー側]　CentOS 7.5.1804 (Core)
- [接続側]　Windows 10 Home 64bit

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

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

>[CentOS7基本セットアップ](https://qiita.com/SkyLaptor/items/1036d470c2d4117b9954)
>[CentOS7の初期セットアップ手順](https://qiita.com/0ta2/items/779fa69bf9e15b9e6fee)
>[CentOS 7 インストール](https://qiita.com/fiftystorm36/items/27368f855141b311d014)

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

###OSのダウンロード
OSイメージ**DVD ISO**を以下からダウンロード
> https://www.centos.org/download/

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

###Rufusのダウンロード
Windwos機にて以下からRufusをダウンロード
>https://rufus.akeo.ie
![untni.png](https://qiita-image-store.s3.amazonaws.com/0/300671/ca708db4-269a-ff88-fc34-6f274d5a3387.png)

USBメモリを挿しRufusを起動

ISOイメージを`選択`する

![Rufus2.png](https://qiita-image-store.s3.amazonaws.com/0/300671/69e8e869-314a-4067-4691-2afa81f64130.png)

![1.png](https://qiita-image-store.s3.amazonaws.com/0/300671/06d21bc7-030b-fe38-5a49-5bed4f756252.png)

`スタート`をクリック

![2.png](https://qiita-image-store.s3.amazonaws.com/0/300671/94b9f45d-0068-6736-af2e-bd8b41b8ebf7.png)

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

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

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

####インストール

`Install CentOS 7`を選択し**Enter**

<img width="638" alt="687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a54584a694e5574334d337058616c6b.png" src="https://qiita-image-store.s3.amazonaws.com/0/300671/6e3f4757-59cc-d32f-1ea4-1b14c79789f1.png">

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

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

![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a4d576458626e6855545767324d6b45.png](https://qiita-image-store.s3.amazonaws.com/0/300671/b09db0a2-6bfd-6431-a2d5-02e2c0e57d50.png)

###インストール概要設定
各設定事項を設定していく
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a5a486c565956466c656b5a784e6d4d.png](https://qiita-image-store.s3.amazonaws.com/0/300671/ed760e89-1c20-37ef-127b-a381a1b696bd.png)

###地域設定
####日付と時刻
下記の点だけ設定されていることを確認

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

###キーボード(K)設定
デフォルトで日本語キーボードになっていることを確認
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a536e6c475a4534314f554a69643273.png](https://qiita-image-store.s3.amazonaws.com/0/300671/a405d8b4-b076-c55d-c2bb-29261867edb9.png)


###言語support(L)設定
日本語になっているかを確認し、`完了(D)`をクリック
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a627a4a3253546778596d5a69636a41.png](https://qiita-image-store.s3.amazonaws.com/0/300671/9b4beafd-4edc-8b59-3b8a-24571214d134.png)

###SECURITY POLICY設定
`オフ`にして`完了(D)`をクリック
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a626a6435616b686d4e453879575645.png](https://qiita-image-store.s3.amazonaws.com/0/300671/220db222-964f-bb61-27fc-8dd2da204c16.png)

###インストールソース(I)設定
変更点は無いので`完了(D)`をクリック
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a655645355254553464464a30636d4d.png](https://qiita-image-store.s3.amazonaws.com/0/300671/f64e7969-c195-31f7-deba-c64af7cd6cc4.png)

###ソフトウェアの選択(S)
**最小構成のインストール**を選択し、`完了(D)`をクリック
![3-2-2-software.jpg](https://qiita-image-store.s3.amazonaws.com/0/300671/893b150c-1924-c84d-75e9-a2737b922adb.jpeg)

###インストール先
**ローカルの標準ディスク**にあるハードディスクを**選択**
ハードディスクに**チェック**が入っていることを確認し、`完了(D)`をクリック
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a4d6e4e3061323957537a686e63316b.png](https://qiita-image-store.s3.amazonaws.com/0/300671/af355916-b2d8-b254-5390-7eb686e8e934.png)

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

**参考**
>
[CentOS7でkdumpの設定](https://daichan.club/linux/8)
[ダンプファイル 【 dump file 】 .dmpファイル / dmpファイル](http://e-words.jp/w/%E3%83%80%E3%83%B3%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.html)
[カーネルパニック](https://www.weblio.jp/content/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%83%91%E3%83%8B%E3%83%83%E3%82%AF)

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

チェックをはずし、`完了(D)`をクリック
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a595442354d577435556b6452554645.png](https://qiita-image-store.s3.amazonaws.com/0/300671/47e4bf03-c8bb-b0e2-217d-a99060591475.png)

###ネットワークとホスト名(N)設定
イーサネットの設定を`オン`にして、`ホスト名(H)`を設定
設定後、右下にある`設定(O)`をクリック
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a644664575a45557459564e72536c55.png](https://qiita-image-store.s3.amazonaws.com/0/300671/c18c83b7-f14c-8ca9-0b52-c4997f4d25bf.png)

### CentOS7のインストール開始
設定が終わり次第、右下の`インストールの開始(B)`をクリックし、インストールを開始
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a53564132626b784f53474e74624555.png](https://qiita-image-store.s3.amazonaws.com/0/300671/c28b3777-0d2e-25de-18a0-d65c8885f856.png)

### インストールユーザ作成
インストール中にrootのパスワードとユーザ作成を実施
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a636b56575958467957545a4c566e4d.png](https://qiita-image-store.s3.amazonaws.com/0/300671/519674e2-f839-28da-51e7-207084699fb4.png)

#### rootパスワードの設定
rootのパスワードを入力し、`完了(D)`をクリック
rootとは**システムを管理する最高権限を有するユーザー**のため、予測し辛いパスワードを設定してください。
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a6548707153545a774f45466f5a5451.png](https://qiita-image-store.s3.amazonaws.com/0/300671/7527ef89-6ef4-1818-c71c-ac406560a5ef.png)

#### ユーザの作成

|項目|値|
|---|---|
|フルネーム(F)|フルネーム|
|ユーザー名(U)|ユーザー名|
|このユーザーを管理者にする|チェックを入れる|
|このアカウントを使用する場合にパスワードを必要とする|チェックを入れる|
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a524556715a57785054323434613263.png](https://qiita-image-store.s3.amazonaws.com/0/300671/0eb4a91d-4327-198f-969e-df808e391d65.png)

### 設定完了後の再起動
rootパスワードとユーザーを作成し、インストールが完了したら右下の`再起動(R)`をクリックし、再起動
![687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f6578706f72743d766965772669643d3042796831614171624169674a544864485a57357262314d77596a67.png](https://qiita-image-store.s3.amazonaws.com/0/300671/ec484185-12a3-e668-dbed-c63febef1b72.png)

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

#### 起動後
マシンを再起動した後、OS選択画面が表示されます
`一番上のOS`を選択し`Enter`
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f36313630362f30313535376662322d653731382d396531322d643737302d3765383537373162313433662e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/300671/5be67ec4-459e-458c-fd6c-87f34e5a27eb.png)

### ターミナルについて
今回は最小構成のインストールを選択したため、Windowsのようなマウスを使っての操作(GUI)ではなく、黒い画面に白い文字だけのターミナルでの操作(CUI)となります。
#### OS起動後

```shell-session
CentOS Linux 7 (Core)
Kernel 起動したOS

localhost login:
```
のような画面が表示されます
ここで先ほど作成したユーザーでログインしてみましょう

```sh
localhost login:ユーザー名
Password:パスワード
### Linuxはパスワードを打っても画面に変化はない
### そのため、文字数など間違えないように打つ
```

ログインしたら

```shell-session
Last login:曜日　月　日　時刻　from ログインしたIP
[ユーザー名@localhost ~]$
```
と表示されます
`[ユーザー名@localhost ~]$`とはユーザー名はユーザー名で、localhostはローカルホスト名です。
1スペース空けて書かれている`~`はユーザーがいるディレクトリ名です。

##### ディレクトリとは
ディレクトリとはフォルダのようなものです。

**参考**
> [「ディレクトリ」と「フォルダ」の違いと共通点](https://uxmilk.jp/27546)

#### #と$の違いについて

`[ユーザー名@localhost ~]$`の一番右にある`$`とはコマンド入力待ちであることを表しています。`$`で表示されている場合は一般ユーザーで、`$`が`#`だった場合はスーパーユーザー(システム管理者:root)であることを表しています。

コマンドを打つ際に

```shell-session
$ コマンド 
```
となっている場合は一般ユーザーでコマンドを打つことを表し

```shell-session
# コマンド
```
となっている場合はrootでコマンドを打つことを表します。

#### ユーザーの切り替え

使うコマンドは`su`です

|コマンド|意味|説明|
|---|---|---|
|su|ユーザーを切り替える(Switch User)|ユーザーを切り替えるのに使用する|

```shell-session
$ su
```

**参考**
> [最低限覚えておくべき事](http://hooktail.org/computer/index.php?%BA%C7%C4%E3%B8%C2%B3%D0%A4%A8%A4%C6%A4%AA%A4%AF%A4%D9%A4%AD%BB%F6)
[suコマンドの基本](https://qiita.com/i35_267/items/39f09643383353861565)

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

**参考**
> [パッケージ](https://tech.nikkeibp.co.jp/it/article/Keyword/20110427/359976/)

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

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

```
# yum update
# yum upgrade
```

## 必要最低限のパッケージ
### yum
後述する`yum -y`の`-y`とは
インストールしますか？(y/n)などの確認に対して、自動ですべてyを入力するもの

**参考**
> [yumコマンドで覚えておきたい使い方19個(+1個)](https://orebibou.com/2016/09/yum%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E4%BD%BF%E3%81%84%E6%96%B9xx%E5%80%8B/)

##### 時刻同期

```shell-session
# yum -y install ntpdate
# yum -y install chrony
```

##### テキストエディタ

```shell-session
# yum -y install vim
```

##### zip解凍に使う

```shell-session
# 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とは？](https://eng-entrance.com/linux-selinux)
[SELinux を使おう．使ってくれ．](https://qiita.com/chi9rin/items/af532d0dd9237cc65741)

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

##### SELinuxのConfigのバックアップ

```shell-session
# cp /etc/selinux/config /etc/selinux/config.origin
```
vimでコンフィグを編集

```shell-session
# vim /etc/selinux/config
```

```sh:/etc/selinux/config
SELINUX=enforcing      <- コメントアウト
SELINUX=disabled       <- 追加
```

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

vimでコンフィグを編集

```shell-session
# vim /etc/sysctl.d/disable_ipv6.conf
```

```shell-session:/etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```
有効にする

|コマンド|意味|
|---|---|
|sysctl|カーネルパラメータを設定する|

`-p`は指定されたファイルから読み込んだ内容を`sysctl`設定にロードする

```shell-session
# sysctl -p /etc/sysctl.d/disable_ipv6.conf
```
**参考**
> 
```shell-session
# man sysctl
```

## SSH(Secure Shell)とは
ネットワークを経由して他のコンピュータ(主にサーバー)に接続し、遠隔操作するためのもの。
また、通信途中の情報はすべて暗号化される
昔は暗号化通信をしないtelnetというものがあった
また、sshdのdはデーモン

## Windows側の操作
Windowsでssh接続するにはTeratermというソフトが使われる。

###ソフトのダウンロード
[窓の杜](https://forest.watch.impress.co.jp/library/software/utf8teraterm/)等からダウンロードする

表示されるダイアログに従ってインストールを進める

### 公開鍵認証によるSSH接続
ssh接続を行う際、そのままではユーザーIDとパスワードがあればどのPCからでもログインができる
これではパスワードが分かればだれでもサーバーを操作することができる
これを防ぐため、**パスフレーズ**を使ってログインする公開鍵認証方式を行う
公開鍵認証ではサーバーに公開鍵を登録し、遠隔操作したいPC(クライアント)は保存してある秘密鍵を用いてログインする

### 公開鍵と秘密鍵の生成
公開鍵と秘密鍵を生成するために、`Tera Term`を起動する
起動すると`新しい接続`ウィンドウが表示されるので、`キャンセル`をクリック

![teraterm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/7ae7d362-ba35-3567-b4e1-ba5ed7c3f78d.png)

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

![teraterm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/21fb4bf3-7143-a9cb-4c51-1a3cbf52f28d.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/f54989c9-5703-b27e-9cb3-318c1da78512.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/346b7cff-b023-6e0e-fb29-0f4cea8cd4a3.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/a05387b5-09de-198e-f1e3-313ab2b3afa0.png)


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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/17f6a0a1-d184-062c-4391-aa2cb41c4e67.png)

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

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

![teraterm3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/fdd4fbee-3a97-328f-92bd-288b87365013.png)

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

![teraterm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/703e57a1-ad51-f3d1-8d5c-d1d942bee919.png)

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

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

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

![tera5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300671/99a65328-bc27-d007-0f8a-768a69152e15.png)

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

```sh
# "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の使い方](https://webkaru.net/linux/tera-term-ssh-login-public-key/)
> [【手順】teratermのショートカット作成方法](https://qiita.com/takahashi-kazuki/items/1bf502497461bc6f285b)

## CentOS7側の操作
### sshdの設定

```
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.origin
# vim /etc/ssh/sshd_config
```

```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`で追記しよう

```sh
# ~/.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接続(公開鍵認証)する方法](https://qiita.com/uhooi/items/137de4578534c8e7e7f2)

### セキュリティ強化について
セキュリティを無視していると無差別ログインが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）](https://qiita.com/wmx/items/2ebedd5a16d27c07089b)
> [CentOS7 fail2banでSSH, SMTPへの攻撃からサーバを守る](https://qiita.com/pypypyo14/items/cfcaad2783debfafe505)