最低限やっておくべきセキュリティ設計(OS編)


はじめに

サーバを立てる際に、セキュリティの観点から最低限やっておくべき設定みたいなものがあまりまとめられていないなと思い、エントリーしようと思いました。
詳細な設定方法については記載しません。あくまでも設計時に考慮すべき項目として列挙していきます。詳細な設定方法は別途調べてください。
今回まとめたもの以外にも、これ設定するべきだ、というものがありましたら、どしどしコメントください。追加していければなと思います。
また、今回はOS編ですが、ネットワーク編やWebサーバ(Apache,Nginx)編などもエントリーしていこうと思います。

環境

いったんCentOS6/7のみ

前提

Webサーバ以外のサーバ(AP,DB,batchなど)のセキュリティ設計を行う場合を想定しています。Webサーバなど外部からのアクセスを直接受けるサーバについては、別途Webサーバ編で書きます。

1. パッケージアップデート

サーバを立ててまずはじめに実施しておきたいのは、全パッケージのアップデートです。
古いバージョンのパッケージなどがあって、脆弱性を突かれないために、はじめにアップデートしておきます。

 # yum -y update

2. iptables(firewalld)

CentOS6ではiptables、CentOS7ではfirewalldになっていますが、不要なポートが開いてしまっていないように設定します。また、ssh通信の制限などを行います。

[CentOS6の場合]

  # 設定ファイル編集
  vi /etc/sysconfig/iptables
  # iptablesサービスを再起動
  service iptables restart
  # 自動起動設定に追加
  chkconfig iptables on

正しく設定されているか、Nmapで確認する。

  nmap -p 1-10022 hostname

[CentOS7の場合]

  # 設定ファイル編集
  vi /etc/firewalld/services/*.xml
  # 設定再読み込み
  firewall-cmd --reload
  # firewalldサービスを再起動
  systemctl stop firewalld
  systemctl start firewalld

3. rootユーザのsshログイン禁止

rootユーザとは別にユーザを別途作成し、rootユーザはsshログインできないように設定します。rootユーザでsshログインできてしまうと、不正にログインされたときに何でもできてしまうので、禁止します。

  # 設定ファイル編集
  vi /etc/ssh/sshd_config
  # sshdサービスの再起動
  service sshd restart

4. ログインユーザ認証設定(公開鍵認証によるSSHログイン)

パスワード認証よりもよりセキュアな公開鍵認証にすることでセキュリティレベルを高めます。

5. SELinux

SELinuxとはアクセス制御する機能です。設定するとセキュリティレベルは上がりますが、アクセス制御の設計が複雑になるため、利用するかしないかは各プロジェクトの要件によるのかなと思います。

  # 設定ファイル編集
  vi /etc/sysconfig/selinux
  # 設定反映
  サーバ再起動
  # 設定反映の確認
  getenforce

6. SSHポート番号変更

[CentOS6の場合]

  # 設定ファイル編集
  vi /etc/ssh/sshd_config
  # sshdサービス再起動
  service sshd restart

[CentOS7の場合]

  # sshd設定ファイル編集
  vi /etc/ssh/sshd_config
  # firewalldの設定からssh削除
  firewall-cmd --permanent --remove-service=ssh
  # firewalldのデフォルト設定ファイルコピー
  cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-ポート番号.xml
  # firewalldの設定ファイル編集 
  vi /etc/firewalld/services/ssh-ポート番号.xml
  # firewalld設定追加
  firewall-cmd --permanent --add-service=ssh-ポート番号
  # firewalld設定反映
  firewall-cmd --reload

7. 不要なサービス停止

不要なサービスは停止しておき、脆弱性を突かれるリスクをなくしておきます。

[CentOS6の場合]

  # サービス一覧表示
  chkconfig --list
  # 不要なサービスを停止
  service 'サービス名' stop
  chkconfig 'サービス名' off

[CentOS7の場合]

  # サービス一覧表示
  stemctl list-unit-files -t service
  # 不要なサービスを停止
  systemctl stop 'サービス名'
  systemctl disable 'サービス名'

最後に

サーバ立てる際の最低限やっておくべきセキュリティの設定は以上となります。
Ansibleなど構成管理ツール管理、運用しているところとかは、このあたりをplyabookのテンプレートなどに設定しておくと便利ですね。

参考

Linuxサーバ構築標準教科書(Ver2.0.1)
http://www.lpi.or.jp/linuxtext/server.shtml
https://www.websec-room.com/2014/02/09/1822
http://fnya.cocolog-nifty.com/blog/2012/03/centos-6aa8.html