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サーバーの立て方をご紹介します。