Linux VPSの基本的なセキュリティ設定

HOST1FREEの無料VPSは、アカウント開設時にOSが起動した状態になっています。素の状態で放っておくと危険なので、早めにセキュリティ設定をしておきましょう。

ここでは、私がCentOS 6で設定したセキュリティ関連の設定を紹介します。

CentOS 6のセキュリティ設定

sendmailの無効化

sendmailを使用しない場合、無効化しておきます。

# chkconfig --list sendmail
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off
# chkconfig sendmail off
# chkconfig --list sendmail
sendmail        0:off   1:off   2:off   3:off   4:off   5:off   6:off
# service sendmail stop

パッケージのアップデート

アップデート前に、サーバが正常に再起動することを確認しておきます。

# shutdown -r now

パッケージをアップデートし、再度正常に再起動することを確認します。

# yum check-update
# yum update -y
# shutdown -r now

ユーザ作成

通常作業用のユーザを作成し、パスワードを設定します。

# useradd <ユーザ名>
# passwd <ユーザ名>

SSHの公開鍵認証設定

SSHのポート番号の変更と公開鍵認証の設定を行います。パスワード認証は無効化しておきます。(シリアルコンソールが使用できない環境では、SSHの設定は慎重に行いましょう。)

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# vim /etc/ssh/sshd_config
    #PasswordAuthentication yes
    ~中略~
    Port <ポート番号>
    PermitRootLogin yes
    AllowUsers root <ユーザ名>
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile %h/.ssh/authorized_keys
    PasswordAuthentication no

SSHクライアントにPuTTYを使用する場合、認証用の公開鍵・秘密鍵の生成方法は「さくらのVPS を使いはじめる| アカベコマイリ」のページが参考になります。

おおまかな手順は以下のとおりです。

  • puttygen.exe でroot用と通常ユーザ用の秘密鍵(.ppk)/公開鍵(.pub)を作成
    ※なお、公開鍵は保存ボタンを使用せず、表示内容を一行でコピペする
  • rootと通常ユーザに ~/.ssh ディレクトリを作成し、パーミッションを700に設定
  • rootと通常ユーザに各公開鍵を ~/.ssh/authorized_keys の名前でアップロードし、パーミッションを600に設定

SSHのサービスを再起動後、PuTTYからポート番号および「接続」→「SSH」→「認証」で秘密鍵を指定し、正しくログインできることを確認します。

# service sshd restart

ファイアウォールの設定

使用するポート以外は接続を受け付けないよう、iptablesの設定を行います。

# vim /etc/sysconfig/iptables
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :RH-Firewall-1-INPUT - [0:0]
    -A INPUT -j RH-Firewall-1-INPUT
    -A FORWARD -j RH-Firewall-1-INPUT
    -A RH-Firewall-1-INPUT -i lo -j ACCEPT
    -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
    -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
    -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
    -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport <sshポート番号> -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    COMMIT
# service iptables restart
# service iptables status

sudoの設定

通常作業用のユーザで、一時的にroot権限でコマンドを実行できるように、sudoの設定を行います。

#visudo
    <ユーザ名>    ALL=(ALL) ALL

おわりに

セキュリティに関する設定は以上です。なお、ここでの内容は完全な安全性を保証するものではないので、参考程度としてください。

おかしな点などあれば指摘してもらえるとありがたいです。

次回はzsh、tmux、vimなどの環境設定について紹介します。

VPSセットアップ関連記事

blog comments powered by Disqus