Sysctl是一個功能強大的工具,用于在內核運行時動態地修改內核的參數,在這個命令的幫助下,可以修改內核參數,而無需重新編譯內核或重啟系統。
可以在/proc/sys目錄下找到可供修改的參數。因此,procfs(能夠通過文件系統與內核通信的文件系統模擬)對于“sysctl”是必需的。只有root用戶才能執行此命令。
使用sysctl命令修改內核參數
內核參數可以臨時或永久修改。內核參數的臨時修改如下:讀取當前內核的參數:
[root@localhost ~]# sysctl -a
使用-w臨時修改內核參數。例如,禁止其他設備ping本機:
[root@localhost ~]# sysctl -w net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_all = 1
值“ 0”代表“關”,值“ 1”代表“開”。這些更改是臨時的,重啟系統后重置參數。
永久修改內核參數
在/etc/sysctl.conf文件中添加參數和值,例如,禁止其他設備ping本機,修改sysctl.conf配置文件后,需要執行sysctl -p命令從文件/etc/sysctl.conf文件中加載sysctl設置。:
[root@localhost ~]# echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
幾個sysctl使用實例
控制數據包轉發
僅在充當網關的服務器上啟用IP數據包轉發。在其他服務器中,可以禁用此功能。
[root@localhost ~]# echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.ip_forward = 0
停用swap分區
在使用kubernetes環境的時候需要關掉swap分區,為了性能考慮。
[root@localhost ~]# echo "vm.swAppiness = 0" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.ip_forward = 0
vm.swappiness = 0
SYN防洪
防止SYN Flood攻擊,需要開啟此項。
[root@localhost ~]# echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.ip_forward = 0
vm.swappiness = 0
net.ipv4.tcp_syncookies = 1
允許系統打開的端口范圍
[root@localhost ~]# echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.ip_forward = 0
vm.swappiness = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_local_port_range = 1024 65000
總結
Sysctl是一個功能強大的工具,用于在內核運行時動態地修改內核的參數,在這個命令的幫助下,可以修改內核參數,而無需重新編譯內核或重啟系統。
https://www.linuxprobe.com/linux-sysctl-config.html