CentOS7系のまず初めにやるべき初期設定

サーバーにあまり詳しくない方がVPSやクラウドなどで初めてプライベートサーバーを契約したとき、CentOSやUbuntuなどを選択してインストールすることになりますが、既にさまざまな設定がされているレンタルサーバーと違い、プライベートサーバーではサーバーに関する設定も自分で行わなければなりません。

この記事ではCentOS7系でまず初めにするべきな初期設定をご紹介します。

sshでCentOSサーバーに接続する

レンタルサーバーと違い、VPSなどではサーバーに関する設定を簡単に行えるコントロールパネルや管理画面などは用意されていないことが多いです。
そこで、sshでサーバーに接続し、コマンドを打ち込み設定を行っていきます。

ここでは、サーバーのセットアップ時に決めたrootのパスワードとサーバーのIPアドレスを使用するのでメモっておきましょう。

Macの方は標準でインストールされているターミナル、Windowsの方はTeraTermなどのSSHクライアントを使用します。

以下、下記の設定だと仮定して進めていきますので実際にはご自分の設定に置き換えてください。

  • IPアドレス:xxx.xxx.xxx.xxx
  • rootパスワード:rootpassword

ターミナルを開いたらまず下記のコマンドを打ち込んでください。

エンターを押すとパスワードを求められますのでrootパスワードを入力します。
初めてSSHでアクセスする場合はアクセスしていいかの確認をされますのでyesと打ち込みましょう。

$ ssh root@xxx.xxx.xxx.xxx
root@xxx.xxx.xxx.xxx's password: # パスワード入力

[root@xxx.xxx.xxx.xxx ~]#

これでSSH接続ができました。

root以外でログインできるようにする

常にrootでログインをするのは危険なのでrootにログインできるユーザーを新規作成します。

ユーザーを作成する

ここではnewuserというユーザーを作成していきます。

// ユーザー作成
# adduser newuser

// パスワード設定
# passwd newuser
// newuserに設定するパスワード、rootとは別のものにしたほうがいい

// wheelグループに追加(newuserがrootになれるようにする)
# gpasswd -a newuser wheel

// 作成したnewuserでログインできるか確認
# su newuser

作成したユーザーからsudoができるか確認

作成したnewuserからsudoができるかを確認します。
sudoとは特権ユーザー(root)レベルでのコマンド操作をすることをいいます。

$ sudo echo "aaa"
[sudo] password for newuser: //newuserのパスワードを入力
aaa

aaaと表示されればOKです。

SSH keyでのログインを許可する

続いて、よりセキュリティを高めるためにパスワードではなくSSHKeyファイルでのログインができるようにしていきます。
ssh接続に関する設定は/etc/ssh/sshd_configに書かれているのでそちらを編集します。

$ sudo vi /etc/ssh/sshd_config

以下の3つを編集・もしくは付け加えます。コメントアウトされているものはコメントアウト(先頭の#)を外してください。

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

編集が終わったら保存してsshdをリスタートさせます。

sudo systemctl restart sshd.service

SSH Keyを作成

SSH Keyでログインをする許可ができたので実際にKeyを作っていきます。

// ~/.ssh を作成
$ cd ~/
$ mkdir .ssh
$ chmod 700 .ssh

// 鍵を作成
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048
Enter file in which to save the key: xxxx   // ファイル名(好きな英字)
Enter passphrase:                           // パスフレーズを設定(空でも可)
Enter same passphrase again:                // パスフレーズをもう一度

# AuthorizedKeysFileで設定したファイル名に名前変更
$ mv xxxx.pub authorized_keys               // xxxxは先程決めたファイル名
$ chmod 600 authorized_keys

続いて作成したKeyをコピーします。
下記コマンドでファイルの中身が表示されるので—–BEGIN RSA PRIVATE KEY—–から始まるテキストすべてをコピーしてください。

$ cat xxxx

ローカルにSSH Keyを作る

ここまできたらターミナルを別ウインドウでもう一つ立ち上げましょう。
自分のパソコンからKeyファイルでのSSH接続ができるように設定していきます。

$ cd ~/.ssh
$ vi xxxx.pem //先ほどcat xxxxでコピーした内容をペーストして保存してください
$ chmod 600 xxxx.pem

上記で作成したKeyファイルでSSH接続ができるように~/.ssh/ssh_configに以下の内容を追記します。
1行目のcentosはお好きな文字列に変更してください。

Host centos
	HostName xxx.xxx.xxx.xxx
	User newuser
	Port 22
	IdentityFile ~/.ssh/xxxx.pem

新規ユーザーでログインできるかテスト

SSH Keyを使用してnewuserでログインできるかテストをします。
下記のcentosの部分は前項で設定したホスト名にしてください。

$ ssh centos

パスワードを求められたらnewuserのパスワードを入力しましょう。

rootからのログイン、パスワードでのを禁止

外部からrootでログインをされるととても危険なのでrootからのログインを禁止します。
また、パスワードでのログインも同様に悪意のあるハッカーなどに突破されてしまう可能性があるので禁止にします。

$ sudo vi /etc/ssh/sshd_config

以下の項目を編集します。
初期設定では2つともyesになっているのでnoに変更してください。

PermitRootLogin no

PasswordAuthentication no

編集が終わったらsshdの再起動をします。

sudo systemctl restart sshd.service

セキュリティの設定

これで最低限のSSHに関するセキュリティは終了しましたがまだ十分ではありません。
firewalldを有効にし、セキュリティを向上させます。

インストールしたばかりでは無効になっているとは思いますが念の為firewalldを停止します。

$ sudo systemctl stop firewalld.service

iptablesの設定

接続できるポートを制限するためCentOS7はデフォルトでiptablesサービスが入っていないのでまずインストールします。

$ sudo yum install iptables-services

Webサービスなどでサーバーを使用する場合httpやhttpsを使用することになると思いますので80番と443番のポートを開放します。

$ sudo /sbin/iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo /sbin/iptables -I INPUT 6 -p tcp -m tcp --dport 443 -j ACCEPT

これで使用するポートが開放されますのでiptablesの起動、自動起動の設定をします。

$ sudo systemctl start iptables
$ sudo systemctl enable iptables

firewalldの設定

iptablesの設定が終わったらfirewalldを起動、自動起動の設定を行います。

$ sudo systemctl start firewalld.service
$ sudo systemctl enable firewalld.service

これで基本的なセキュリティ設定は終了です。

SELinuxの無効化

SELinuxは、WEBサーバーとして動作させる際に、予期せぬ制約がかかり、期待通りに動かないことが多いので無効化しておきます。

現在の状態を確認

VPSによっては最初から無効化されていることもあるので下記コマンドにて現在の状態を確認します。

$ getenforce

Enforcingと出力されれば有効です。

設定ファイルの修正

まずは設定ファイルを修正するために念の為、バックアップをとっておきます。

$ sudo cp -piv /etc/selinux/config /etc/selinux/config.`date "+%Y%m%d"`

バックアップが取れたらviコマンドで/etc/selinux/configを下記のように編集してください。

$ sudo vi /etc/selinux/config

SELINUX=enforcingをコメントアウトしてその直後にSELINUX=disabledを記入しています。

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

OSの再起動、確認

更新した設定を適応するためOSを再起動します。

$ sudo shutdown -r now

再起動後、下記コマンドでDisabledと表示されれば設定は完了です。

$ getenforce

WEBサーバーのインストール

VPSなどは契約しただけではWEBサーバーとしては動きません。
WEBサーバーとして使用する場合はapacheやnginxなどのインストールが別途必要になります。

わたしはnginxを主に使用しているので後日、nginxを使用したWEBサーバーの立て方をご紹介します。