「Sysctl」の版間の差分
(同期) |
(同期) |
||
21行目: | 21行目: | ||
{{Note|カーネルドキュメントをインストールしている場合 ({{Pkg|linux-docs}})、sysctl 設定に関する詳細な情報が {{Ic|/usr/lib/modules/$(uname -r)/build/Documentation/sysctl/}} で読めます。sysctl 設定を変更する前にこれらを一読することが強く推奨されています。}} |
{{Note|カーネルドキュメントをインストールしている場合 ({{Pkg|linux-docs}})、sysctl 設定に関する詳細な情報が {{Ic|/usr/lib/modules/$(uname -r)/build/Documentation/sysctl/}} で読めます。sysctl 設定を変更する前にこれらを一読することが強く推奨されています。}} |
||
− | 設定の変更はファイルの操作によるか {{Ic|sysctl}} ユーティリティを使って行います。例えば、一時的に[[ |
+ | 設定の変更はファイルの操作によるか {{Ic|sysctl}} ユーティリティを使って行います。例えば、一時的に[[キーボードショートカット|マジック SysRq キー]]を有効にするには: |
# sysctl kernel.sysrq=1 |
# sysctl kernel.sysrq=1 |
||
52行目: | 52行目: | ||
ユースケースによって、例えば[[ルーター]]として使用するシステムで、他のパラメータが役に立ったり必要になることもあります。 |
ユースケースによって、例えば[[ルーター]]として使用するシステムで、他のパラメータが役に立ったり必要になることもあります。 |
||
+ | {{hc|/etc/sysctl.d/51-net.conf|2= |
||
− | {{bc|1= |
||
#### ipv4 networking and equivalent ipv6 parameters #### |
#### ipv4 networking and equivalent ipv6 parameters #### |
||
65行目: | 65行目: | ||
net.ipv4.tcp_rfc1337 = 1 |
net.ipv4.tcp_rfc1337 = 1 |
||
− | ## sets the kernels reverse path filtering mechanism to value 1(on) |
+ | ## sets the kernels reverse path filtering mechanism to value 1 (on) |
## will do source validation of the packet's recieved from all the interfaces on the machine |
## will do source validation of the packet's recieved from all the interfaces on the machine |
||
## protects from attackers that are using ip spoofing methods to do harm |
## protects from attackers that are using ip spoofing methods to do harm |
||
+ | net.ipv4.conf.default.rp_filter = 1 |
||
net.ipv4.conf.all.rp_filter = 1 |
net.ipv4.conf.all.rp_filter = 1 |
||
− | net.ipv6.conf.all.rp_filter = 1 |
||
## tcp timestamps |
## tcp timestamps |
||
80行目: | 80行目: | ||
## log martian packets |
## log martian packets |
||
+ | net.ipv4.conf.default.log_martians = 1 |
||
net.ipv4.conf.all.log_martians = 1 |
net.ipv4.conf.all.log_martians = 1 |
||
89行目: | 90行目: | ||
## send redirects (not a router, disable it) |
## send redirects (not a router, disable it) |
||
+ | net.ipv4.conf.default.send_redirects = 0 |
||
net.ipv4.conf.all.send_redirects = 0 |
net.ipv4.conf.all.send_redirects = 0 |
||
## ICMP routing redirects (only secure) |
## ICMP routing redirects (only secure) |
||
+ | #net.ipv4.conf.default.secure_redirects = 1 (default) |
||
#net.ipv4.conf.all.secure_redirects = 1 (default) |
#net.ipv4.conf.all.secure_redirects = 1 (default) |
||
net.ipv4.conf.default.accept_redirects=0 |
net.ipv4.conf.default.accept_redirects=0 |
||
101行目: | 104行目: | ||
== 仮想メモリ == |
== 仮想メモリ == |
||
− | Linux カーネルの仮想メモリ (VM) サブシステムの制御やダーティデータのディスクへの書き出しを調整するパラメータがいくつか存在します。詳しくは [https://www.kernel.org/doc/Documentation/sysctl/vm.txt Linux カーネルドキュメント]を見て |
+ | Linux カーネルの仮想メモリ (VM) サブシステムの制御やダーティデータのディスクへの書き出しを調整するパラメータがいくつか存在します。詳しくは [https://www.kernel.org/doc/Documentation/sysctl/vm.txt Linux カーネルドキュメント]を見てください。例えば以下のようなパラメータが存在します: |
+ | * {{ic|1=vm.dirty_ratio = 3}} |
||
− | {{bc|1= |
||
+ | : システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるディスク書き込みを発生させるページ数。 |
||
− | # Contains, as a percentage of total system memory, the number of pages at which |
||
− | # a process which is generating disk writes will start writing out dirty data. |
||
− | vm.dirty_ratio = 3 |
||
+ | * {{ic|1=vm.dirty_background_ratio = 2}} |
||
− | # Contains, as a percentage of total system memory, the number of pages at which |
||
+ | : システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるバックグラウンドカーネルのフラッシュスレッドのページ数。 |
||
− | # the background kernel flusher threads will start writing out dirty data. |
||
+ | |||
− | vm.dirty_background_ratio = 2 |
||
+ | 上記の値を設定する際はメモリの合計量を考慮する必要があります。例えば、マシンに搭載されているシステムメモリとして話を簡単にすると以下のようになります: |
||
− | }} |
||
+ | * 搭載されているメモリが 1GB の場合は {{ic|vm.dirty_ratio}} の設定をメモリの 10% に設定するというコンセンサスが合理的です (メモリの 10% はつまり {{#expr: 1000/10 round 0}} MB になります)。ただしマシンにもっと大量にメモリを搭載している、例えば 16 GB もマシンに積んでいる場合 (その場合 10% は {{#expr: 16/10 round 1 }} GB となります)、磁気ディスクにライトバックするのに数秒近くもかかってしまうため適当な数字とは言えません。この場合、3 に設定するのが適当でしょう (16 GB の 3% は約 491 MB です)。 |
||
− | コメントで説明されているように、これらの値を設定する際は RAM の合計量を考慮する必要があります。 |
||
+ | * {{ic|vm.dirty_background_ratio}} も同じように、メモリが少ない時はデフォルトの 5 が丁度良いかもしれませんが、システムの合計メモリの量によって調整するべきです。 |
||
+ | 他にも以下のパラメータが存在します: |
||
− | * {{ic|vm.dirty_ratio}} のデフォルトは 10 です (RAM の 10%)。RAM が 1GB の半分のときは RAM の 10% というのがコンセンサスで (つまり 10% は 50 MB 以下) 磁気ディスクならば合理的な値です。ただし RAM が大きい、例えば 16 GB のときは (10% は 1.6 GB 以下) 磁気ディスクにライトバックするのに数秒かかるのであまり良くありません。この場合に合理的な値は 3 です (16*0.03 ~ 491 MB)。 |
||
+ | * {{ic|1=vm.vfs_cache_pressure = 60}} |
||
− | * {{ic|vm.dirty_background_ratio}} は同じように、メモリが少ない時はデフォルトの 5 (% の RAM) が丁度良いですが、システムの RAM の量によって調整するべきです。 |
||
+ | : ディレクトリや inode オブジェクトのキャッシュ (VFS キャッシュ) に使用されるメモリをカーネルがどれくらい回収するか制御する値です。デフォルト値の 100 から低くするとカーネルは VFS キャッシュをあまり回収しなくなります (0 に設定してはいけません。メモリ不足状態になる可能性があります)。 |
||
== MDADM == |
== MDADM == |
||
148行目: | 151行目: | ||
== 参照 == |
== 参照 == |
||
− | * |
+ | * {{man|8|sysctl}} と {{man|5|sysctl.conf}} |
− | * Linux カーネルドキュメント |
+ | * [https://www.kernel.org/doc/Documentation/sysctl/ /proc/sys/ の Linux カーネルドキュメント] |
* カーネルドキュメント: [https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt IP Sysctl] |
* カーネルドキュメント: [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 のカーネルネットワークパラメータ] |
2017年2月19日 (日) 02:07時点における版
sysctl は稼働中のカーネルパラメータを確認・変更するためのツールです (公式リポジトリの procps-ng パッケージ)。sysctl は procfs (/proc/
の仮想プロセスファイルシステム) で実装されています。
目次
設定
sysctl のプリロード/設定ファイルは /etc/sysctl.d/99-sysctl.conf
に作成することができます。systemd では、/etc/sysctl.d/
と /usr/lib/sysctl.d/
はカーネルの sysctl パラメータにどちらも使えるディレクトリです。名前と元のディレクトリによって処理される順番が決まります。最後のパラメータによって前の方のパラメータが置き換えられるので順番は重要です。例えば、/usr/lib/sysctl.d/50-default.conf
に書かれたパラメータは /etc/sysctl.d/50-default.conf
や両方のディレクトリよりも後に処理される設定ファイルにある同じパラメータによって置き換えられます。
全ての設定ファイルを手動でロードするには、次を実行します:
# sysctl --system
適用される階層が出力されます。単一のパラメータファイルを指定してロードすることも可能です:
# sysctl -p filename.conf
詳しくは the new configuration files や systemd の sysctl.d man ページ を見て下さい。
利用可能なパラメータは /proc/sys/
以下に並んでいます。例えば、kernel.sysrq
パラメータはファイルシステム上の /proc/sys/kernel/sysrq
ファイルにあたります。sysctl -a
コマンドを使うことで現在利用可能な値を全て表示することができます。
設定の変更はファイルの操作によるか sysctl
ユーティリティを使って行います。例えば、一時的にマジック SysRq キーを有効にするには:
# sysctl kernel.sysrq=1
もしくは:
# echo "1" > /proc/sys/kernel/sysrq
再起動後も変更を維持させるには、/etc/sysctl.d/99-sysctl.conf
や他の /etc/sysctl.d/
内の適用されるパラメータファイルに適切な行を追加・編集してください。
セキュリティ
セキュリティ#カーネルの防御を見て下さい。
ネットワーク
パフォーマンスを向上させる
# reuse/recycle time-wait sockets net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1
TCP/IP スタックの防御
以下では IPv4 プロトコルでカーネルのネットワークセキュリティを厳しくするオプションのパラメータセットを示しています。同一の効果がある IPv6 パラメータも存在します。
ユースケースによって、例えばルーターとして使用するシステムで、他のパラメータが役に立ったり必要になることもあります。
/etc/sysctl.d/51-net.conf
#### ipv4 networking and equivalent ipv6 parameters #### ## TCP SYN cookie protection (default) ## helps protect against SYN flood attacks ## only kicks in when net.ipv4.tcp_max_syn_backlog is reached net.ipv4.tcp_syncookies = 1 ## protect against tcp time-wait assassination hazards ## drop RST packets for sockets in the time-wait state ## (not widely supported outside of linux, but conforms to RFC) net.ipv4.tcp_rfc1337 = 1 ## sets the kernels reverse path filtering mechanism to value 1 (on) ## will do source validation of the packet's recieved from all the interfaces on the machine ## protects from attackers that are using ip spoofing methods to do harm net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 ## tcp timestamps ## + protect against wrapping sequence numbers (at gigabit speeds) ## + round trip time calculation implemented in TCP ## - causes extra overhead and allows uptime detection by scanners like nmap ## enable @ gigabit speeds net.ipv4.tcp_timestamps = 0 #net.ipv4.tcp_timestamps = 1 ## log martian packets net.ipv4.conf.default.log_martians = 1 net.ipv4.conf.all.log_martians = 1 ## ignore echo broadcast requests to prevent being part of smurf attacks (default) net.ipv4.icmp_echo_ignore_broadcasts = 1 ## ignore bogus icmp errors (default) net.ipv4.icmp_ignore_bogus_error_responses = 1 ## send redirects (not a router, disable it) net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.send_redirects = 0 ## ICMP routing redirects (only secure) #net.ipv4.conf.default.secure_redirects = 1 (default) #net.ipv4.conf.all.secure_redirects = 1 (default) net.ipv4.conf.default.accept_redirects=0 net.ipv4.conf.all.accept_redirects=0 net.ipv6.conf.default.accept_redirects=0 net.ipv6.conf.all.accept_redirects=0
仮想メモリ
Linux カーネルの仮想メモリ (VM) サブシステムの制御やダーティデータのディスクへの書き出しを調整するパラメータがいくつか存在します。詳しくは Linux カーネルドキュメントを見てください。例えば以下のようなパラメータが存在します:
vm.dirty_ratio = 3
- システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるディスク書き込みを発生させるページ数。
vm.dirty_background_ratio = 2
- システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるバックグラウンドカーネルのフラッシュスレッドのページ数。
上記の値を設定する際はメモリの合計量を考慮する必要があります。例えば、マシンに搭載されているシステムメモリとして話を簡単にすると以下のようになります:
- 搭載されているメモリが 1GB の場合は
vm.dirty_ratio
の設定をメモリの 10% に設定するというコンセンサスが合理的です (メモリの 10% はつまり 100 MB になります)。ただしマシンにもっと大量にメモリを搭載している、例えば 16 GB もマシンに積んでいる場合 (その場合 10% は 1.6 GB となります)、磁気ディスクにライトバックするのに数秒近くもかかってしまうため適当な数字とは言えません。この場合、3 に設定するのが適当でしょう (16 GB の 3% は約 491 MB です)。 vm.dirty_background_ratio
も同じように、メモリが少ない時はデフォルトの 5 が丁度良いかもしれませんが、システムの合計メモリの量によって調整するべきです。
他にも以下のパラメータが存在します:
vm.vfs_cache_pressure = 60
- ディレクトリや inode オブジェクトのキャッシュ (VFS キャッシュ) に使用されるメモリをカーネルがどれくらい回収するか制御する値です。デフォルト値の 100 から低くするとカーネルは VFS キャッシュをあまり回収しなくなります (0 に設定してはいけません。メモリ不足状態になる可能性があります)。
MDADM
カーネルがソフトウェア raid デバイスの resync を実行するときは、システムに高負担をかけないように速度を制限しています。sysctl を使って速度制限を上げたり下げたりすることが可能です。
# Set maximum and minimum speed of raid resyncing operations dev.raid.speed_limit_max = 10000 dev.raid.speed_limit_min = 1000
mdadm が md_mod
モジュールとしてコンパイルされている場合、上記の設定はモジュールがロードされた後にのみ使うことができます。/etc/sysctl.d
を使って起動時に設定をロードする場合、md_mod
モジュールは /etc/modules-load.d
で事前にロードすることができます。
トラブルシューティング
定期的にシステムがフリーズする
ダーティバイトを十分小さい値に設定 (例えば 4M):
vm.dirty_background_bytes = 4194304 vm.dirty_bytes = 4194304
kernel.io_delay_type
を変更してみる (x86 のみ):
- 0 - IO_DELAY_TYPE_0X80
- 1 - IO_DELAY_TYPE_0XED
- 2 - IO_DELAY_TYPE_UDELAY
- 3 - IO_DELAY_TYPE_NONE