序章にも掲載しましたが、インターネットに接続するということは、インターネット上に潜んでいるウィルスや悪意ある者の攻撃などにさらされることに変わりはないので、リビングサーバーのセキュリティ設定をしておきます。
セキュリティ対策の基本は、次のような感じになると想います。
セキュリティ対策の基本
- 不要なサービスをインストール、実行しない
- 不要なポート開放、不要なネットワークアクセスを許可しない
- 最新バージョンのソフトウェアにアップデートする
- システムログを収集して不正アクセスがないことを確認する
たくさんのサービスを実行することで、見知らぬサービスが実行されていることに気付けないようになることを避けること。同様にたくさんのポート開放、ネットワークアクセス許可するということは、その数分だけインターネットから誰かがアクセス出来てしまうということなんです。
利用するソフトウェアも最新のものを使用して、セキュリティに関するアップデートを必ず実施しましょう。
そして、悪意ある第3者がサイトに不正アクセスをしていないか、定期的に確認をしましょう。
それでは、セキュリティ設定です。以前、自宅サーバー公開に向けて セキュリティ設定で連載した記事を基に設定をしましたが、リビングサーバーは公開しませんので設定がちょっと違います。また、自宅サーバーとリビングサーバーのOSが違うので、設定が異なるものもあります。今回は、1回で全部を掲載したいので、1部分は以前の連載記事を参照とさせて頂きます。
セキュリティ設定
- 特権ユーザーに関する設定
- sshに関する設定
- サービスに関する設定
- ポートに関する設定
- ファイル改竄の検知
- アンチウィルス
- rootkit検出
1.特権ユーザーに関する設定
1.1.特権ユーザーになれるユーザーを限定する
wheelというグループに属するユーザーのみ、特権ユーザーになれるように設定します。
usermod -G wheel testuser
vi /etc/pam.d/su
#auth required pam_wheel.so use_uid ↓ auth required pam_wheel.so use_uid
1.2.passpromptを変更する
sudoコマンドで、コマンドを実施する際にパスワード入力を促すプロンプトが表示されますが、偽物のプロンプトを表示しパスワードを盗んだりする攻撃も存在しているので、オリジナルのプロンプトに変更してしまうという設定です。
Defaults passprompt = “%u@%h Password: “
1.3.sudoパスワードキャッシュタイムアウトを変更する
sudoコマンド実行後、一定の時間内はパスワードを再入力することなく続けて特権ユーザー権限のコマンドが実行できてしまいます。この時間を変更(短く)してしまうという設定です。ディストリビューションによって異なるかも知れませんが、デフォルトで5分…結構長い時間が設定されていますので短い時間に変更しましょう。
短い時間に設定すると、メンテナンス時に何度もパスワード入力をしなければならなくなりますが、それだけ攻撃を仕掛ける人にとっても面倒なことになるということです。
Defaults timestamp_timeout =
300→30など
2.sshに関する設定
念のため、設定ファイルのバックアップを実施してから設定作業を実施しましょう。
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2.1.sshのポート番号を変更する
sshの標準ポートは、あまりにも一般的過ぎるため攻撃を受けることがありますので、標準ポート以外に変更してしまうという設定です。
vi /etc/ssh/sshd_config
#What ports, IPs and protocols we listen for Port22→9922など
2.2.ssh経由での特権ユーザーへのloginを不可にする
特権ユーザーは、特権ユーザーコマンドを実行できるユーザーなので、ssh経由でアクセスできないように変更してしまう設定です。
rootユーザは、どのサーバにも存在するアカウントで、総当り攻撃の危険性もあるので変更しましょう。
vi /etc/ssh/sshd_config
PermitRootLoginyes→no
2.3.パスワード認証を無効にする
パスワード認証が有効な場合、辞書攻撃の危険性もあるので認証を無効に変更しましょう。変更する際は、公開鍵認証方式などの手段で認証できたことを確認の上で無効に変更しましょう。
vi /etc/ssh/sshd_config
PasswordAuthenticationyes→no ChallengeResponseAuthenticationyes→no理由が有ってパスワード認証を有効にしておく場合には、空パスワードを許可しない設定にしましょう。
vi /etc/ssh/sshd_config
PermitEmptyPasswordsyes→no
2.4.ssh可能ユーザーを限定する
sshが可能なユーザーを限定することで、sshできるユーザーを探すという手間が必要になり、攻撃を仕掛ける人にとって面倒なことを増やせば敬遠されるようになったり、セキュリティを突破されるまでの時間稼ぎになります。
vi /etc/ssh/sshd_config
AllowUsers OK_user DenyUser NG_user
2.5.sshdのプロトコルを2に設定する
古いプロトコルは、脆弱性が発見されているので、新しいプロトコルの2を使うように設定しましょう。
vi /etc/ssh/sshd_config
Protocol 2
2.6.sshdの認証時間、試行回数を制限する
sshのコネクションを張り認証するまでの時間と試行回数を制限しましょう。
vi /etc/ssh/sshd_config
LoginGraceTime 30 MaxAuthTimes 3
2.7.sshguard、fail2banを使用する
sshguardやfail2banというのは、sshへの総当り攻撃を検出し、一定期間アクセスを拒否したりすることができるものです。
念には念を入れるという意味でも、使用することを検討してみましょう。
3.サービスに関する設定
3.1.不要なサービスを止める
無駄な(動かさなくても良い、想定していない)サービスが動いていることで、管理者が管理すべきものが増えるばかりでなく、予期しない事象がおきたりすることもあるので、不要なサービスを止めるという設定です。
service サービス名 status
サービス名 (pid XXXX)を実行中…
service サービス名 stop
サービス名 を停止中: [ OK ]
chkconfig サービス名 off
4.ポートに関する設定
4.1.不要なポートへのアクセス制御
不要なポートを閉じてしまうことで、侵入経路を減らすことができるという設定です。リビングサーバーは、クライアントPCとしても使用したりするので、Ubuntuのデスクトップを使用していますので、ファイアウォールもGUIが利用できるgufwをインストールしました。設定はGUIで簡単に設定できます。
まずは、下記の項目を設定するだけです。これだけの設定で、パソコンに入ってくるパケットが排除されます。
プロファイル:自宅
Status:オン
Incoming:Deny
Outgoing:Allow
ルール表示では現在のルール設定の確認ができ、ルールの追加/削除を行う事ができます。レポート表示することで、現在のアクセス状況がモニタリング、許可したいサービスのパケットを基にルール作成ができます。また、ログ表示では、ログを見ることもできます。
リビングサーバーは、自宅内のネットワークからのアクセスしか許可しないように、必要なサービスの必要なパケットだけに絞って、さらに自宅内ネットワークアドレスのみを許可するようルールを作成しました。特に説明がなくても簡単に設定できますよ。
5.ファイル改竄の検知
ファイルが変更されたことを検知してくれるシステムをファイル改竄検知システム(Tripwire)といいます。検知されたファイルの変更が意図しないものである場合には、悪意あるユーザーにログインされファイルを書き換えられたとか、ウィルスに感染したとかということを知るためにインストールすることをお勧めします。
インストール、設定については、サイト構築 〜自宅サーバー公開に向けて セキュリティ設定 その5〜を参考にして下さいね。
6.アンチウィルス
アンチウィルスソフトもGUIで設定出来るものにしたいので、Clam Tkをインストールしました。アンチウィルスは、最近ではWindowsOS、MAC OS、Linuxだけでなく、Androidでも利用している人がたくさんいるウィルス対策ソフトとか呼ばれているソフトウェアです。
ウイルススキャン、シグネチャアップデートの時間などをGUIで簡単に設定できます。特に説明が無くても簡単に設定できますよ。
7.rootkit検出
悪意ある第3者に侵入された時に、その痕跡を消し、再度アクセスできるようにしたりするクラッカーが使うツールにrootkitというものがあります。このrootkitを検出してくれるツールです。やっぱり、導入しておいた方が良いと想いますよ。
インストールや設定は、サイト構築 〜自宅サーバー公開に向けて セキュリティ設定 その7〜を参考にして下さいね。
コメント