我有一个开放的端口40002,我想限制该端口在同一时间只能被一个ip地址(不是特定的地址)连接,如果已经有一个ip地址连接到该端口,其他ip将无法连接。
是否可以通过 Iptables 或脚本来配置它?我的系统是 Ubuntu 14.04,谢谢。
答案1
您可以通过配置 iptables 来实现。
/sbin/iptables -A INPUT -p tcp --syn --dport $port -m connlimit --connlimit-above N -j REJECT --reject-with tcp-reset
# save the changes see iptables-save man page, the following is redhat and friends specific command
service iptables save
示例:限制每个 IP / 主机的 SSH 连接数
/sbin/iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
# save the changes see iptables-save man page, the following is redhat and friends specific command
service iptables save
测试:
#!/bin/bash
ip="202.1.2.3"
port="80"
for i in {1..100}
do
# do nothing just connect and exit
echo "exit" | nc ${ip} ${port};
done
OK:要限制最大 n 个连接,这里有一个使用 ip 限制模块的示例:
iptables -A INPUT -p tcp --syn -dport 40002 -m iplimit --iplimit-above 3 -J REJECT
如果有 3 个 IP 连接,这将拒绝连接。如果我误解了你的问题,请见谅 ;)