
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?
- Как узнать, какая часть ресурсов моего ЦП потребляется
iptables
?
решение1
Процесс ядра Linux:
Многие функции ядра, такие как Iptables, обрабатываются на уровне ядра как задачи kworker, они видны в диспетчерах задач, таких как top. Как упоминалось в комментариях, вы можете вычислить использование ЦП и памяти, сравнив общее использование ресурсов с загрузкой правил и без нее iptables
. Обратите внимание, что это ipset
уже потребляет память, даже если вы не используете ее в правиле.
Кворкерэто процесс-заполнитель для рабочих потоков ядра, которые выполняют большую часть фактической обработки для ядра, особенно в случаях, когда есть прерывания, таймеры, ввод-вывод и т. д. Они обычно соответствуют подавляющему большинству любого выделенного "системного" времени для запущенных процессов. Это не то, что можно безопасно удалить из системы каким-либо образом, и оно совершенно не связано с приложениями рабочего стола (за исключением случаев, когда эти программы выполняют системные вызовы, которые могут потребовать от ядра что-то сделать). Также kworker
означает процесс ядра Linux, выполняющий "работу" (обработку системных вызовов). Вы можете иметь несколько из них в своем списке процессов: kworker/0:1
один на первом ядре ЦП, kworker/1:1
один на втором и т. д. Все процессы ядра запускаются как дочерниеkthreaddпроцесс в пространстве ядра.
Родительский процесс:Идентификатор процесса 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.