VPSにサーバーを立てるときの事

サーバーを立てたりつぶしたりを繰り返している今日この頃ですが
少し長めに使うときには、セキュリティの面でもパフォーマンスの面でも
やっておきたい設定というのがいくつかあるので、CentOS7系の設定を書いておきます。

作業ユーザーの作成・wheelグループに追加

これは最優先というか、最初にやらないといけないものですね。
rootでのログインを禁止するためにも、作業用のユーザーを作っておく必要があります。
作業ユーザーの作成、作業ユーザーのパスワード設定を順にします。
VPSではrootのパスワードはさすがに設定していると思うので、ここでは特に書きません。

# useradd (username)
# passwd (username)
Changing password for user username.
New password:(password)
Retype New Password:(password)

wheelグループにユーザーを追加

# gpasswd -a (username) wheel

rootログイン禁止・公開鍵認証

SSHでつながる大半のホストに存在しているrootを狙った攻撃は非常に多いです。
rootは全権を持っているのでrootを奪われるとサーバーを侵入者の自由にできてしまいます。

攻撃側は、ユーザー名が判明しているのでパスワードアタックをかけるだけでよくなるため
rootではパスワードログインできないようにするというのがSSHでの基本的な対策となります。

また、作業ユーザーでログインするときもパスワードではなく公開鍵で認証するようにします。
これにより、rootでの作業が必要になるときは公開鍵とrootパスワード両方が必要になります。

/etc/ssh/sshd_configの設定を変更

# rootのログインを禁止する
PermitRootLogin no
# RSA認証を使用する
RSAAuthentication yes
# 公開鍵認証を使用する
PubkeyAuthentication yes
# パスワード認証を使用しない
PasswordAuthentication no

公開鍵の設定(id_rsa.pubは自分の公開鍵を転送しておきます)
※公開鍵のパーミッションは600にしておかないと認証時にエラーになります。

# mkdir /home/(username)/.ssh
# mv id_rsa.pub /home/(username)/.ssh/authorized_keys
# chmod 600 /home/(username)/.ssh/authorized_keys
# chmod 700 /home/(username)/.ssh
# chown -R (username):(username) /home/(username)/.ssh

sshサービスの再起動

# systemctl restart sshd.service

firewalldの起動

気が利いたVPSサービスだとファイアウォールが入っていたりしますが
全部がそんなサービスがではないので、サーバー側でもファイアウォールを有効にしておきます。

# systemctl start firewalld

設定されている通信の確認

# firewall-cmd --list-all

public (default, active)
 interfaces: eth0
 sources:
 services: dhcpv6-client ssh
 ports:
 masquerade: no
 forward-ports:
 icmp-blocks:
 rich rules:

ntpの追加

正確な時間であればログは役に立ちますが、不正確だとあとで見返した時に困ります。
ntpの追加・ntpdateで時刻の調整を行います。

# yum install ntp ntpdate

/etc/ntp.confを開くと多くの場合このようになっています。

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

この中から一つを引き出し時刻を調整します。

# ntpdate 0.centos.pool.ntp.org
30 Jun 13:14:29 ntpdate[17544]: step time server 206.108.0.131 offset 2.493853 sec

ntpサービスを開始・自動起動を設定

# systemctl start ntpd
# systemctl enable ntpd

logwatchの設定

ログイン状況・ソフトウェアのアップデート履歴・ディスク状況などをまとめてメール送信する
logwatchという監視ツールがあるのでこれを入れておきます。
毎日メールを送って来るので少し鬱陶しいかもしれませんが、メールで送っておけば
後で確認したいときに検索性が良いので使っています。

メール送信のテスト

# logwatch --mailto example@example.com

テスト先のメールアドレスに結果が到着していれば、設定は半分完了です。
次は、このメールアドレスを既定の送信先にします。

/etc/logwatch/conf/logwatch.confに送信先メールアドレスの追加

# echo "MailTo = example@example.com" >> /etc/logwatch/conf/logwatch.conf

ネットワークの調整・最大ファイルオープン数の変更

空きポートがなくなると通信が滞るので、送受信に使えるポートの数を増加させます。
ポートもファイルオープン換算なので、最大ファイルオープン数の設定も変更します。
ログにToo many open filesが出る場合はこの設定値が低いことが多いです。

/etc/sysctl.confに送受信に使えるポート数の緩和設定を追加

# echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
# echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
# echo "net.ipv4.ip_local_port_range = 1024 65536" >> /etc/sysctl.conf

# /etc/sysconfig/initに最大ファイルオープン数の緩和設定を追加

# ulimit -n 65536
# echo "ulimit -n 65536" >> /etc/sysconfig/init