Linuxのsysctlセキュリティ設定|カーネルパラメータで攻撃を防ぐ実践ガイド

Linux Security

ファイアウォールを設定し、SSHを鍵認証に切り替えた。それでも「カーネルレベルの設定まで手が回っていない」という現場エンジニアは意外と多いものです。

Linuxのデフォルト設定は、互換性を優先して作られています。セキュリティを高めるには、カーネルパラメータを明示的に調整する必要があります。その手段が sysctl です。

sysctl を使えば、SYN flood攻撃・IPスプーフィング・ICMPを悪用した攻撃に対して、OSレベルで防壁を張ることができます。設定ファイルに数十行追記するだけで、サーバーの堅牢性は大きく変わります。

この記事では、現場で実際に使われているsysctlのセキュリティ設定を、コピー&ペーストで使える形で解説します。設定の意味と根拠まで丁寧にカバーするので、「何を設定しているのか理解した上で適用したい」という方にも役立てていただけます。

Linuxのsysctlセキュリティ設定|カーネルパラメータで攻撃を防ぐ実践ガイド

sysctlとは?なぜセキュリティに重要なのか

sysctl は、Linuxカーネルの動作パラメータを実行中に確認・変更するためのコマンドです。内部的には /proc/sys/ 以下に展開されたカーネルパラメータを操作しており、多くの設定は再起動なしにその場で反映できます。

永続化するには /etc/sysctl.conf または /etc/sysctl.d/ 以下のファイルに設定を記載し、sysctl -p コマンドで読み込みます。再起動後も設定が維持されるため、本番環境での運用に適しています。

セキュリティ観点でsysctlが重要な理由は、カーネル自体のネットワーク処理やプロセス管理の挙動を制御できるからです。ファイアウォールはパケットのIN/OUTを制御しますが、sysctlはそれより深いレイヤーで動作します。両者は補完関係にあります。

設定できる主なセキュリティカテゴリは次の通りです。

ネットワーク攻撃の緩和: SYN flood、ICMPリダイレクト、IPスプーフィング
カーネル情報の漏洩防止: dmesgの制限、ptraceの制限
プロセス保護: コアダンプ無効化、ASLR(アドレス空間配置のランダム化)の最大化
シンボリックリンク攻撃への防護: ハードリンク・シンボリックリンクの悪用ブロック

代表的な攻撃手法とsysctlによる対策の仕組み

1. SYN flood攻撃

SYN flood は、TCPの3ウェイハンドシェイクの仕組みを悪用した攻撃です。攻撃者は大量の偽造SYNパケットを送り続け、サーバーに「SYN_RECEIVED状態」の接続要求を積み上げます。この状態の接続は限られたキューに保持されるため、やがて正規ユーザーからの接続を受け付けられなくなります。

sysctl では SYN cookies を有効化することで対抗します。SYN cookiesが有効な場合、サーバーはキューに状態を保存するのではなく、SYNパケットへの情報をACKに符号化して返します。正規のクライアントだけがこの符号に応答できるため、偽造パケットによるキュー枯渇を防げます。

2. IPスプーフィング(送信元アドレス偽装)

IPスプーフィングは、パケットの送信元IPアドレスを偽装してサーバーに送りつける手法です。DDoS攻撃の増幅や、信頼関係を悪用した不正アクセスに使われます。

Linuxには リバースパスフィルタリング(rp_filter) という機能があり、受信パケットの送信元アドレスが「本来そのパケットが来るはずのインターフェース」から到達可能かを検証します。到達不可能な送信元からのパケットは偽装と判断して破棄します。

3. ICMPを悪用した攻撃

ICMPは本来、ネットワーク診断(pingなど)に使うプロトコルですが、いくつかの悪用手法があります。

ICMPリダイレクト攻撃: 偽のICMP Redirectメッセージを送り、ルーティングテーブルを書き換えて通信を傍受する
Smurf攻撃: ブロードキャストアドレスへのpingを悪用した増幅攻撃
ICMPタイムスタンプ応答: サーバーの内部時刻情報を漏洩させ、攻撃の準備に使われる

sysctl でICMPリダイレクトの受け入れを無効化し、ブロードキャストpingへの応答を無効化することで、これらの手法を封じられます。

4. カーネル情報の漏洩

攻撃者がシステムの内部情報を把握できるほど、攻撃の精度が上がります。dmesg(カーネルのブートログ)や ptrace(プロセスへのデバッガアタッチ)が一般ユーザーに開放されていると、情報収集の手がかりになります。

sysctl でこれらの機能を制限することで、攻撃の初期偵察フェーズを難しくできます。

実践的なsysctlセキュリティ設定

1. /etc/sysctl.conf に追記する設定

以下の設定をコピーして /etc/sysctl.conf の末尾に追記してください。既存の設定との重複がないか確認してから適用することを推奨します。

# ========================================= # ネットワーク攻撃対策 # ========================================= # SYN flood対策: SYN cookiesを有効化 net.ipv4.tcp_syncookies = 1 # IPスプーフィング対策: リバースパスフィルタリング net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # ICMPリダイレクトを受け入れない(ルーティングテーブル書き換え防止) net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # ICMPリダイレクトを送信しない net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # ブロードキャストpingへの応答を無効化(Smurf攻撃対策) net.ipv4.icmp_echo_ignore_broadcasts = 1 # 不正なICMPエラーメッセージを無視 net.ipv4.icmp_ignore_bogus_error_responses = 1 # TCP RFC1337準拠: TIME_WAIT状態のRSTパケット悪用を防止 net.ipv4.tcp_rfc1337 = 1 # IPv6: ルーター広告を受け入れない net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 # ========================================= # カーネル情報漏洩防止 # ========================================= # dmesgを一般ユーザーに非公開(root/CAP_SYSLOG権限が必要) kernel.dmesg_restrict = 1 # ptraceを同一UID・親プロセスのみに制限 kernel.yama.ptrace_scope = 1 # ========================================= # プロセス・メモリ保護 # ========================================= # ASLR(アドレス空間配置ランダム化)を最大化 kernel.randomize_va_space = 2 # コアダンプを無効化(パスワード等の情報漏洩防止) fs.suid_dumpable = 0 # ハードリンクとシンボリックリンクへの攻撃を防止 fs.protected_hardlinks = 1 fs.protected_symlinks = 1

2. 設定の有効化と確認

設定ファイルを保存したら、以下のコマンドで即時に反映させます。

# /etc/sysctl.conf を読み込んで反映 sudo sysctl -p # 特定のパラメータの現在値を確認 sysctl net.ipv4.tcp_syncookies sysctl kernel.randomize_va_space # ネットワーク関連パラメータを一覧表示 sysctl -a | grep net.ipv4 # 再起動後も有効か確認 sudo reboot sysctl net.ipv4.tcp_syncookies

sysctl -p 実行後にエラーが表示された場合は、そのパラメータがカーネルバージョンやディストリビューションで非対応の可能性があります。エラーが出た行をコメントアウト(先頭に # を付ける)して再実行してください。

3. /etc/sysctl.d/ を活用した管理

RHEL系・Ubuntu系の多くのディストリビューションでは、/etc/sysctl.d/ 以下に個別ファイルを置く方法が推奨されています。ファイルが数字順に読み込まれるため、OS標準設定と自分のカスタム設定を分けて管理できます。

# セキュリティ専用ファイルを作成(99はOSデフォルトより後に読み込まれる) sudo vi /etc/sysctl.d/99-security-hardening.conf # 作成後の反映(sysctl.conf と sysctl.d 両方を読み込む) sudo sysctl --system

中小企業・情シス1人体制でも今日からできること

sysctlの設定変更は、特別な製品やライセンスが不要です。標準のLinuxコマンドだけで実行でき、費用もかかりません。しかし「設定を変えてサービスに影響が出たら」という懸念から、後回しにされがちです。

現実的なアプローチとして、次の順番で取り組むことを推奨します。

まずテスト環境で試す: 本番サーバーのコピーに設定を適用し、数日間動作を確認する
ステージング→本番の順で展開: 問題がなければメンテナンス時間帯に本番へ適用する
変更ログを残す: いつ・何を変更したかをテキストファイルで記録する

テスト環境がない場合は、影響が少ないパラメータから始めるのが安全です。net.ipv4.icmp_echo_ignore_broadcasts = 1fs.protected_symlinks = 1 は、通常の業務アプリケーションに影響を与えるリスクが低い設定です。

なお、net.ipv4.tcp_syncookies は現代のLinuxカーネル(3.x以降)ではデフォルトで1になっているディストリビューションが多くあります。sysctl net.ipv4.tcp_syncookies で現在値を確認し、すでに有効なら改めて設定する必要はありません。

よくある誤解と注意点

【注意1】sysctl設定はファイアウォールの代替ではない

sysctlはカーネルパラメータを調整するものであり、ファイアウォール(iptables / firewalld / nftables)の代替ではありません。両者は補完関係にあります。ファイアウォールはポートやIPアドレス単位のフィルタリングを担い、sysctlはカーネルの挙動そのものを調整します。どちらか一方だけでは十分ではありません。

【注意2】コマンドラインでの変更は再起動で消える

コマンドラインで sysctl -w パラメータ名=値 と実行した場合、変更は即座に反映されますが再起動後に消えます。永続化するには必ず /etc/sysctl.conf または /etc/sysctl.d/ 以下のファイルに記載してください。

【注意3】rp_filter = 1 は非対称ルーティング環境では要確認

rp_filter の値は1(厳格モード)または2(緩和モード)を選べます。マルチホーム環境や非対称ルーティングを使っているネットワーク構成では、1に設定すると正常なパケットが破棄されることがあります。ルーティング構成を確認してから適用してください。

【注意4】ptrace_scope の変更は開発環境に影響する場合がある

kernel.yama.ptrace_scope = 1 は、デバッガや一部の開発ツール(gdb、straceなど)の動作に影響します。開発環境では意図せず問題が起きることがあるため、本番環境への適用に限定することを推奨します。

本記事のまとめ

Linuxのsysctlを活用することで、追加コストなしにサーバーのセキュリティを大幅に強化できます。特に優先度の高い設定を整理すると次の通りです。

パラメータ 目的 推奨値
net.ipv4.tcp_syncookies SYN flood攻撃の緩和 1
net.ipv4.conf.all.rp_filter IPスプーフィング防止 1(非対称ルートなら2)
net.ipv4.conf.all.accept_redirects ICMPリダイレクト攻撃防止 0
net.ipv4.icmp_echo_ignore_broadcasts Smurf攻撃防止 1
kernel.dmesg_restrict カーネルログ情報の漏洩防止 1
kernel.randomize_va_space ASLRによるメモリ攻撃防止 2
fs.protected_symlinks シンボリックリンク攻撃防止 1

設定変更は、テスト環境での事前確認 → 本番環境への段階的適用 のプロセスで進めることが重要です。一度設定すれば、OSを再インストールしない限り維持されます(/etc/sysctl.d/ に記載した場合)。

Linuxのファイルパーミッション管理については、姉妹サイトLinuxMaster.JPで詳しく解説しています。合わせてご参照ください。

サーバーのセキュリティ設定、どこまでできていますか?

sysctl設定だけでなく、SELinux・firewalld・SSH鍵認証・ログ監視まで体系的に押さえることで、はじめて「守れている」状態になります。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。

コメント

タイトルとURLをコピーしました