标题说明了一切。
我如何在Linux下使用iptableslogin所有连接到服务器的IP? 作为一个小细节,我想只有一个条目每日每个IP的日志。
谢谢 :)
编辑:
我把它缩小到每个新会话logging5个数据包,这是奇怪的,因为我使用–hashlimit 1 –haslimit突发1 ,我怀疑 – m限制哪个默认为5在那里扮演一个angular色。 麻烦的是,如果我将-m限制为1,则只有1个条目被logging为ALL IP而不是每个IP。
我想这样做的原因也是为了尽可能避免日志增长过快,因为这将是一个非常pipe理的框。
编辑2:这是我目前的尝试,在一个iptables恢复格式:(在几行为便于阅读)
-A FORWARD -d 10.xxx -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): "
我会试试这个:
# 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
因此,您的列表mydaily将跟踪最后看到的IP地址,如果它以前从未见过,或者如果最后看到的是比一天更早,数据包将被logging,并且该IP地址的列表条目将被更新。
你应该设置ip_list_tot为更高的值为mydaily ,如iptables的mydaily (在你的情况/ proc / net / xt_recent / mydaily)解释。
我正在采取一个疯狂的(未经testing的)破解@但是这样的:
iptables -I INPUT -m conntrack --ctstate NEW -j LOG --log-prefix 'IPT/New Connection'
iptables会向每个新连接的内核日志发送一条消息。 您将需要做类似的事情
grep 'IPT/New Connection' /var/log/kern.log | | wc -l
这会给你一个计数。 各种各样的舞蹈w / awk / perl / etc会让你把它分割成IP。
我没有办法说服IPtables在每天的IP地址只吐出一个IP地址。 如果您的系统日志能够通过regexp过滤消息,则可以捕获这些消息并将其汇集到一个单独的日志文件中。 在一天结束时,计算所有计数,并将消息重新插入到主系统日志条目中。
logging一切,然后发布过程来提取你所需要的东西会简单得多吗? 在每个阶段使用适当的东西,而不是试图让某些东西适合它不属于的地方。
我会用一个补丁版本的ulogd与SQL后端。
诀窍是以一种可以让数据库处理IP地址冗余的方式来修补INSERT SQL查询,并将唯一的新logging插入到唯一IP地址的日志中。