Linux:监控:iptables

Linux:监控:iptables

在 Linux 下,至少在 CentOS 下,我认为在 Debian 下,守护进程中有一个“iptables”。但它实际上是一个加载和保存它们的脚本,它不会启动进程,也不会写入 pidfile。

如何使用 monit 检查 iptables 是否正常运行?

答案1

对于 CentOS 6 及更早版本,您使用 是正确的iptables。CentOS 7 使用firewalld

要使用 Monit 进行监控,您可以使用程序状态测试。有几种方法可以确定 的状态iptables

在 CentOS 6 中获取状态的一种方法iptables是使用

$ sudo /etc/init.d/iptables status

如果iptables没有运行,您将收到以下响应:

$ sudo /etc/init.d/iptables status
iptables: Firewall is not running.

如果iptables正在运行它将看起来类似于此:

$ sudo /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

编写一个脚本来检查状态并查找Firewall is not running并提供脚本的返回代码,然后用于monit运行该脚本。

我没有测试过但它看起来像这样:

check program iptables with path "/etc/init.d/iptables status"
    if status != 0 then alert

答案2

monit因此请密切关注kenlukas 解决方案的更新版本是否iptables正在运行,如下所示:

check program iptables with path "/usr/bin/systemctl status iptables"
    start program = "/usr/bin/systemctl start iptables" with timeout 60 seconds
    stop program  = "/usr/bin/systemctl stop iptables"
    if status != 0 then start
    if status != 0 for 2 cycles then alert

check program ip6tables with path "/usr/bin/systemctl status ip6tables"
    start program = "/usr/bin/systemctl start ip6tables" with timeout 60 seconds
    stop program  = "/usr/bin/systemctl stop ip6tables"
    if status != 0 then start
    if status != 0 for 2 cycles then alert

笔记这不适用于 Ubuntu 22.04,因为它iptables在那里不能作为服务运行。

笔记这可能会报告错误的“未运行”事件,因为iptables“不是持久服务”(https://askubuntu.com/a/1332434/168515)。它可能仍然是一个很好的指标,表明是否iptables-restore在启动时运行。

相关内容