有一个服务器没有任何iptables防御:ACCEPT all..
该服务器上可能有自定义应用程序。
如果我们需要用严格的 iptables 规则来强化这个服务器(所以拒绝所有,只允许应用程序需要的东西),我们必须手动找出哪个应用程序使用哪个,dst/src
port/protocol
然后我们必须为它编写 iptables 规则他们..
问题:是否有任何脚本可以帮助从正在运行的机器收集这些信息? (来自日志?) - 并自动生成 iptables 规则?
就像有audit2allow
在SELinux
.只为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 目标、协议、端口、应用程序),这将帮助您构建规则。