iptables 规则顾问脚本

iptables 规则顾问脚本

有一个服务器没有任何iptables防御:ACCEPT all..

该服务器上可能有自定义应用程序。

如果我们需要用严格的 iptables 规则来强化这个服务器(所以拒绝所有,只允许应用程序需要的东西),我们必须手动找出哪个应用程序使用哪个,dst/src port/protocol然后我们必须为它编写 iptables 规则他们..

问题:是否有任何脚本可以帮助从正在运行的机器收集这些信息? (来自日志?) - 并自动生成 iptables 规则?

就像有audit2allowSELinux.只为iptables

机器不能有任何停电!

例如:“MAGIC”脚本应该在计算机上运行一周/一个月,收集信息,然后一周/一个月后,该脚本将能够生成我们可以使用的 iptables 规则文件。

很多人都可能遇到这种情况(如何强化 iptables 的服务器)。如果有一个脚本/解决方案可以做到这一点那就太好了:\

答案1

手动进行

sudo ss -tuanp

或者

sudo netstat -tuanp

解释:

-t - show tcp sockets
-u - show udp sockets
-a - show all sockets
-n - show numeric, don't resolve 
-p - show process name

答案2

在机器上运行tcpdump一周左右以捕获平均流量。然后您可以稍后使用wireshark浏览流量以查看正在使用哪些端口。

执行此操作的命令是tcpdump -i <interface> -s 65535 -w <some-file>

然后,您可以将其映射回来,netstat -tuanp以查看哪些 PID/应用程序正在使用哪些端口。

理论上这可以编写脚本。

答案3

您可以从一个非常基本的模板开始,例如 -https://gist.github.com/jirutka/3742890,它只允许 ssh 和 ping,并手动添加任何其他内容。

一个快速脚本 hack,为您的应用程序生成 iptables 规则,监听公共接口 (0.0.0.0) /tcp

netstat -lnpt | egrep '0.0.0.0:[0-9]+' | awk '{print $4,$7}' | \
sed -E -e 's/0.0.0.0://g' -e 's|[0-9]+/||' | \
awk '{printf ("iptables -A INPUT -p tcp --dport %5d --syn -m conntrack --ctstate NEW -m comment %s \n", $1,$2) }'

您还可以使用iptables -I INPUT <number>将规则注入特定位置,您可以使用 列出iptables -nvL --line-numbers INPUT

答案4

使用 iptable 规则记录新连接,这也会记录 udp。

iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New inbound connection: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New outbound connection: "

您可以指定不同的方式--log-level 将日志保存在 /var/log/messages 之外的其他文件中(您必须配置 syslog 守护进程)。

我认为您应该阅读主要应用程序日志,因为某些服务器有非常周期性的活动,例如中午、周末、月末(季度、年份),这样您就不会错过服务器的重要网络活动。

由于服务器至关重要,因此在一个漂亮的电子表格上制作服务器的网络流量矩阵(ip 源、ip 目标、协议、端口、应用程序),这将帮助您构建规则。

相关内容