让 iptables 在新连接尝试时运行命令/脚本

Yel*_*ave 2 iptables

iptables 如何在新的连接尝试中运行命令或脚本?

要求:

到(服务器接口 eth0)的外部数据包 --->(服务器接口 eth0)输入表检测到端口 22 上收到的新数据包 --> iptables 运行命令或脚本

我认为,到目前为止,例如:

iptables -A INPUT -i eth0 -p tcp --dport 22 -s xxx.xxx.xxx.xxx/24 -d xxx.xxx.xxx.xxx/32 -m state --state NEW (then do something here like run a script or command (but how?) ) -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

进一步阅读一个类似的问题,有两个答案:

运行基于 IPTABLES 端口访问尝试的 shell 脚本

A.P*_*.P. 6

我认为iptables没有这个能力。我认为你最好的选择是:

  1. iptables( -j LOG --log-prefix "NEW_CONN_ATTEMPT ")设置特殊日志记录
  2. 监控日志 tail
  3. 找到匹配项时运行您的命令

对于 2 和 3,像这样的 oneliner 可以解决问题:

tail -f /var/log/firewall.log | awk '/NEW_CONN_ATTEMPT/ {system("/usr/local/bin/script.sh")}'
Run Code Online (Sandbox Code Playgroud)

  • 此外,可以为此设置 [`fail2ban`](http://www.fail2ban.org/wiki/index.php/Main_Page)。 (2认同)