sysctlコマンドでLinuxのカーネルパラメータを確認・変更する方法|永続化とセキュリティ設定も

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, Linuxコマンド > sysctlコマンドでLinuxのカーネルパラメータを確認・変更する方法|永続化とセキュリティ設定も
「sysctl -w で設定したのに再起動したら元に戻ってしまった」「カーネルパラメータをどこで変えればいいか分からない」——現場で必ずぶつかる疑問です。

sysctl コマンドはLinuxのカーネルパラメータをリアルタイムで確認・変更できるコマンドです。ネットワークのバッファサイズやTCPの挙動、セキュリティ設定まで、OSの動作を細かく制御できます。ただし、正しく永続化しないと再起動のたびに設定がリセットされるという落とし穴があります。

この記事では、sysctl コマンドの基本的な使い方から、/etc/sysctl.conf と /etc/sysctl.d/ を使った永続化の方法、セキュリティ強化のための実践設定まで解説します。実行環境はRHEL 9.4 / Rocky Linux 9 / Ubuntu 24.04 LTSで動作確認済みです。

この記事のポイント

・sysctl -a で現在のカーネルパラメータを全件確認できる
・一時変更は sysctl -w、永続化は /etc/sysctl.d/ への記述が正解
・sysctl --system で設定ファイルを即時反映できる
・IPフォワーディングやICMPリダイレクト無効化などセキュリティ設定は必須


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

sysctlとは何か?カーネルパラメータを動的に変更できる仕組み

Linuxカーネルは起動後も /proc/sys/ 以下のファイルを通じてパラメータを動的に変更できます。sysctl コマンドはこの /proc/sys/ へのアクセスをラップした便利なインタフェースです。

たとえば、ネットワークのTCPバッファサイズを増やしてスループットを上げたり、IPv4フォワーディングを有効にしてルーター機能を持たせたりといったことが、OS再起動なしに実行できます。

ただし、/proc/sys/ への直接書き込みや sysctl -w での変更は「一時的」です。再起動すると元の値に戻ります。永続化するには設定ファイルに記述する必要があります。この区別をきちんと理解することが、sysctl を現場で正しく使うための第一歩です。

基本的な使い方

1. 現在のカーネルパラメータを確認する

全パラメータの一覧を表示するには -a オプションを使います。

# 全パラメータを表示(出力が多いのでlessと組み合わせるのが実用的) sysctl -a | less # キーワードで絞り込む sysctl -a | grep tcp # 特定パラメータを直接確認 sysctl net.ipv4.ip_forward

実際の実行例です(Rocky Linux 9.4サーバー上で確認):

# net.ipv4.ip_forward の確認 $ sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0 # TCPウィンドウスケーリング関連を確認 $ sysctl -a | grep tcp_window net.ipv4.tcp_window_scaling = 1

2. カーネルパラメータを一時的に変更する(sysctl -w)

-w オプションで値を変更できます。この変更は即座に反映されますが、再起動すると元に戻ります。動作確認やトラブルシューティング時に便利です。

# IPv4フォワーディングを有効化(ルーター機能が必要な場合) sysctl -w net.ipv4.ip_forward=1 # 確認 sysctl net.ipv4.ip_forward # 出力例: net.ipv4.ip_forward = 1 # TCPの最大バックログを変更 sysctl -w net.core.somaxconn=1024

/proc/sys/ への直接書き込みと同等ですが、sysctl -w のほうがパラメータ名が読みやすくミスが少なくなります。

# sysctl -w と同等の操作(直接書き込み) echo 1 > /proc/sys/net/ipv4/ip_forward # ドット区切りと / の関係 # sysctl のキー: net.ipv4.ip_forward # proc パス: /proc/sys/net/ipv4/ip_forward

3. カーネルパラメータを永続化する(/etc/sysctl.d/)

設定を再起動後も維持するには、設定ファイルに記述します。RHEL 9系 / Ubuntu 24.04 どちらでも /etc/sysctl.d/ 配下に独自ファイルを作るのが推奨の方法です。

# /etc/sysctl.d/ に設定ファイルを作成(ファイル名は数字プレフィックスで読み込み順を制御) vi /etc/sysctl.d/99-custom.conf # 記述例 net.ipv4.ip_forward = 1 net.core.somaxconn = 1024 vm.swappiness = 10

設定ファイルを反映するには --system オプションを使います。

# /etc/sysctl.d/ と /etc/sysctl.conf の内容を全て読み込んで反映 sysctl --system # 特定のファイルだけ反映したい場合 sysctl -p /etc/sysctl.d/99-custom.conf # 出力例(反映されたパラメータが表示される) net.ipv4.ip_forward = 1 net.core.somaxconn = 1024 vm.swappiness = 10

補足:/etc/sysctl.conf の扱い
従来は /etc/sysctl.conf に書くのが一般的でしたが、現在は /etc/sysctl.d/ 配下にファイル名をつけて管理するほうが、OS標準設定との分離が明確になるためおすすめです。/etc/sysctl.conf を使っても問題ありませんが、/etc/sysctl.d/ のファイルは後から読み込まれるため優先度が高くなります。

実務でよく使うカーネルパラメータの設定例

1. ネットワークパフォーマンスの改善

Webサーバーやデータベースサーバーで高負荷時のコネクション問題を改善するための設定です。

# TCPの接続キュー長を拡張(デフォルト128はWebサーバーには不足) net.core.somaxconn = 65535 # SYN接続のバックログを拡張 net.ipv4.tcp_max_syn_backlog = 65535 # TCPの再利用を許可(TIME_WAIT状態のコネクションを再利用) net.ipv4.tcp_tw_reuse = 1 # 受信・送信バッファの最大サイズ(バイト単位) net.core.rmem_max = 16777216 net.core.wmem_max = 16777216

ポート使用状況の確認はLinux ポート確認の全コマンドが参考になります。ネットワークパラメータ変更後は ss -tulnp でコネクション状態を確認しましょう。

2. セキュリティ強化のための設定

サーバーのセキュリティハードニングで必ず設定するパラメータ群です。

# ICMPリダイレクトを無視(中間者攻撃対策) net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # ICMPリダイレクトを送信しない net.ipv4.conf.all.send_redirects = 0 # IPスプーフィング対策(逆方向パス検証を有効) net.ipv4.conf.all.rp_filter = 1 # SYNフラッド攻撃対策(SYN Cookies を有効) net.ipv4.tcp_syncookies = 1 # ブロードキャストへのICMPに応答しない(Smurfアタック対策) net.ipv4.icmp_echo_ignore_broadcasts = 1 # ルーターでない場合はIPフォワーディングを無効に保つ net.ipv4.ip_forward = 0

ファイアウォールとの組み合わせによるネットワーク保護については、Linux DNS 設定の基本の解説で触れているように、ネットワーク設定は複数の層で管理するのが原則です。sysctl によるカーネルレベルの制御はその重要な一層を担います。

3. メモリとスワップの調整

# swappiness(スワップへの積極度。0=なるべく使わない、100=積極的に使う) # デフォルト60。データベースサーバーでは10以下が推奨 vm.swappiness = 10 # ダーティページをディスクに書き出す割合(デフォルト20) vm.dirty_ratio = 10 # OOM Killerの対象から重要プロセスを外す(プロセスのPIDで指定) # 例: mysqld を OOM Killer の対象外にする # echo -1000 > /proc/$(pgrep -f mysqld)/oom_score_adj

4. カーネル起動パラメータの確認(起動時のログから追う)

sysctlで変更できるのは起動後のパラメータです。起動時のカーネルパラメータ(GRUBで渡すもの)とは別物です。起動時間の分析にはsystemd-analyze で起動時間計測が役立ちます。

# 現在の起動パラメータを確認(GRUBから渡されたもの) cat /proc/cmdline # 出力例(Rocky Linux 9の場合) BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-427.13.1.el9_4.x86_64 root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet

トラブルシュート・エラー対処

「sysctl: setting key "xxx": Read-only file system」が出た場合

コンテナ環境(Docker / LXC)や制限されたnamespace内では一部のカーネルパラメータが変更できません。

# エラー例 $ sysctl -w net.ipv4.ip_forward=1 sysctl: setting key "net.ipv4.ip_forward": Read-only file system # 原因確認: コンテナ内かどうかチェック systemd-detect-virt # 出力例(Dockerコンテナ内の場合) docker

対処法: Dockerの場合は --sysctl オプションまたは docker-compose の sysctls 設定で起動時にパラメータを渡します。ホストOSでの変更が必要な場合はコンテナの外で実行してください。

「sysctl --system」で設定が反映されない場合

# ファイルの読み込み順を確認(数字の大きいファイルが後から読まれ優先される) ls /etc/sysctl.d/ # 出力例 10-default.conf 99-custom.conf # 設定ファイルの書式エラーを確認 sysctl -p /etc/sysctl.d/99-custom.conf # エラー例(等号前後にスペースがない場合は問題なし。コロンは使えない) # sysctl: cannot stat /proc/sys/net/ipv4/ip_forward_wrong: No such file or directory # 設定が現在反映されているか確認 sysctl net.ipv4.ip_forward

設定変更後にネットワーク通信が不安定になった場合

# 現在値を確認してデフォルト値と比較 sysctl -a | grep net.core # デフォルト値の参考(カーネルバージョンで異なる) # net.core.somaxconn = 4096 (RHEL 9のデフォルト) # net.core.rmem_max = 212992 (デフォルト) # 一時的な変更を即座に元に戻す sysctl -w net.core.somaxconn=4096

本記事のまとめ

やりたいこと コマンド
全パラメータを確認 sysctl -a
特定パラメータを確認 sysctl net.ipv4.ip_forward
一時的に値を変更 sysctl -w net.ipv4.ip_forward=1
設定ファイルを即時反映 sysctl --system
特定ファイルを反映 sysctl -p /etc/sysctl.d/99-custom.conf
キーワードで絞り込み sysctl -a | grep tcp
sysctl は正しく使えばサーバーのパフォーマンスとセキュリティを大幅に改善できるコマンドです。一時変更と永続化の違いを意識して、/etc/sysctl.d/ を使った管理を習慣にしてください。

sysctlを理解しても「設定が怖い」と感じていませんか?

カーネルパラメータは触り方を誤るとサーバーが不安定になります。正しい確認手順と変更の「型」を知っていれば安全に運用できますが、独学では落とし穴に気づきにくいものです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。