Ubuntu 12.04 LTSサーバーを安全にする

タグ: セキュリティー   Ubuntu  

この記事は、The Fan Clubというサイトの"How to secure an Ubuntu 12.04 LTS server - Part 1 The Basics"という記事を著者のChristiaan Diedericksさんの許可を得て、翻訳したものです。

私はUbuntuデスクトップのユーザではありませんが、VagrantやDigital Oceanのドロップレットで、Ubuntu サーバー版を使用することがあり、この記事を見つけました。まとまっているようなので、少しずつ翻訳しながら、紹介していきます。

この記事にはPart2があります。そこでは、ここで紹介している内容をデスクトップのGUIから設定できるツールが紹介されています。しかし、デスクトップ環境のインストールが必要なため、利用は限られるでしょう。Zenityではなくdialogを使えば、より使用の幅が広がるでしょう。ちょっと残念です。(許可をもらうついでに、著者に進言してみたら、dialogバージョンも作りかけているが、忙しいから中断しているのだそうです。)


このガイドは様々なコミュニティーフォーラムの投稿記事やWebサイトの情報を元に作成されました。皆さん、ありがとうございました。現時点では、個人的な経験を元にしていますので、もっと考慮を重ねる必要があり、コメントや更に良い情報を歓迎いたします。

このガイドは、以下の内容を一段ずつ学ぶことを目標としています。

以降をインストール・設定することにより、Ubuntu 12.04 LSTサーバーのセキュリティーを強化する。

  1. ファイヤーウォールのインストールと設定:ufw
  2. 安全な共有メモリー:fstab
  3. SSH:ルートログインの禁止とポート変更
  4. adminグループにアクセスを限定することによる、suの保護
  5. sysctl設定によるネットワークの強化
  6. DNS再帰検索禁止とバージョン情報の削除:Bind9 DNS再帰検索禁止とバージョン情報の削除
  7. IPなりすましの防止
  8. PHPセキュリティーの強化
  9. Apache情報漏れの制限
  10. Apacheアプリケーションファイヤーウォールのインストールと設定:ModSecurity
  11. ModEvasiveによるDDOS攻撃の防止
  12. ログのスキャンと疑わしいホストのban:DenyHostsとFail2Ban
  13. 侵入探知:PSAD
  14. Rootkitsの確認:RKHunterとCHKRootKit
  15. オープンポートのスキャン:Nmap
  16. システムログファイルの解析:LogWatch
  17. SELinux:Apparmor
  18. システムセキュリティーの監視:Tiger

ここで説明する全ステップをインストールし設定するGUIを探しているのでしたら、How to secure an Ubuntu 12.04 LTS server - Part 2 The GUI Installer scriptをご覧ください。

動作要件:

  • 標準的なLAMPがインストールされたUbuntu 12.04 LTS サーバー

1.ファイヤーウォール:ufw

最初に行うべきは、ファイヤーウォールのインストールです。

UFW - Uncomplicated Firewall(難しくないファイヤーウォール)はよく出来ている基本的なファイヤーウォールで、gufwやShorewall、fwbuilder、Firestarterなどのツールにより、簡単に設定できます。

Firestarter GUIで設定するか、もしくはUbuntサーバーガイドのUFWマニュアルか、Ubuntu UFWコミュニティーのドキュメントを参照してください。

UFWをインストールするには、端末を開き、次のコマンドを実行してください。

sudo apt-get install ufw

SSHとHttpサービスを許可する

sudo ufw allow ssh
sudo ufw allow http

ファイヤーウォールを有効にする

sudo ufw enable

ファイヤーウォールの設定状態を確認する

sudo ufw status verbose

2.安全な共有メモリ

共有メモリは、実行中のサービスに対する攻撃に使用できます。/etc/fstabを強化しましょう。

端末ウィンドウを開き、以下のコマンドを実行してください。

sudo vi /etc/fstab

以下の行を追加し、保存します。この設定を有効にするためには、リブートする必要があります。

注意:これはUbuntu 12.04でのみ有効です。より最新のバージョンのUtuntuサーバーでは/dev/shmを/run/shmに変更してください。

保存したら、リブートしてください。

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

3.SSH強化 - ルートログインの禁止とポート変更

SSHを安全にする一番簡単な方法は、ルートログインを禁止し、SSHポートを標準的な22番ポートから、何か他のポートへ変更するです。

ルートログインを禁止する前に、新しいSSHユーザを作成し、そのユーザーがadminグループへ所属していることを確認してください。(adminグループに関連している、下の4番目のステップを見てください。)

SSHポートを変更したら、あなたの選んだ新しいポートをファイヤーポートで開き、22ポートを閉じなくてはなりません。

端末ウィンドウで、以下を実行してください。

sudo vi /etc/ssh/sshd_config

変更、もしくは以下を追加してください。

Port <選んだポート番号>
Protocol 2
PermitRootLogin no
DebianBanner no

SSHサーバーを再起動し、端末ウィンドウを開き、実行してください。

sudo /etc/init.d/ssh restart

adminグループだけに限定することで、suを保護する

adminのユーザーだけにsuの使用を制限するためには、adminグループを作成し、ユーザを追加し、suの使用をadminグループだけに限定します。

adminグループをシステムに追加し、皆さん自身のadminユーザ名をグループに追加するために以下の<あなたの管理者ユーザ名>を置き換えてください。

端末ウィンドウを開き、入力してください。

sudo groupadd admin
sudo usermod -a -G admin <あなたの管理者ユーザ名>
sudo dpkg-statoverride --update --add root admin 4750 /bin/su

5.sysctl設定によるネットワークの強化

/etc/sysctl.confファイルは、全sysctl設定を保存しています。

やってきたパケットのソースルーティングと、偽装されたIPをログするため、以下を端末ウィンドウで実行します。

sudo vi /etc/sysctl.conf

/etc/sysctl.confファイルを編集し、以下の行のコメントを外すか、追加してください。

# IP偽装保護
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# ICMPブロードキャストリクエストを無視
net.ipv4.icmp_echo_ignore_broadcasts = 1

# ソースパケットルーティング禁止
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# リダイレクト送信を無視
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# SYN攻撃をブロック
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Martiansのログ
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# ICMPリダイレクトを無視
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# 直接のpingを無視
net.ipv4.icmp_echo_ignore_all = 1

変更をsysyctlへリロードするには:

sudo sysctl -p

6.DNS再帰検索禁止とバージョン情報の削除:Bind9

端末を開き、以下を実行してください:

sudo vi /etc/bind/named.conf.options

以下をオプションセクションに追加してください。

recursion no;
version "Not Disclosed";

BIND DNSサーバーを再起動します。端末を開き、以下を実行します。

sudo /etc/init.d/bind9 restart

7.IPなりすましの防止

端末を開き、以下を実行します。

sudo vi /etc/host.conf

以下の行を追加もしくは編集します。

order bind,hosts
nospoof on

8.PHPセキュリティーの強化

php.iniファイルを編集しましょう。

sudo vi /etc/php5/apache2/php.ini

以下の行を編集もしくは追加し、保存してください。

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
display_errors = Off
track_errors = Off
html_errors = Off
magic_quotes_gpc = Off

Apacheサーバーを再起動します。端末を開き、以下を実行してください。

sudo /etc/init.d/apache2 restart

9.Apache情報漏れの制限

Apache2設定セキュリティーファイルを編集します。

sudo vi /etc/apache2/conf.d/security

以下の行を編集、もしくは追加し、保存します。

ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header unset ETag
FileETag None

Apacheサーバーを再起動する。端末を開き、以下を実行します。

sudo /etc/init.d/apache2 restart

10. Apacheアプリケーションファイヤーウォールのインストールと設定:ModSecurity

11. ModEvasiveによるDDOS攻撃の防止

12. ログのスキャンと疑わしいホストのban:DenyHostsとFail2Ban

DenyHostはPythonプログラムで、/etc/hosts.denyに追加することで、SSH攻撃を自動的に防ぎます。DenyHostsは、Linux管理者に攻撃ホストと、攻撃ユーザー、疑わしいログインも知らせてくれます。

端末を開き、以下を実行してください。

sudo apt-get install denyhosts

インストール後、/etc/denyhosts.conf設定ファイルを開き、メールと他の設定を必要に応じ編集してください。

管理者メール設定を編集するには、端末ウィンドウを開き、以下のコマンドを実行します。

sudo vi /etc/denyhosts.conf

以下の値をサーバーに合わせて変更してください。

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES

Fail2banはDenyHostsよりも進んでおり、SSH、Apache、Courier、FTPなど他のサービスのログ監視を拡張します。

Fail2banはログファイルをスキャンし、悪意のある兆候を示すIPをbanします。パスワード不一致が多すぎたり、悪用できそうなところを探したりした場合です。

通常、Fail2Banは指定した時間の間、IPアドレスを拒絶するために、ファイヤーウォールのルールを更新しますが、どんな属性の他のアクションも設定できます。

Fail2Banには最初から、数多くのサービス(apache、courier、ftp、sshなど)に対するフィルターが備わっています。

ターミナルを開き、以下を実行してください。

sudo apt-get install fail2ban

インストール後、/etc/fail2ban/jail.local設定ファイルを編集し、必要なフィルタールールを作成してください。

端末ウィンドウを開き、以下のコマンドで編集します。

sudo vi /etc/fail2ban/jail.conf

Fail2Banによる各モニタリングサービスを有効にするには、enabled = falseenabled=trueに変更してください。

例えば、SSHモニタリングを有効にし、牢屋に閉じ込めるには、以下の行を見つけ、falseをtrueに変更します。それだけです。

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

ステップ3でデフォルトでないSSHポートを設定している場合、Fail2Banのポート設定も変更する必要があります。デフォルトの22ポートを、あなたの新しい番号へ変更します。例えば、1234ポートでしたら、port = 1234です。

[ssh]

enabled  = true
port     = <あなたの設定したポート番号を指定してください>
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Banするホストが変更されるときに、Fail2Banからメールを受け取りたい場合は、以下の行のメールアドレスを変更します。

destemail = root@localhost

続いて、以下の行を:

action = %(action_)s

次のように変更します。

action = %(action_mwl)s

デフォルトでないモニターをFail2Banへ指定したければ、様々なサービスに対して、ルールフィルターを作成することも可能です。

sudo vi /etc/fail2ban/jail.local

Fail2Banをどう設定するかと、様々なフィルターの作成方法は、HowtoForgeこちらの例が、良いインストラクションになるでしょう。

Fail2Banの設定が済んだら、サービスをリスタートします。

sudo /etc/init.d/fail2ban restart

状態をチェックするには:

sudo fail2ban-client status

13.侵入探知:PSAD

Cipherdyne PSADは、Linuxマシン上で動作する3つの軽量システムデーモンで、ポートスキャンや、他の疑わしいトラフィックを見つけ出すため、iptablesログメッセージを解析します。

現在のバージョン2.1はUbuntu12.04でインストール中にエラーを起こしてしまいまが、見かけ上は動作しているように見えます。バージョン2.2では、これらの問題が解決されているのですが、Ubuntuのソフトウェアリポジトリーには、まだありません。CiperdyneのWebサイトからバージョン2.2のソースファイルを入手し、自分でコンパイルし、インストールすることをお勧めします。

インストラクションに従い、ソースファイルから最新バージョンをインストールする方法は、How to install PSAD Intrusion Detection on Ubuntu 12.04 LTS serverをご覧ください。

もしくは、Ubuntuソフトウェアリポジトリーから古いバージョンをインストールする場合は、端末を開き、以下を実行してください。

sudo apt-get install psad

インストール後、基本的な設定を行うには、How to install PSAD Intrusion Detection on Ubuntu 12.04 LTS serverのステップ2以降に従ってください。

14.Rootkitsの確認:RKHunterとCHKRootKit

RKHunterCHKRootkitは、基本的に同じ働きを行い、システムのルートキットを確認します。両方を一緒に使用しても、悪影響はありません。

端末を開き、以下を実行してください。

sudo apt-get install rkhunter chkrootkit

chkrootkitを実行するには、以下を実行します。

sudo chkrootkit

RKHunterを更新し、実行するには、端末から以下を実行します。

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

15.オープンポートのスキャン:Nmap

Nmap("Network Mapper")は、ネットワーク発見とセキュリティ追加のための、オープンソースで無料で使用できるユーティリティーです。

端末を開き、以下を実行してください。

sudo apt-get install nmap

ポートが開いているシステムをスキャンするためには:

nmap -v -sT localhost

SYN接続スキャンは:

sudo nmap -v -sS localhost

16. システムログファイルの解析:LogWatch

Logwatchはカスタマイズ可能なログ分析システムです。Logwatchはシステムのログ全体をパースし、指定した領域の分析レポートを生成します。Logwatchはほとんどのシステムで初めから動きますので、使用も簡単です。

端末を開き、以下を実行してください。

sudo apt-get install logwatch libdate-manip-perl

Logwatchの出力を読むには、lessを使用します。

sudo logwatch | less

過去7日分のLogwatchレポートをメールで受け取るには、以下のmail@domain.comを受け取りたいメールアドレスに置き換えてください。

sudo logwatch --mailto mail@domain.com --output mail --format html --range 'between -7 days and today'

17.SELinux:Apparmor

National Security Agency(NSA)はLinuxへSecurity-Enhanced Linux(SELinux)を導入することにより、次のレベルへと引き上げました。SELinuxは既存のGNU/Linuxにより使用され、カーネルを拡張し、ユーザー空間を防弾にしてくれます。

より詳細は、Ubuntu Server Guide - Apparmorをご覧ください。

Ubuntu 7.04からデフォルトでインストールされています。

端末を開き、以下を入力してください。

sudo apt-get install apparmor apparmor-profiles

実行されているか確認するには:

sudo apparmor_status

18.システムセキュリティーの監視:Tiger

Tigerは、セキュリティーの監視とシステム侵入検出の両方に使用できるツールです。

端末を開き、以下を実行して下さい。

sudo apt-get install tiger

Tigerを実行するには:

sudo tiger

Tigerの出力は/var/log/tigerにあり、セキュリティーレポートを見るには、端末で以降を実行してください。

sudo less /var/log/tiger/security.report.*