Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
Sysctlのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Sysctl
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{Lowercase title}} [[Category:カーネル]] [[en:Sysctl]] [[Wikipedia:sysctl|sysctl]] は稼働中の[[カーネルパラメータ]]を確認・変更するためのツールです ([[公式リポジトリ]]の {{Pkg|procps-ng}} パッケージ)。sysctl は procfs ({{ic|/proc/}} の仮想プロセスファイルシステム) で実装されています。 == 設定 == {{Note|バージョン 207 と 21x から、[[systemd]] は {{Ic|/etc/sysctl.d/*.conf}} と {{Ic|/usr/lib/sysctl.d/*.conf}} の設定だけを適用するようになっています。{{Ic|/etc/sysctl.conf}} をカスタマイズしていた場合は、ファイルの名前を {{Ic|/etc/sysctl.d/99-sysctl.conf}} のように変更する必要があります。{{Ic|/etc/sysctl.d/foo}} などのファイルを作成していた場合、{{Ic|/etc/sysctl.d/foo.conf}} と名前を変更してください。}} '''sysctl''' のプリロード/設定ファイルは {{Ic|/etc/sysctl.d/99-sysctl.conf}} に作成することができます。[[systemd]] では、{{Ic|/etc/sysctl.d/}} と {{Ic|/usr/lib/sysctl.d/}} はカーネルの sysctl パラメータにどちらも使えるディレクトリです。名前と元のディレクトリによって処理される順番が決まります。最後のパラメータによって前の方のパラメータが置き換えられるので順番は重要です。例えば、{{ic|/usr/lib/sysctl.d/50-default.conf}} に書かれたパラメータは {{ic|/etc/sysctl.d/50-default.conf}} や両方のディレクトリよりも後に処理される設定ファイルにある同じパラメータによって置き換えられます。 全ての設定ファイルを手動でロードするには、次を実行します: # sysctl --system 適用される階層が出力されます。単一のパラメータファイルを指定してロードすることも可能です: # sysctl -p ''filename.conf'' 詳しくは [http://0pointer.de/blog/projects/the-new-configuration-files the new configuration files] や [http://0pointer.de/public/systemd-man/sysctl.d.html systemd の sysctl.d man ページ] を見て下さい。 利用可能なパラメータは {{Ic|/proc/sys/}} 以下に並んでいます。例えば、{{Ic|kernel.sysrq}} パラメータはファイルシステム上の {{Ic|/proc/sys/kernel/sysrq}} ファイルにあたります。{{Ic|sysctl -a}} コマンドを使うことで現在利用可能な値を全て表示することができます。 {{Note|カーネルドキュメントをインストールしている場合 ({{Pkg|linux-docs}})、sysctl 設定に関する詳細な情報が {{Ic|/usr/lib/modules/$(uname -r)/build/Documentation/sysctl/}} で読めます。sysctl 設定を変更する前にこれらを一読することが強く推奨されています。}} 設定の変更はファイルの操作によるか {{Ic|sysctl}} ユーティリティを使って行います。例えば、一時的に[[キーボードショートカット|マジック SysRq キー]]を有効にするには: # sysctl kernel.sysrq=1 もしくは: # echo "1" > /proc/sys/kernel/sysrq 再起動後も変更を維持させるには、{{Ic|/etc/sysctl.d/99-sysctl.conf}} や他の {{Ic|/etc/sysctl.d/}} 内の適用されるパラメータファイルに適切な行を追加・編集してください。 {{Tip|適用することができるパラメータがロードされないカーネルモジュールに依存していることもあります。例えば {{ic|/proc/sys/net/bridge/*}} のパラメータは {{ic|br_netfilter}} モジュールに依存しています。モジュールが実行時に (または再起動後) ロードされない場合、パラメータは''ひっそりと''適用されないことになります。[[カーネルモジュール#ロード]]を見て下さい。}} == セキュリティ == [[セキュリティ#カーネルの防御]]を見て下さい。 == ネットワーク == === パフォーマンスを向上させる === {{Warning|以下の設定はロードバランシングや NAT を行っている場合にフレームがドロップする可能性があります。ローカルネットワークでしか通信しないサーバーで使ってください。}} # reuse/recycle time-wait sockets net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 ==== 受信キューのサイズを増やす ==== 受信したフレームは、ネットワークカード上のリングバッファから取り出した後、このキューに格納されます。 高速カードの場合、この値を大きくすると、パケットの損失を防ぐのに役立ちます。 net.core.netdev_max_backlog=16384 {{Note|SIP ルータなどのリアルタイムアプリケーションでは、このオプションは高速な CPU を必要とします。そうしないと、キュー内のデータが古くなります。}} ==== 最大接続数を増やす ==== カーネルが受け付ける接続数の上限 (デフォルトは128) net.core.somaxconn = 8192 {{Note|1=カーネル5.4はデフォルト値を4096に上げました [https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4]}} {{Warning|この値を大きくすると、負荷の高いサーバーのパフォーマンスのみが向上し、処理速度の低下 (例:シングルスレッドのブロッキングサーバ) またはワーカー・スレッド/プロセス数の不足 [https://serverfault.com/questions/518862/will-increasing-net-core-somaxconn-make-a-difference/519152] が発生する可能性があります}} ==== ネットワークインターフェイス専用のメモリを増やす ==== {{Expansion|各オプションの単位を説明する(バイト、キロバイト、メモリページ?)}} {{Accuracy|このセクションは Cloudflare のブログ記事が動機となっていますが、 [https://github.com/redhat-performance/tuned/blob/master/profiles/network-throughput/tuned.conf#L10 RedHat の調整済みプロファイル] はさらに小さな値と主張を示唆しています ''これは 40 Gb の速度でのみ必要と思われます'' したがって、これらの設定は一般的なハードウェアでは役に立ちません。}} デフォルトでは、Linux ネットワークスタックは WAN リンクを介した高速で大規模なファイル転送用に設定されていません(つまり、より多くのネットワーク・パケットを処理)。正しい値を設定すると、メモリリソースを節約できる場合があります。 net.core.rmem_default = 1048576 net.core.rmem_max = 16777216 net.core.wmem_default = 1048576 net.core.wmem_max = 16777216 net.core.optmem_max = 65536 net.ipv4.tcp_rmem = 4096 1048576 2097152 net.ipv4.tcp_wmem = 4096 65536 16777216 デフォルトの {{ic|4096}} UDP 制限を増やすこともできます。 net.ipv4.udp_rmem_min = 8192 net.ipv4.udp_wmem_min = 8192 詳細および推奨値については、次の資料を参照してください。 * http://www.nateware.com/linux-network-tuning-for-2013.html * https://blog.cloudflare.com/the-story-of-one-latency-spike/ ==== TCP Fast Open を有効にする ==== {{Expansion|"明示的な TCP_FASTOPEN ソケットオプションなしで、すべてのリスナーがデフォルトで Fast Open をサポートできるようにします" つまり値を {{ic|1027}} (0x1+0x2+0x400) にオプションを指定します。|section=TCP Fast Open}} TCP Fast Open は、Transmission Control Protocol (TCP) の拡張機能であり、送信側の初期 TCP SYN [https://www.keycdn.com/support/tcp-fast-open/] 中にデータを交換できるようにすることで、ネットワーク遅延の低減に役立ちます。デフォルトの {{ic|1}} の代わりに値 {{ic|3}} を使用すると、着信接続と発信接続の両方で TCP Fast Open が許可されます。 net.ipv4.tcp_fastopen = 3 ==== 保留中の接続処理を微調整する ==== {{ic|tcp_max_syn_backlog}} は、保留中の接続の待機確認応答の最大キュー長です。 synflood DOS 攻撃が発生した場合、このキューはすぐにいっぱいになり、その時点で [[Wikipedia:SYN cookies|TCP SYN cookies]] が開始され、システムが正規のトラフィックに応答し続け、悪意のあるIPをブロックするためのアクセス権を取得できるようになります。 サーバーがピーク時に過負荷になる場合は、この値を少し大きくします。 net.ipv4.tcp_max_syn_backlog = 8192 {{ic|tcp_max_tw_buckets}} は、TIME_WAIT 状態におけるソケットの最大数です。 この数に達すると、システムはこの状態のソケットの破棄を開始します。 単純な DOS 攻撃を防ぐには、この値を大きくします。 net.ipv4.tcp_max_tw_buckets = 2000000 {{ic|tcp_tw_reuse}} 新しいタイムスタンプが以前の接続で記録された最新のタイムスタンプよりも厳密に大きい場合に、TCP が TIME-WAIT 状態の既存の接続を新しい発信接続で再利用するかどうかを設定します。 これにより、使用可能なネットワーク・ソケットの不足を回避できます。 net.ipv4.tcp_tw_reuse = 1 ソケットが強制的にクローズされる前に final FIN パケットを待つ秒数を指定します。これは厳密には TCP 仕様に違反しますが、サービス拒否攻撃を防ぐために必要です。Linux2.2 では、デフォルト値は 180 [https://access.redhat.com/solutions/41776] でした。 net.ipv4.tcp_fin_timeout = 10 {{ic|tcp_slow_start_after_idle}} は、新しい接続に対してだけ TCP をデフォルトのウィンドウサイズで開始するか、またはアイドル状態が長すぎる既存の接続に対してもTCPを開始するかを設定します。 この設定は、永続的な単一接続のパフォーマンスを無効にし、オフにすることもできます。 net.ipv4.tcp_slow_start_after_idle = 0 ==== TCP キープアライブパラメータを変更する ==== [[Wikipedia:Keepalive#TCP keepalive|TCP keepalive]] は、相手側が応答を停止したかどうかを判断するのに役立つ TCP 接続のメカニズムです。TCP は、アイドル時間が経過すると、ヌルデータを含むキープアライブプローブをネットワークピアに数回送信します。ピアが応答しない場合、ソケットは自動的に閉じられます。デフォルトでは、TCP キープアライブプロセスはソケットのアクティビティを2時間 (7200秒) 待機してから最初のキープアライブプローブを送信し、75秒ごとに再送信します。TCP/IP ソケット通信が行われていてアクティブである限り、キープアライブパケットは必要ありません。 {{Note|次の設定では、アプリケーションは120秒後 (60秒+10秒+10秒+10秒+10秒+10秒+10秒) にデッド TCP 接続を検出します}} net.ipv4.tcp_keepalive_time = 60 net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes = 6 ==== MTU プローブを有効にする ==== [[Wikipedia:Maximum transmission unit|maximum transmission unit (MTU)]] が長いほどパフォーマンスは向上しますが、信頼性は低下します。 これは、パケットが失われると、より多くのデータが再送信されることになり、インターネット上の多くのルータは非常に長いパケットを配信できないためです。 net.ipv 4.tcp_mtu_probing = 1 詳細については、https://blog.cloudflare.com/path-mtu-discovery-in-practice/ を参照してください。 ==== TCP タイムスタンプ ==== {{Warning|TCP タイムスタンプは、TCP に実装されているラッピングシーケンス番号 (ギガビット速度) およびラウンドトリップ時間の計算から保護します。セキュリティリスク [https://access.redhat.com/sites/default/files/attachments/20150325_network_performance_tuning.pdf] が発生する可能性があるため、TCP タイムスタンプをオフにすることはお勧めしません。}} タイムスタンプ生成を無効にすると、スパイクが減少し、ギガビットネットワークのパフォーマンスが向上する可能性があります。 net.ipv4.tcp_timestamps = 0 ==== BBR を有効にする ==== [[Wikipedia:TCP congestion control#TCP BBR|BBR congestion control algorithm]] は、インターネットトラフィックのより高い帯域幅とより低いレイテンシを実現するのに役立ちます。 [[カーネルモジュール#手動でモジュールを扱う]] {{ic|tcp_bbr}} モジュール {{Note|https://github.com/google/bbr/blob/master/README "これはGoogleの公式製品ではありません"}} net.core.default_qdisc = cake net.ipv4.tcp_congestion_control = bbr ==== Ephemeral port の範囲を拡大 ==== {{Accuracy|この変更によってパフォーマンスはどのように向上しますか?|section=talk:sysctl#net.ipv 4.ip_local_port_range}} [[Wikipedia:Ephemeral port]] は通常、Transmission Control Protocol (TCP) 、User Datagram Protocol (UDP) 、または Stream Control Transmission Protocol (SCTP) によって、クライアント/サーバ通信のクライアント側のポート割り当てとして使用されます。 net.ipv4.ip_local_port_range = "30000 65535" === TCP/IP スタックの強化 === IPv4 プロトコルのカーネルのネットワークセキュリティオプションを強化するためのパラメータセットと、同等のものが存在する関連する IPv6 パラメータを次に示します。 システムを [[ルーター]] として使用するなど、一部のユースケースでは、他のパラメータも有用な場合や必要な場合があります。 ==== TCP SYN cookie 保護==== SYN flood 攻撃からの保護に役立ちます {{ic|net.ipv4.tcp_max_syn_backlog}} に到達したときにだけ起動します。詳細については、 [https://cateee.net/lkddb/web-lkddb/SYN_COOKIES.html] を参照してください。{{Pkg|linux}} 5.10 以降では、デフォルトで設定されています。 net.ipv 4.tcp_syncookies = 1 ==== TCP rfc1337 ==== {{Accuracy|これは TCP 標準の一部ではないようですか?説明が正確でない可能性があります。[https://serverfault.com/questions/787624/why-isnt-net-ipv4-tcp-rfc1337-enabled-by-default]|section=net.ipv4.tcp_rfc1337}} tcp time-wait assassination hazard から保護し、time-wait 状態のソケットの RST パケットを破棄します。Linux 以外では広くサポートされていませんが、RFC に準拠しています。 net.ipv4.tcp_rfc1337 = 1 ==== リバースパスフィルタリング ==== リバースパスフィルタリングを有効にすると、カーネルはマシン上のすべてのインタフェースから受信したパケットのソース検証を行います。これにより、IP スプーフィング方式を使用して被害を与える攻撃者から保護できます。 カーネルのデフォルト値は {{ic|0}} (ソース検証なし) ですが、systemd は {{ic|/usr/lib/sysctl.d/50 default.conf}} を、{{ic|net.ipv 4.conf.all.rp_filter}} を {{ic|2}} (loose mode) [https://github.com/systemd/systemd/pull/10971] に設定して出荷します。 次に、リバースパスフィルタリングメカニズムを value {{ic|1}} (strict モード) に設定します。 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 {{ic|net.ipv4.conf.default.*}}、{{ic|net.ipv4.conf.''interface''.*}} および {{ic|net.ipv4.conf.all.*}} については、 [https://www.kernel.org/doc/html/latest/networking/ip-sysctl.html ip-sysctl.html] を参照してください。 ==== martian パケットをログに記録する ==== [[Wikipedia:Martian packet|martian packet]] は、Internet Assigned Numbers Authority (IANA) による特殊な使用のために予約されている送信元アドレスまたは宛先アドレスを指定する IP パケットです。詳細は、[[wikipedia:Reserved_IP_addresses|Reserved IP addresses]] を参照してください。 しばしば martian とルーティング不可能なパケットが危険な目的のために使われるかもしれません。さらなる検査のためにこれらのパケットをログに記録することは有用かもしれません [https://www.cyberciti.biz/faq/linux-log-suspicious-martian-packets-un-routable-source-addresses/] net.ipv4.conf.default.log_martians = 1 net.ipv4.conf.all.log_martians = 1 {{Note|これにより、ログが大量の情報でいっぱいになる可能性があります。テスト用にのみ有効にすることをお勧めします。}} ==== ICMP リダイレクトを無効にする ==== 背景は [https://askubuntu.com/questions/118273/what-are-icmp-redirects-and-should-they-be-blocked What are ICMP redirects? Should they be blocked?] です。 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 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 ルータ以外で ICMP リダイレクト送信をディセーブルにするには、次の手順を実行します。 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 === その他 === ==== 特権を持たないユーザが IPPROTO_ICMP ソケットを作成できるようにする ==== {{Out of date|{{ic|/usr/lib/sysctl.d/50 default.conf}} は、{{ic|net.ipv4.ping_group_range}} を {{ic|0 2147483647}} に設定します。}} IPPROTO_ICMP ({{man|7|icmp}}) ソケットタイプを使用すると、{{man|7|raw}} ソケット (CAP_NET_RAW [[ケイパビリティ]] または SUID ビットを適切な特権所有者で開く必要のある操作) を開くことなく、 ICMP_ECHO メッセージを送信し、対応する ICMP_ECHOREPLY メッセージを受信できるようになります。これらの ICMP_ECHO メッセージはアプリケーションによって送信されるため、IPPROTO_ICMP ソケットは ICMP エコーソケットとは別に [[ping]] ソケットとも呼ばれます。 {{ic|ping_group_range}} は、ユーザが IPPROTO_ICMP ソケットを作成できるグループの GID 範囲を決定します。さらに、 CAP_NET_RAW 機能の所有者も IPPROTO_ICMP ソケットを作成することができます。 デフォルトでは、この範囲は {{ic|1 0}}で、root 以外の誰も IPPROTO_ICMP ソケットを作成できないことを意味します。 この設定を利用するには、現在 raw ソケットを使っているプログラムは、代わりに IPPROTO_ICMP ソケットを使うように移植する必要があります。 たとえば、QEMUはSLIRP (User-mode networking) に IPPROTO_ICMP を使用するため、QEMU を実行しているユーザーが IPPROTO_ICMP ソケットを作成できるようにすると、ゲストから ping を実行できるようになります。 GID 100 のグループのメンバーであるユーザーのみが IPPROTO_ICMP ソケットを作成できるようにするには、次のようにします。 net.ipv4.ping_group_range = 100 100 システム内のすべてのユーザーが IPPROTO_ICMP ソケットを作成できるようにするには、次のようにします。 net.ipv4.ping_group_range = 0 65535 == 仮想メモリ == Linux カーネルの [[Wikipedia:virtual memory|virtual memory]] サブシステムの動作や、ディスクへのダーティデータの書き出しを調整するための重要なパラメータがいくつかあります。詳細については、公式の [https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html Linux kernel documentation] を参照してください。例: * {{ic|1=vm.dirty_ratio = 10}} : 空きページと再利用可能ページを含む使用可能なメモリの合計に対する割合として、ディスク書き込みを生成するプロセスがダーティデータの書き込みを開始するページ数を含みます。 * {{ic|1=vm.dirty_background_ratio = 5}} : バックグラウンドカーネルフラッシャのスレッドがダーティデータの書き込みを開始するページ数を、空きページと再利用可能ページを含む使用可能なメモリの合計に対する割合として含みます。 パラメータのコメントに記載されているように、これらの値を設定する場合は RAM の合計容量を考慮する必要があります。たとえば、使用可能なメモリの代わりに、インストールされているシステム RAM を使用すると簡単です。 {{Warning| * 比率の値を大きくすると、パフォーマンスが向上し、データ損失のリスクも高くなります。 * この値を {{ic|0}} に設定すると、ディスクおよびスパイクで待機時間が長くなる可能性があります。 詳細については、https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ を参照してください。 }} * RAM の {{ic|vm.dirty_ratio}} を 10% に設定することは、RAM が例えば 1GB (10%は {{#expr: 1000/10 round 0}} MB) の場合、妥当な値です。しかし、マシンの RAM がもっと大きい場合、たとえば 16GB (10%は {{#expr: 16/10 round 1 }} GB) になると、回転中のディスクに数秒の書き戻しが行われるため、割合が不釣り合いになることがあります。この場合、より妥当な値は {{ic|3}} です (16GB の 3% は約 491MB です) 。 * 同様に、{{ic|vm.dirty_background_ratio}} を {{ic|5}} に設定することは、メモリ値が小さい場合は問題ありません、RAM 容量を考慮して調整してください。 === VFS キャッシュ === [https://www.kernel.org/doc/html/latest/filesystems/vfs.html virtual file system] (VFS) キャッシュパラメータの値を小さくすると、システムの応答性が向上する場合があります。 * {{ic|1=vm.vfs_cache_pressure = 50}} : ディレクトリや inode オブジェクトのキャッシュ (VFS キャッシュ) に使用されるメモリをカーネルがどれくらい回収するか制御する値です。デフォルト値の 100 から低くするとカーネルは VFS キャッシュをあまり回収しなくなります (0 に設定してはいけません。メモリ不足状態になる可能性があります)。 == MDADM == カーネルがソフトウェア raid デバイスの resync を実行するときは、システムに高負担をかけないように速度を制限しています。sysctl を使って速度制限を上げたり下げたりすることが可能です。 {{bc|1= # Set maximum and minimum speed of raid resyncing operations dev.raid.speed_limit_max = 10000 dev.raid.speed_limit_min = 1000 }} mdadm が {{ic|md_mod}} モジュールとしてコンパイルされている場合、上記の設定はモジュールがロードされた後にのみ使うことができます。{{ic|/etc/sysctl.d}} を使って起動時に設定をロードする場合、{{ic|md_mod}} モジュールは {{ic|/etc/modules-load.d}} で事前にロードすることができます。 == トラブルシューティング == === 定期的にシステムがフリーズする === ダーティバイトを十分小さい値に設定 (例えば 4M): vm.dirty_background_bytes = 4194304 vm.dirty_bytes = 4194304 {{Note|{{ic|dirty_background_bytes}}および{{ic|dirty_bytes}} パラメータは、{{ic|dirty_background_ratio}} および {{ic|dirty_ratio}} ( [[sysctl#仮想メモリ]] を参照) に対応します。一度に指定できるパラメータは1つだけです。}} == 参照 == * {{man|8|sysctl}} と {{man|5|sysctl.conf}} * [https://www.kernel.org/doc/Documentation/sysctl/ /proc/sys/ の Linux カーネルドキュメント] * カーネルドキュメント: [https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt IP Sysctl] * [http://blog.gotux.net/code/config/sysctl/ SysCtl.conf Tweaked for Security and Cable Speed]{{Dead link|2015|12|14}} * [http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.html sysctl のカーネルネットワークパラメータ]
このページで使用されているテンプレート:
テンプレート:Accuracy
(
ソースを閲覧
)
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Lowercase title
(
ソースを閲覧
)
テンプレート:META Message
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Out of date
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
Sysctl
に戻る。
検索
検索
Sysctlのソースを表示
話題を追加