Ubuntu 服务器上一个端口的基于 IP 的白名单

Ubuntu 服务器上一个端口的基于 IP 的白名单

目前我正在尝试为一个特殊端口创建白名单 IP。背后的应用程序只是一个简单的 TeamSpeak3 服务器。

IP 白名单通过 HTTP 脚本获取访问者 IP。因此 IP 位于白名单内(目前效果很好)。

但是我如何允许这些 IP 使用端口“9987”,并阻止其他所有 IP?到目前为止,我已经尝试使用 iptables ACCEPT 来处理白名单中的特殊 IP,但效果不太好,因为我可以使用非白名单 IP 加入 Teamspeak?

你能抱怨其他灵魂吗?我很感激任何有用的建议!

编辑:当前脚本

# Create chain
iptables -N teamspeakCommunication

# Add ip
iptables -A teamspeakCommunication --src 127.0.0.1 -j ACCEPT

# Deny everything else
iptables -A teamspeakCommunication -j DROP

# Use this chain for port
iptables -I INPUT -m udp -p udp --dport 9987 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 10011 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 30033 -j teamspeakCommunication

另一项编辑:我试了一下,是的:每个包都在丢失。所以没有人可以连接到 TeamSpeak - 就像我想要的那样!问题是另一个链。所以我清除了它们。

但新的问题是:链/规则运行正常,所以我将自己的 IP 添加到链中,并尝试重新加载。但我无法连接。

我的添加IP的命令是:

iptables -A teamspeakCommunication --src 1.2.3.4 -j ACCEPT # 1.2.3.4 stands for my ip

并重新加载:

iptables-save > /etc/network/iptables.up.rules && iptables-apply -t 60

iptables-restore < /etc/network/iptables.up.rules

但重新加载并不关心新的 IP?我想,这只是一件简单的事情。

答案1

首先,最好养成只使用-A来添加规则的习惯,而不是-I让规则在链中的最终顺序与您在脚本中看到的顺序相同。

其次,除此之外,你的脚本看起来还不错。

也许使用了另一个端口,或者是 TCP 而不是 UDP。我更喜欢明确允许我需要的那些端口,并拒绝所有其他连接尝试(也许在开始时使用日志记录,这样我就可以查看尝试进入的内容):

iptables -A chainname -p tcp --dport 1234 -j ACCEPT
...
iptables -A chainname -j LOG -m limit --log-prefix "chainname drop: " --limit 4/minute --limit-burst 20
iptables -A chainname -j DROP

编辑:

teamspeakCommunication您正在使用 向链中添加规则-A,这通常是一个好主意,正如我上面提到的。但是,在这种情况下,它不是一次性填充链的脚本,而是逐步维护链。现在您正在附加-j ALLOW规则统一-j DROP规则,因此未达到允许的程度。在这种情况下,我允许您添加这些规则-I;-)

编辑2:

可以暂时将 IP 地址添加到链中,该 IP 地址在一段时间不活动后会自动删除:

iptables -N teamspeakCommunication
iptables -A teamspeakCommunication -m recent --update --name teamspeak --seconds 1800 -j ACCEPT
iptables -A teamspeakCommunication -j DROP

这会在 中设置一个recent模块iptables,用于匹配“最近看到的” IP 地址。您可以通过执行以下操作将 IP 地址添加到此模块:

echo "+127.0.0.1" > /proc/net/xt_recent/teamspeak

执行此操作后,只要在过去 1800 秒内(按照 的配置)看到来自该 IP 地址的流量,就会接受来自该 IP 地址的流量--seconds。如果 1800 秒内没有看到任何流量,则该 IP 地址将从列表中删除并再次被阻止。

如果要在配置的秒数之前删除 IP 地址,请执行以下操作:

echo "-127.0.0.1" > /proc/net/xt_recent/teamspeak

您可以使用以下方式轻松查看列表

cat /proc/net/xt_recent/teamspeak

它显示了有关何时看到最后一个数据包等各种信息。

加载内核模块时,xt_recent您可以传递每个列表要记住的 IP 数量,以及文件的默认所有者/组/权限/proc/net/xt_recent/*;这些也可以使用常规chown/chmod命令进行操作。请参阅modinfo xt_recent了解参数列表和名称。

相关内容