使用 UFW 允许 IP 地址列表访问端口

使用 UFW 允许 IP 地址列表访问端口

我想允许 (大约 100 个) IP 地址列表访问 ubuntu 服务器上的网站。我希望能够通过 cron 刷新列表。

我正在尝试使用 UFW 来实现。我认为通过应用程序配置文件来实现可能更容易。这是最好的方法吗?

[My App]
  title = "My Web"
  description = "Allows to access web"
  ports = 80/tcp|443/tcp

我如何添加允许 IP 的列表?我想在配置文件中添加类似以下内容:

  ips=[/var/www/allowed_ips.txt]

答案1

应用程序配置文件描述应用程序。每个配置文件都包含标题、描述和一组要连接的端口。它们不描述允许或拒绝访问此类应用程序的规则。这是单独完成的。例如

ufw allow from 192.168.0.0/16 to any app "MyWeb"

如果您想在文件中保留 IP 地址列表(如问题中所建议的那样),我建议您将如下所示的 shell 脚本添加到 crontab。它将首先删除应用程序的所有规则(请参阅这个答案),然后在您的文件中添加针对 IP 的规则。

#!/bin/bash

APPNAME="MyWeb"
IPFILE=/var/www/allowed_ips.txt

RULES_DESC=$(ufw status numbered | grep "$APPNAME" \
  | awk -F"[][]" '{print $2}' | tr --delete [:blank:] | sort -rn)
for NUM in $RULES_DESC; do
  yes | ufw delete $NUM
done

for IP in $(cat $IPFILE); do
  ufw allow from $IP to any app "$APPNAME"
done

您可能希望抑制 crontab 中脚本的输出。

相关内容