在iptables上将我当前的IP添加到白名单?

时间:2014-08-03 15:00:53

标签: linux bash iptables

我是设置游戏服务器的新手,但我想阻止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并自动将其添加到白名单。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

假设:

  • bash脚本在服务器上运行
  • 用户使用ssh
  • 登录

你可以创建一个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,但这应该足够接近。