我想知道我当前的规则消耗了CPU
多少。memory
iptables
我尝试查看ps
和htop
,但即使显示了内核线程,也没有看到任何与iptables
.
我正在使用conntrack
具有以下特定于模块的设置的模块:xt_recent.ip_pkt_list_tot=1
xt_recent.ip_list_tot=4096
。我认为4096
是相当高的。然后,在我的 iptables 配置中,我使用两种阻止列表:BLACKLIST
和PORTSCAN
。
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -s 1.2.3.4/32 -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name BLACKLIST --seconds 14400 --update -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name PORTSCAN --seconds 3600 --update -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 5060 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 5061 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 5062:5100 -j ACCEPT
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name PORTSCAN --set -j DROP
-A INPUT -i eth0 -j DROP
-A INPUT -j DROP
我在服务器上遇到网络问题,我怀疑我的iptables
规则可能会发挥作用。例如:
- 我的
ssh
会议经常被取消。 - Ping 报告丢包率为 0.2%
当我在允许的端口上连接时,即有许多项目时,与空时相比,
5060
它花费的时间明显更长PORTSCAN
解决此问题的最佳方法是什么?
- 我可以对 iptables 规则进行一些优化吗?
- 如何查看我的 CPU 消耗量是多少
iptables
?
答案1
Linux内核的进程:
许多内核函数(例如 Iptables)在内核级别作为 kworker 任务进行处理,它们在任务管理器(例如 top)上可见。正如评论中提到的,您可以通过比较加载规则和不加载规则的总资源使用情况来计算 CPU 和内存使用情况iptables
。请注意,ipset
即使您不在规则中使用它,它也已经消耗了内存。
科沃克是内核工作线程的占位进程,它执行内核的大部分实际处理,特别是在存在中断、计时器、I/O 等的情况下。这些通常对应于任何分配的“系统”时间的绝大多数到正在运行的进程。它不是可以以任何方式从系统中安全删除的东西,并且与桌面应用程序完全无关(除非这些程序进行系统调用,这可能需要内核执行某些操作)。也kworker
意味着 Linux 内核进程正在做“工作”(处理系统调用)。您的进程列表中可以有多个进程:kworker/0:1
是第一个 CPU 核心上的一个,kworker/1:1
第二个 CPU 核心上的一个,等等。所有内核的进程都作为以下进程的子进程启动线程内核空间上的进程。
父进程:进程 ID 为kthreadd
2,可以通过以下方式列出该内核工作进程:
pstree 2 -l -p
# or
ps --ppid 2 -u
# or
ps --ppid 2 -o pid,user,%mem,command,time,etime,cpu,pcpu,nice,pcpu,vsz
最后一个可以与 bash + cron 脚本一起使用来观察变化...或者用于直接定时分析,perf
可以使用 ( apt-get install linux-tools-common linux-tools-3.11.0-15-generic
)
# Record 10 seconds of backtraces on all your CPUs:
sudo perf record -g -a sleep 10
# Analyse your recording:
sudo perf report
使用以下命令浏览调用图←,→,↑,↓和Enter。