我是设置游戏服务器的新手,但我想阻止rcon到每个ip,但白名单除外。
首先,我要使用这个trhough SSH:
iptables -A INPUT -p tcp --destination-port 27015 -j LOG --log-prefix "SRCDS-RCON " -m limit --limit 1/m --limit-burst 1
iptables -A INPUT -p tcp --destination-port 27015 -j DROP
之后我希望当用户运行bash脚本或类似的东西时,它会检测用户IP并自动将其添加到白名单。
我该怎么做?
答案 0 :(得分:0)
假设:
你可以创建一个ipset:
首先,在iptables中添加此规则:
iptables -A INPUT -i eth0 -m set --match-set whitelist src -p tcp --destination-port 27015 -j ACCEPT
然后创建一个集合:
sudo ipset -N whilelist iphash
最后,使用SSH_CONNECTION环境变量添加这样的脚本:
#!/bin/bash
USER_IP=$(echo $SSH_CONNECTION | cut -f1 -d' ')
sudo ipset -A whitelist $USER_IP
您甚至可以在/root/.bash_profile
的末尾添加这两行,以便当有人以root
连接时自动完成。
但是,这假设您的朋友通过ssh以root身份连接。由于这是不可取的,您可以使用临时目录来保存IP地址,并添加一个cron作业来填充ipset哈希:
使用以下内容创建/etc/cron.d/check_ipset
* * * * * root /usr/local/bin/check_ipset
创建/usr/local/bin/check_ipset
(和chmod 700
):
#!/bin/bash
for i in `cat /tmp/ipset_pending | sort -u`; do
ipset -A whitelist $i
done
cat /dev/null > /tmp/ipset_pending
将此添加到每个用户的.bash_profile:
...
echo $SSH_CONNECTION | cut -f1 -d' ' >> /tmp/ipset_pending
...
没有测试,所以YMMV,但这应该足够接近。