目前我正在尝试创build一个基于一个特殊端口的白名单IP。 后面的应用程序只是一个简单的TeamSpeak3服务器。
IP白名单通过HTTP脚本获取Visitor-IP。 所以知识产权是在白名单(这是工作到目前为止很好)。
但是,我怎样才能允许这些IP为港口“9987”,并阻止其他一切? 我已经尝试过使用iptables ACCEPT作为白名单内的特殊IP,但是这样做效果不佳,因为我可以join与非白名单IP的Teamspeak?
你能抱怨其他灵魂吗? 我感谢任何有用的build议!
编辑:当前的脚本
# 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? 我想,这只是一个简单的事情..
首先,最好是习惯于使用-A来添加规则,而不是-I这样规则在链中的最终顺序就和你在脚本中看到的一样了。
其次,除此之外,你的脚本似乎还行。
也许使用另一个端口,或者它是TCP而不是UDP。 我更愿意明确地允许我需要的那些端口,并拒绝所有其他的连接尝试(也许在开始时使用日志logging,这样我就可以看到想要进入的内容):
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
编辑:
你正在用-A来增加对teamspeakCommunication链的规则,如上所述,这通常是个好主意。 然而,在这种情况下,这不是一个脚印,而是一步一步地填充链条,你正在增加链条。 现在,您在blanket -j DROP规则之后附加了-j ALLOW规则,因此没有达到ALLOW。 在这种情况下,我给你的权限添加这些规则与-I 😉
EDIT2:
可以临时添加一个IP地址到一段时间不活动后自动删除的链中:
iptables -N teamspeakCommunication iptables -A teamspeakCommunication -m recent --update --name teamspeak --seconds 1800 -j ACCEPT iptables -A teamspeakCommunication -j DROP
这在iptables设置了一个recent模块,它匹配“最近看到的”IP地址。 您可以通过执行以下操作将IP地址添加到此模块:
echo "+127.0.0.1" > /proc/net/xt_recent/teamspeak
完成此操作后,只要在最近的1800秒内从该IP地址看到stream量(使用--secondsconfiguration), --seconds接受来自该IP地址的stream量。 在1800秒没有stream量出现之后,IP地址从列表中删除,并再次被阻塞。
如果您要删除早于configuration的秒数的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 。