在 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
在启动时运行。