Ale*_*oux 5 linux iptables logging filter accounting
标题说明了一切。
如何使用 Linux 下的 iptables 记录连接到服务器的所有 IP?作为一个小细节,我想在日志 PER DAY PER IP 中只有一个条目。
谢谢 :)
编辑:
我将它缩小到为每个新会话记录的 5 个数据包,这很奇怪,因为我使用--hashlimit 1 --haslimit-burst 1,我怀疑默认为 5 的 --m limit 在那里起作用。问题是,如果我将 --m limit 设置为 1,则只为所有 IP 记录 1 个条目,而不是每个 IP 记录一个条目。
我想这样做的原因也是为了尽可能避免日志增长过快,因为这将是一个相当不受管理的盒子。
EDIT2: 这是我目前的尝试,采用 iptables-restore 格式:(为了便于阅读,分为几行)
-A FORWARD -d 10.x.x.x -p tcp --dport 443 -m state --state NEW
-m hashlimit --hashlimit-upto 1/min --hashlimit-burst 1
--hashlimit-mode srcip --hashlimit-name denied-client
-j LOG --log-prefix "iptables (denied client): "
Run Code Online (Sandbox Code Playgroud)
我会尝试这个:
# IP address entry older than one day
iptables -A ... -m recent --name mydaily ! --rcheck ! --seconds 86400 -j logandset
# IP address never seen before
iptables -A ... -m recent --name mydaily ! --rcheck -j logandset
# Custom chain for logging and refreshing
iptables -N logandset
iptables -A logandset -j LOG
iptables -A logandset -m recent --name mydaily --set
Run Code Online (Sandbox Code Playgroud)
因此,您的列表mydaily
将跟踪最后一次看到的 IP 地址,如果以前从未见过,或者最后一次看到的时间超过一天,则将记录该数据包,并更新该 IP 地址的列表条目。
您可能应该将 的值设置ip_list_tot
为更高的值mydaily
,如 iptables 联机帮助页中所述(在您的情况下为 /proc/net/xt_recent/mydaily)。