Linuxサーバーのセキュリティ診断方法|コマンドとツールを使った実践ガイド
近年、Linuxサーバーを標的としたサイバー攻撃が増加しています。IPAの調査によると、脆弱性を放置したLinuxサーバーへの侵入事例は年々増加傾向にあります。自社のサーバーが安全かどうか、定期的に確認していますか。
近年、Linuxサーバーを標的としたサイバー攻撃が増加しています。IPAの調査によると、脆弱性を放置したLinuxサーバーへの侵入事例は年々増加傾向にあります。自社のサーバーが安全かどうか、定期的に確認していますか。本記事では、システム管理者が自ら実施できるLinuxサーバーのセキュリティ診断方法を、実際に使えるコマンドとツールを交えて解説します。初めての方でも実践できるよう、手順を丁寧に説明していきます。
Linuxサーバーで確認すべきセキュリティ診断項目
Linuxサーバーのセキュリティ診断では、確認すべき項目が多岐にわたります。闇雲にチェックするのではなく、攻撃者が狙いやすいポイントを優先的に確認することが重要です。ここでは、最低限押さえておくべき4つの診断項目を解説します。
ユーザー・権限管理の確認項目
ユーザーアカウントと権限管理は、セキュリティの最も基本的な要素です。不要なアカウントが残っていたり、過剰な権限が付与されていたりすると、攻撃者に悪用されるリスクが高まります。
確認すべき具体的な項目は以下の通りです。
- 退職者や利用されていないアカウントが残っていないか
- root権限での直接ログインが許可されていないか
- sudo権限を持つユーザーが適切に管理されているか
- パスワードポリシーが設定されているか(有効期限、複雑性要件)
- 共有アカウントが使用されていないか
実際の現場では、開発用に作成した一時アカウントがそのまま放置されているケースが多く見られます。定期的な棚卸しが欠かせません。
ネットワーク・ポート設定の確認項目
外部からの攻撃の多くは、開放されているネットワークポートを経由して行われます。不要なポートが開いていると、攻撃の入り口を増やすことになります。
確認すべき項目は以下です。
- 外部に公開されているポート番号と対応サービス
- 管理用ポート(SSH、RDPなど)へのアクセス制限
- 不要なサービスが稼働していないか
- ファイアウォールの設定状態
- 内部ネットワークからの接続制限
業界データによると、SSH(22番ポート)への総当たり攻撃は依然として多く、アクセス元IPアドレスの制限や鍵認証の導入が推奨されています。
ファイル・ディレクトリのアクセス権限
適切なファイルパーミッション設定は、万が一の侵入時の被害を最小化するために重要です。誤った権限設定は、機密情報の漏洩や改ざんにつながります。
特に注意すべきポイントは以下です。
- 設定ファイルが誰でも読み取れる状態になっていないか
- Webサーバーのドキュメントルートの権限設定
- ログファイルへのアクセス権限
- 実行ファイルに不要な書き込み権限が付与されていないか
- 機密性の高いディレクトリの所有者とグループ設定
元システム管理者の証言によれば、設定ファイル内に記載されたデータベースのパスワードが誰でも閲覧できる状態だった事例があり、これが情報漏洩の原因となったケースもあります。
ログ・監査設定の確認項目
セキュリティインシデント発生時の証跡となるログの適切な記録は、原因究明と再発防止に不可欠です。ログが適切に保存されていないと、攻撃の痕跡すら確認できません。
確認項目は以下の通りです。
- システムログ(/var/log/)が適切に記録されているか
- 認証ログ(ログイン試行、失敗記録)の保存
- 監査ツール(auditd)の有効化状態
- ログのローテーション設定と保存期間
- ログ改ざん防止の仕組み(リモート保存など)
調査結果では、中小企業の約40パーセントでログの保存期間が不十分であり、インシデント調査時に必要な情報が得られなかったケースが報告されています。
基本コマンドで行うセキュリティチェック手順
Linuxには標準で多くのセキュリティチェック用コマンドが用意されています。特別なツールをインストールしなくても、基本コマンドだけで重要な診断が可能です。ここでは実際の現場でよく使われるコマンドとその使い方を紹介します。
**【重要な注意事項】**本番環境でコマンドを実行する前に、必ずバックアップを取得し、業務時間外やメンテナンス時間帯に実施することを推奨します。
現在の稼働状況を確認する基本コマンド
まずはサーバー上で何が動いているかを把握することが診断の第一歩です。予期しないプロセスやサービスが稼働していないか確認します。
以下のコマンドを実行してください。
- psコマンド:現在実行中のプロセスを確認
- netstatコマンド:ネットワーク接続状態とポート使用状況を表示(旧式だが広く使われている)
- ssコマンド:netstatの後継コマンドで、より高速に情報取得
- topコマンド:リアルタイムでシステムリソースの使用状況を監視
実際の診断では、「ps aux」で全プロセスを表示し、不審なプロセス名がないか確認します。また「ss -tunlp」で開放されているポートとそのポートを使用しているプロセスを特定できます。
業界ベテランの証言によれば、マルウェア感染の初期段階では見慣れないプロセス名が稼働していることが多く、定期的なプロセス確認が早期発見につながるとのことです。
ユーザーとグループの権限を確認
誰がどのような権限を持っているかの確認は、内部不正対策としても重要です。以下のコマンドで権限状況を把握します。
- lastlogコマンド:各ユーザーの最終ログイン日時を表示
- idコマンド:特定ユーザーの所属グループとUID/GIDを確認
- /etc/sudoersファイルの確認:sudo権限を持つユーザーのリストを確認
- catコマンドで/etc/passwdを確認:登録されている全ユーザーを表示
「lastlog」で長期間ログインしていないアカウントを特定し、「/etc/passwd」と照合することで不要アカウントを洗い出せます。また「visudo」コマンドを使って/etc/sudoersを安全に編集することで、sudo権限の適正化が可能です。
実際の支援事例では、開発担当者が退職後もsudo権限を持つアカウントが残っており、それが不正アクセスの原因となったケースがありました。定期的な権限見直しが重要です。
不要なサービスと開放ポートの確認
起動しているサービスの中には、実際には使用していないものが含まれている可能性があります。不要なサービスは停止することで攻撃対象を減らせます。
確認に使用するコマンドは以下です。
- systemctlコマンド:systemd管理下のサービス一覧と状態確認
- lsofコマンド:特定ポートを使用しているプロセスを特定
- chkconfigコマンド:旧式システムでのサービス自動起動設定確認
「systemctl list-unit-files --type=service」で全サービスの状態を一覧表示できます。enabledとなっているサービスの中から、業務に不要なものを特定し、「systemctl disable サービス名」で自動起動を無効化します。
また「lsof -i:ポート番号」で特定ポートを使用しているプロセスを特定できるため、想定外のポート使用を発見した際に原因調査に役立ちます。
ファイアウォール設定の確認方法
ファイアウォールは外部からの攻撃を防ぐ最前線の防御です。適切に設定されているか、有効化されているかを確認します。
Linuxでは主に以下のファイアウォールツールが使用されています。
- iptables:従来から使用されている低レベルのファイアウォール
- firewalld:Red Hat系ディストリビューションで標準的な高レベルツール
- ufw(Uncomplicated Firewall):Ubuntu系で使いやすいツール
「iptables -L -n」でiptablesのルールを確認できます。「firewall-cmd --list-all」でfirewalldの設定状況を表示します。ufwの場合は「ufw status verbose」で詳細な状態を確認できます。
業界データによると、クラウド環境では仮想ファイアウォールの設定ミスによる情報漏洩が増加しており、定期的な設定確認が推奨されています。
無料で使えるLinuxセキュリティ診断ツール
基本コマンドでの確認に加えて、専用の診断ツールを使用することでより包括的なチェックが可能になります。ここでは無料で利用できる代表的なツールを紹介します。
Lynis(総合セキュリティ監査ツール)
LynisはLinuxシステムの総合的なセキュリティ監査を自動で実行してくれるオープンソースツールです。システムの設定を多角的にチェックし、改善提案を提示してくれます。
インストールと実行方法は以下の通りです。
- 公式サイト(cisofy.com)から最新版をダウンロード
- tarファイルを展開し、「./lynis audit system」コマンドで診断実行
- 診断結果は画面表示とともに/var/log/lynis.logに保存される
- 各項目に対してWarningやSuggestionが表示される
Lynisは200以上の項目をチェックし、ハードニングインデックス(セキュリティスコア)を算出します。このスコアを定期的に記録することで、セキュリティ改善の進捗を可視化できます。
実際の導入事例では、Lynisの診断結果に基づいて優先的に対処すべき項目を特定し、3か月で初期スコア45から78まで改善した企業もあります。
OpenVAS(脆弱性スキャナー)
OpenVASは既知の脆弱性を自動検出するスキャンツールです。ネットワーク経由でサーバーをスキャンし、CVE(共通脆弱性識別子)に登録されている脆弱性の有無を確認します。
導入手順と診断実施の流れは以下です。
- Dockerイメージを使用した導入が最も簡単(mikesplain/openvas)
- Webインターフェースにアクセスし、スキャン対象を設定
- スキャンタスクを作成し、実行
- 検出された脆弱性を重要度別に確認
- 各脆弱性に対する対処方法が提示される
OpenVASは初回のデータベース更新に時間がかかる場合がありますが、最新の脆弱性情報を参照できるため、パッチ適用の優先順位付けに有効です。
ただし、本番環境でのスキャン実行は負荷をかける可能性があるため、必ず事前に影響範囲を確認し、業務時間外に実施してください。
ClamAV(マルウェアスキャン)
ClamAVはLinuxで動作するオープンソースのアンチウイルスソフトです。マルウェアやバックドアの検出に使用できます。
インストールと使用方法は以下の通りです。
- パッケージマネージャーでインストール(例:yum install clamav)
- 「freshclam」コマンドでウイルス定義データベースを更新
- 「clamscan -r /」でシステム全体をスキャン(時間がかかります)
- 特定ディレクトリのみスキャンする場合は「clamscan -r /home」など
- 定期的なスキャンをcronで自動化することを推奨
ClamAVは主にメールサーバーでの使用を想定して開発されていますが、Webサーバーのアップロードディレクトリの監視にも活用できます。
業界の調査によると、Linux環境でもマルウェア感染事例は増加傾向にあり、定期的なスキャンの実施が推奨されています。
RKHunter(ルートキット検出)
RKHunter(Rootkit Hunter)は、システムに侵入したルートキットやバックドアを検出するツールです。システムファイルの改ざんを検知できます。
使用方法は以下です。
- パッケージマネージャーでインストール(例:apt-get install rkhunter)
- 「rkhunter --update」でデータベースを最新化
- 「rkhunter --propupd」でベースラインを記録(初回のみ)
- 「rkhunter --check」で検査を実行
- 結果は/var/log/rkhunter.logに保存される
RKHunterは既知のルートキットのシグネチャとシステムファイルを照合し、疑わしい変更を検出します。ただし、正常な更新でもWarningが出る場合があるため、結果の見極めには経験が必要です。
元セキュリティエンジニアの証言では、RKHunterで検出された疑わしいファイルを調査した結果、実際に攻撃者が仕掛けたバックドアを発見できた事例があり、定期的な実行の重要性が示されています。
セキュリティ診断結果の見方と優先対処項目
診断を実施しても、結果をどう読み解き、何から対処すべきか判断できなければ意味がありません。ここでは診断結果の優先順位付けと具体的な対処方法を解説します。
Critical(緊急)レベルの脆弱性対応
Criticalレベルの脆弱性は即座に対処が必要な項目です。放置すると重大なセキュリティインシデントにつながります。
代表的なCritical項目は以下です。
- rootログインの許可:SSHでrootの直接ログインが可能になっている
- パッチ未適用の重大な脆弱性:CVSSスコア9.0以上の脆弱性が放置されている
- デフォルトパスワードの使用:初期パスワードのまま運用されている
- 不要な管理ポートの公開:管理画面が外部に公開されている
- 暗号化なし通信の使用:telnetやFTPなど平文通信が有効
実際の対処例として、SSHでrootログインを無効化するには、/etc/ssh/sshd_configの「PermitRootLogin」をnoに設定し、sshサービスを再起動します。また、パッケージの更新は「yum update」や「apt update && apt upgrade」で実施できます。
IPAの報告によると、これらCritical項目を放置したことが原因のインシデントが全体の約60パーセントを占めており、最優先での対応が求められます。
High(高)レベルのリスク対応
Highレベルのリスクは早急な対応が望ましい項目です。即座にインシデントにつながる可能性は低いものの、放置すべきではありません。
主なHigh項目は以下の通りです。
- 弱いパスワード設定:パスワードポリシーが未設定または緩い
- 不要なサービスの稼働:使用していないデーモンが起動している
- ログ保存期間の不足:インシデント調査に必要な期間ログが保存されていない
- ファイアウォールルールの不備:必要以上にポートが開放されている
- 監査機能の未有効化:auditdなどの監査ツールが無効
対処方法として、パスワードポリシーは/etc/login.defsや/etc/security/pwquality.confで設定できます。不要サービスは「systemctl disable サービス名」で自動起動を停止します。
実際の改善事例では、これらHigh項目への対処により、攻撃者が侵入を試みても成功しにくい環境を構築できたケースがあります。
定期的に実施すべきメンテナンス
セキュリティ診断は一度実施すれば終わりではなく、継続的な実施が重要です。定期的なメンテナンス項目を確認しましょう。
推奨される定期実施項目は以下です。
- パッケージの更新:月1回の定期更新(セキュリティパッチは即時適用)
- ログの確認:週1回の認証ログチェック、異常なアクセスがないか確認
- アカウントの棚卸し:四半期に1回、不要アカウントの削除
- バックアップの検証:月1回、バックアップからの復旧テスト
- セキュリティツールの実行:月1回、Lynisなどでスコア確認
これらの作業はcronで自動化できる部分も多く、例えばパッケージ更新通知やログ異常検知は自動化することで負担を軽減できます。
調査結果によると、定期的なメンテナンスを実施している企業は、セキュリティインシデントの発生率が約70パーセント低いというデータがあります。
診断結果を記録・報告する方法
診断を実施したら、結果を記録し、改善の進捗を追跡することが重要です。記録がなければ、どこまで改善したか評価できません。
効果的な記録・報告の方法は以下です。
- 診断日時と実施者の記録:いつ誰が診断したか明確にする
- 検出された問題のリスト化:重要度別に整理し、対処状況を記録
- 対処完了日の記録:いつ修正したかを残す
- スコアの推移グラフ化:Lynisのハードニングスコアなどを時系列で記録
- 経営層への報告資料作成:非技術者にもわかる形でリスクを説明
具体的には、Excelやスプレッドシートで診断結果台帳を作成し、毎回の診断結果を蓄積していく方法が効果的です。また、Lynisの結果はログファイルから抽出してレポート化できます。
実際の支援事例では、診断結果を可視化したことで経営層の理解が得られ、セキュリティ対策予算の承認につながったケースがあります。記録は対策の説得材料としても有効です。
まとめ
この記事では、Linuxサーバーのセキュリティ診断を自社で実施する方法について解説しました。重要なポイントは以下の3つです。
- 基本コマンドでの定期確認:ps、ss、lastlogなど標準コマンドで現状把握を行い、不審な点がないか月1回は確認する習慣をつけましょう。
- 無料ツールの活用:Lynis、OpenVAS、ClamAV、RKHunterなどのツールを組み合わせることで、専門知識がなくても包括的な診断が可能です。
- 結果の記録と継続的改善:診断を一度実施するだけでなく、結果を記録し、定期的に実施することでセキュリティレベルを向上させていくことが重要です。
次のステップとしては、今回紹介したコマンドやツールを実際に試し、自社のサーバーの現状を把握することから始めてみてください。診断結果で深刻な問題が見つかった場合や、自社での対応に不安がある場合は、セキュリティ専門企業への相談も検討しましょう。継続的な監視体制の構築により、より安全なLinuxサーバー運用が実現できます。
関連記事
管理画面のセキュリティ診断で重点的に確認すべき7つのポイント
自社のWebシステムや業務アプリケーションの管理画面に、知らないうちに脆弱性が潜んでいたらどうでしょうか。管理画面は企業の重要データや顧客情報にアクセスできる「システムの心臓部」であり、攻撃者にとって最も魅力的なターゲットです。
Androidアプリのセキュリティ診断方法|モバイルアプリの脆弱性チェック
「開発ベンダーからセキュリティ対策済みと言われたが、本当に大丈夫なのだろうか」「アプリストア公開前に、何をどこまでチェックすればいいのか」このような不安を抱えている企業担当者の方は多いのではないでしょうか。
APIセキュリティ診断の12のチェックポイント|REST API保護の必須項目
近年、API経由のセキュリティインシデントが急増しています。Gartner社の調査によると、2023年時点でWebアプリケーション攻撃の83%がAPIを標的としており、2019年の約2倍に増加しました。