2012/03/18

CentOS で行なっておきたいセキュリティ設定


はじめに

Linux のセキュリティ設定ってなかなかまとまったものがないので、いろんなサイトを参考にしながら設定をまとめてみました。想定はWeb サーバーで、使用している Linux は CentOS 6.2 です。

設定内容は以下のようになります。

  • 全パッケージのアップデート
  • リモートからの root ログインを無効にする 
  • 公開鍵暗号方式を使用した SSH ログイン設定 
  • iptables 設定 
  • SSH ポート番号の変更 
  • 不要なサービスを停止 
  • ログ監視設定 
  • ファイル改ざん検知ツール設定 
  • ウィルス対策ソフト設定 
  • Apache の設定

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

最初に以下のコマンドを実行して、全パッケージを最新の状態にする。

# yum –y update

後は脆弱性が発見された時、または定期的にパッケージのアップデートを行う。

リモートからの root ログインを無効にする

リモートからメンテナンスできるユーザーを追加して、wheel グループに追加。

# useradd hogehoge
# passwd hoghoge
# usermod –G wheel hogehoge

wheel グループのメンバーのみ root になれるように設定。

# vim /etc/pam.d/su

以下の行のコメントを外して保存。

auth  required pam_wheel.so use_uid

su コマンドで、wheel グループのみ root になれるように設定。

# vim /etc/login.defs

以下の設定を追加して保存。

SU_WHEEL_ONLY yes

wheel グループのユーザーのみ sudo コマンドを実行できるように設定。visudo は /etc/sudoers を安全に編集するためのコマンドで、vi と同じように使用できる。

# visudo

以下の行のコメントを外して保存。

%wheel ALL=(ALL) ALL

sudo 実行時にパスワード入力を求められないようにするには、以下の行のコメントを外して保存。設定時には本当にその運用でよいか要検討。

%wheel ALL=(ALL) NOPASSWD: ALL

root での ssh ログインを禁止するように設定。

# vim /etc/ssh/sshd_config

PermitRootLogin を以下のように設定して保存。

PermitRootLogin no

sshd を再起動して設定を有効にする。

# /etc/init.d/sshd restart

公開鍵暗号方式を使用した SSH ログイン設定

内容が長いので別エントリーにしました。

iptables 設定

iptables によってソフトウェア的に Firewall を実現できる。不要なポートは開けないことが重要。下記コマンドで iptables の設定を確認。

# /sbin/iptables -L --line-number

ssh 以外のサービスは外部からの通信が止められていることを確認。

Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

ここでは、HTTP と HTTPS の通信を許可。

# /sbin/iptables -I INPUT 5 -p tcp --dport http -j ACCEPT #HTTP
# /sbin/iptables -I INPUT 5 -p tcp --dport https -j ACCEPT #HTTPS

設定内容を確認。

# /sbin/iptables -L --line-number

Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere tcp dpt:https
6 ACCEPT tcp -- anywhere anywhere tcp dpt:http
7 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

設定を保存。

# /sbin/service iptables save

設定が保存できたか確認。

# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Sun Mar 18 19:09:59 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [51:5844]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sun Mar 18 19:09:59 2012

OK。

SSH ポート番号の変更

企業によっては SSH のポート番号を 22 しか許さない場合もあるだろうし、Firewall で SSH へのアクセスが制限されることもあるだろうから、これはオプション。ただ、ポート番号を変更すれば攻撃を受ける頻度が減る。

設定の前に、必ず iptables に変更後のポート番号でアクセスできるように設定しておくこと。そうしないとログインできなくなってしまう。

SSH の設定ファイルを編集。

# vim /etc/ssh/sshd_config

SSH のポート番号はデフォルトで 22 だが、WELL KNOWN PORT NUMBERS(0~1023番)以外のポート番号であれば何でもよい。ここでは 10022 としてみる。

sshd_config の以下の行がコメントアウトされているので、コメントを外しポート番号を 10022 に変更して保存。

Port 10022

SSH のサービスを再起動。

# /etc/init.d/sshd restart

不要なサービスを停止

IPv6 を無効にする

IPv6 は IPv4 の DMZ では不要なことと、不具合が起きることがあるようなので無効にする。ネットワーク環境によっては要検討。

# vim /etc/modprobe.d/disable-ipv6.conf

以下の行を追加して保存する。

options ipv6 disable=1

OS を再起動して設定を反映する。

不要なサービスを停止

IPv6 を無効にしているため不要なサービスを停止。最小構成でインストールされているためか、停止するサービスが少なかった(CentOS で不要なサービスについてはこちらを参照)。

# /etc/init.d/ip6tables stop
# chkconfig ip6tables off

また、以下のコマンドを実行して起動時に実行するサービスを確認(Run Level が3のとき)。

# chkconfig --list | grep "3:on"

実行結果。

auditd  0:off 1:off 2:on 3:on 4:on 5:on 6:off
crond  0:off 1:off 2:on 3:on 4:on 5:on 6:off
httpd  0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd  0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off

Web サーバーでは、通常メールサービスは利用しないので postfix は無効にする。以下のようにサービスを無効にする。他に不要なサービスあったら無効にする。

# /etc/init.d/postfix stop
# chkconfig postfix off

ログ監視設定

ログ監視ツールとして logwatch をインストールすると、1日一回ログの内容を整形して root にメールを送ってくれる。安全な運用にはログ監視は重要。

logwatch のインストールは下記コマンドを実行。

# yum –y install logwatch

下記コマンドを実行して正しく動作しているか確認。

# /usr/sbin/logwatch --print

ファイル改ざん検知ツール設定

Linux のファイル改ざん検知ツールとしては Tripwire が有名だが、現在は商用プロダクトとなったため、ここでは AIDE というオープンソースのファイル改ざんツールを導入。

AIDE のインストール。

# yum –y install aide

AIDE の初期データベースの作成。

# aide -i

DBができていることを確認。

# ll -h /var/lib/aide/
合計 1.8M
-rw-------. 1 root root 1.8M 3月 18 19:35 2012 aide.db.new.gz

DB の名前変更。

# cd /var/lib/aide
# cp aide.db.new.gz aide.db.gz

AIDE のチェック実行。

# aide -C

デフォルトだと、AIDE はかなり広範囲にチェックを行うので、結果が煩わしい場合は aide.conf の設定を見直す。

AIDE はこのままではスケジュールで実行されないため、以下のサイトのスクリプトを利用してスケジュール実行できるようにする。

上記設定が完了すると、スケジュール実行された結果は以下のログに出力されるようになる。

  • /var/log/aide/aide.log – AIDE ログ
  • /var/log/aide/error.log – エラーログ

ウィルス対策ソフト設定

Web サーバーにウィルス対策ソフトを導入するべきかは意見が分かれるところだが、保険的な対策も含めて導入することがよいと思われる。ここでは、オープンソースのウィルス対策ソフトである Clam AntiVirus を導入する。

EPEL リポジトリ導入

Clam AntiVirus を yum でインストールするために、以下のサイトを参考に EPEL リポジトリを導入する。

EPEL リポジトリを利用する場合は、以下のようにコマンドを実行する。

yum --enablerepo=epel install パッケージ名

Clam AntiVirus 導入

Clam AntiVirus をインストール。

# yum –y --enablerepo=epel install clamd

あとは、以下の記事を参考に設定を行う。

これで毎日定期的にウィルススキャンが行われ、ウィルスを検知した場合に root にメールが送られてくるようになる。

Apache の設定

Apache でもいくつか設定を行う。

# vim /etc/httpd/conf/httpd.conf

以下の設定を行う。

# レスポンスヘッダにVersion等を表示しない
ServerTokens ProductOnly

# エラーページにApacheの情報を付けない
ServerSignature Off

# Trace メソッドを無効にする
TraceEnable Off

ディレクトリリスティングを禁止する。Options の Indexes を削除するのだが、複数記述されているので注意。デフォルトでは以下の2箇所に Indexes の記述があった。

<Directory "/var/www/icons">
Options MultiViews FollowSymLinks
</Directory>

<Directory "/var/www/html">
Options FollowSymLinks
</Directory>

クリックジャッキングの対策を追加する。フレーム内にページを表示させない場合は DENY を、同じサイトであればフレーム内の表示を許す場合は SAMEORIGIN を指定する。詳しくは Mozilla の記事を参照。

Header always append X-Frame-Options DENY

設定を保存後、Apache を再起動する。

# /etc/init.d/httpd restart

更新履歴

・2013/09/09
全パッケージのアップデートを最初に持って行きました。

・2012/04/05
クリックジャッキングの対策を追加。

・2012/03/22
Apache の設定追加、不要なサービスの停止方法追加、sudo コマンドに追記。

・2012/03/20
色々な方のご意見をいただき、内容をアップデートしました。貴重なご意見ありがとうございました。

参考サイト


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

はてなブックマークからきました

とても参考になりました

ありがとうございます

なるほど

参考になりました

他の記事も拝見させていただきます

ありがとうございます

全パッケージのアップデートをやるのは一番最初ですよ。

>>iwaimさん

ご指摘ありがとうございました。
エントリーに反映させました。

ありがとうございます。
大変参考になりました。

はじめまして。
Linuxに興味があり、windowsの代わりに使えないか考えているものです。
用途はwebサイトを閲覧したりメールやオフィス、windowsソフトを使うなどです。
openSUSEをWindowsのVMwareにインストールしてみようと思っているのですが、インストールの後にセキュリティをどうしたらいいのかまったくわかりません。
設定をどうしたらいいか、教えていただけないでしょうか。
あるいは、セキュリティの設定について、おばちゃんや老人でもわかるように解説されているサイトを教えていただけませんか?

>> romさん

Linuxをデスクトップ環境で使いたいということですね。
でしたら、アンチウィルスソフトをインストールすることと、
ソフトウェアを最新の状況にすること。Firewall の設定をすること
ぐらいかと思います。なぜOpenSUSEなのかは分かりませんが、
通常のLinuxディストリビューションと変わらないと思います。

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから