sysctl 重新定义值的正确位置在哪里?
我有:
> uname -a
Linux note 3.1.0-1-amd64 #1 SMP Tue Jan 10 05:01:58 UTC 2012 x86_64 GNU/Linux
> cat /etc/debian_version
wheezy/sid
> tail -n 2 /etc/sysctl.conf
#
net.ipv6.bindv6only=0
Run Code Online (Sandbox Code Playgroud)
但是每次重启后 net.ipv6.bindv6only 还是 1
我们看到以下情况:
[root@primary data]# netstat -s | grep buffer ; sleep 10 ; netstat -s | grep buffer
20560 packets pruned from receive queue because of socket buffer overrun
997586 packets collapsed in receive queue due to low socket buffer
20587 packets pruned from receive queue because of socket buffer overrun
998646 packets collapsed in receive queue due to low socket buffer
[root@primary data]#
Run Code Online (Sandbox Code Playgroud)
请记住,以上是一个刚重新启动的盒子......大约 1 小时的正常运行时间。我们最近有一个盒子已经过期了 2 个月,这些计数器将达到数百万(XXX 百万)。
我们尝试过更改各种 sysctl 变量...
以下是我认为相关的 sysctl 变量:
net.core.rmem_max = 16777216
net.core.wmem_max = …Run Code Online (Sandbox Code Playgroud) 使用 Lubuntu 18.10 宇宙墨鱼
大多数命令都会坚持下去。然而,Lynis 多次证明了四个 sysctl 参数在重新启动时不会保留。sysctl -p 在系统启动后成功应用它们。
fs.suid_dumpable=0 (still haven't figured this out)
net.ipv4.conf.all.rp_filter=1 (Wireguard VPN overruled this; see source 1 below)
net.ipv4.conf.all.log_martians=1 (/etc/ufw/sysctl.conf overruled this)
net.ipv4.conf.default.log_martians=1 (/etc/ufw/sysctl.conf overruled this)
Run Code Online (Sandbox Code Playgroud)
我最关心的是net.ipv4.conf.all.rp_filter,它应该设置为 1,但设置为 0...使机器容易受到 ip 欺骗。如何确保这些在启动时设置正确?注意更新:此功能会被 Wireguard(可能是 openvpn/其他)等 VPN 自动禁用,因此不会丢弃合法数据包,有关详细信息,请参阅上面的源代码。禁用 Wireguard VPN sysctl boot 命令会导致 fp_filter=1 按预期工作,可能会导致 Wireguard 出现问题。Lynis 误报,我将禁用此功能。警告在启动后禁用 Wireguard 不会(到目前为止)将其恢复到安全设置。sysctl -p必需的。
所有 sysctl.conf 文件的位置find / -name '*sysctl*.conf'
/usr/share/doc/procps/examples/sysctl.conf
/snap/core/6405/etc/sysctl.conf
/snap/core/6405/etc/sysctl.d/99-sysctl.conf
/snap/core18/719/etc/sysctl.d/99-sysctl.conf
/etc/sysctl.conf
/etc/ufw/sysctl.conf
/etc/sysctl.d/99-sysctl.conf
Run Code Online (Sandbox Code Playgroud) 在运行后在 VPS 中全新安装 CenotOS 6 时,sysctl -p /etc/sysctl.conf我收到以下错误:
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
Run Code Online (Sandbox Code Playgroud)
解决此错误的起点是什么?
作为 CentOs 6.4 服务器的 root,我在应用程序中收到此错误:
Fri May 16 01:45:23 2014 Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以 root 身份运行命令时,我的权限被拒绝。
# echo 100000 > /proc/sys/fs/inotify/max_user_watches
-bash: /proc/sys/fs/inotify/max_user_watches: Permission denied
Run Code Online (Sandbox Code Playgroud)
即使我编辑了 /etc/sysctl.conf 我的权限也被拒绝:
# echo fs.inotify.max_user_watches=524288 | tee -a /etc/sysctl.conf
# sysctl -p
error: permission denied on key 'fs.inotify.max_user_watches
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我正在运行带有 i2p 和 Tor 的 ARM 路由器 - Netgear R7000。当然,我已经向它添加了完整的 512 MB 的 SWAP 以防止 OOM,我知道它可能会减慢系统速度……但是我仍然可以从大量免费的 SWAP 开始获得 OOM 杀手,并杀死 Tor!更有趣的是,在杀死tor之后,系统似乎可以无限期地运行……但似乎仍然无法交换tor。我什至试图关闭过度使用,但根本没有帮助。
请参阅下面的 dmesg 日志
resetbutton invoked oom-killer: gfp_mask=0x2000d0, order=0, oom_score_adj=0
CPU: 0 PID: 1500 Comm: resetbutton Tainted: P 3.10.79 #381
Backtrace:
[<c0015cb8>] (dump_backtrace+0x0/0x118) from [<c0015ec0>] (show_stack+0x18/0x1c)
r6:c7a4cdc0 r5:00000000 r4:c6818000 r3:00000000
[<c0015ea8>] (show_stack+0x0/0x1c) from [<c012e5c0>] (dump_stack+0x24/0x28)
[<c012e59c>] (dump_stack+0x0/0x28) from [<c007c5cc>] (dump_header.isra.13+0x84/0x194)
[<c007c548>] (dump_header.isra.13+0x0/0x194) from [<c007c958>] (oom_kill_process+0x90/0x3e8)
[<c007c8c8>] (oom_kill_process+0x0/0x3e8) from [<c007d17c>] (out_of_memory+0x2c0/0x304)
[<c007cebc>] (out_of_memory+0x0/0x304) from [<c007fcbc>] (__alloc_pages_nodemask+0x5b0/0x694)
[<c007f70c>] (__alloc_pages_nodemask+0x0/0x694) from [<c00a2464>] (cache_alloc_refill+0x2c8/0x600) …Run Code Online (Sandbox Code Playgroud) tcp_rfc1337 设置似乎有解决 TIME-WAIT 暗杀的方法。
第一个问题是新连接中可能会错误地接受旧的重复数据,导致发送的数据损坏。
第二个问题是连接可能会变得不同步并进入 ACK 循环,因为旧的重复数据包进入新连接,这将变得不同步。
第三个也是最后一个问题是旧的重复数据包可能会错误地进入新建立的连接并杀死新连接。
从我读到的内容来看,为了解决问题,设置的作用是在套接字处于 TIME-WAIT 状态时忽略 RST(重置)数据包。
那么,为什么默认情况下不启用此设置?使用这个有什么缺点?
当我研究如何阻止 SYN 泛洪攻击时,我实际上了解了这个变量。您认为此设置有助于阻止它们吗?
sysctl.conf 应该在引导期间在什么时候被读取,为什么它可能不会运行?我有以下设置,在我重新启动时没有应用:
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-filter-pppoe-tagged = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
fs.nfs.nlm_udpport = 32768
fs.nfs.nlm_tcpport = 32768
Run Code Online (Sandbox Code Playgroud)
第一部分用于 KVM 桥接,第二部分是在已知端口上运行 NFS 锁管理器。但是,启动后,这些值并没有生效。如果我跑sysctl -p,那么他们会。
这不会是一个大问题,除了我无法弄清楚如何在不重新启动的情况下重新启动锁管理器。我真的很想知道为什么 sysctl.conf 在启动时不起作用,但我只能重新启动锁管理器。
这是在 Ubuntu 服务器 10.04.2,内核 2.6.32-31-server 上。我知道有些守护进程会检查他们的配置文件的权限,如果他们过于宽松就拒绝工作,但 sysctl.conf 是 644 root:root,我很确定这是默认值。
我对于 shmmax 中的最大值应该设置多少有一个模糊性。
查看我的系统统计数据后,它显示以下内容:
#cat /proc/sys/kernel/shmmax
18446744073692774399
#ipcs -l
------ Messages Limits --------
max queues system wide = 3675
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250 …Run Code Online (Sandbox Code Playgroud) net.core.netdev_max_backlog:
当接口接收数据包的速度快于内核处理数据包的速度时,在 INPUT 端排队的最大数据包数。
net.ipv4.tcp_max_syn_backlog:
尚未收到连接客户端确认的已记住连接请求的最大数量。
但我无法完全理解这两个值之间的区别和关系。那么应该net.core.netdev_max_backlog更大,net.ipv4.tcp_max_syn_backlog还是相同,还是更低?