#検証環境
- [サーバー側] 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)設定
日本語になっているかを確認し、完了(D)
をクリック
###SECURITY POLICY設定
オフ
にして完了(D)
をクリック
###インストールソース(I)設定
変更点は無いので完了(D)
をクリック
###ソフトウェアの選択(S)
最小構成のインストールを選択し、完了(D)
をクリック
###インストール先
ローカルの標準ディスクにあるハードディスクを選択
ハードディスクにチェックが入っていることを確認し、完了(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への攻撃からサーバを守る