远程将特定 IP 地址的 SSH 访问列入白名单

远程将特定 IP 地址的 SSH 访问列入白名单

我刚刚从一家云提供商那里租了一台服务器,但这家提供商没有办法将 SSH 访问列入白名单。我正在尝试找出一种方法来远程将我的 IP 地址列入白名单,以便通过 SSH 访问我的服务器,并将其他人列入黑名单。我曾考虑使用 IP 表,但由于我的 IP 地址是动态的,所以这永远行不通。类似于 AWS 安全组。我愿意使用付费服务,只要它不贵,或者如果有人知道一种服务或一​​种有效的方法,让我可以在 IP 更改/锁定的情况下远程管理 iptables,那就更好了。

答案1

使用脚本更新 iptables 和 DDNS 服务相当简单。

将 IP 操作放入单独的链中:

-A MYIP -s 1.2.3.4/32 -j ACCEPT
-A MYIP -j DROP

然后在 SSH 端口上运行此链,例如

-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j MYIP

然后定期(例如)运行一个脚本,该脚本对动态 IPcron执行操作,如果检测到更改则刷新/重写链。nslookupMYIP

#!/bin/bash

IPSAVE=/etc/sysconfig/iptables

update_iptables() {
  MN=$1
  CHAIN=$2

  IP=`nslookup ${MN} | tail --lines=-3 | grep Address | awk '{print $2}'`
  if [ `echo ${IP} | wc -m` -gt 0 ]
  then
    C=`grep -c "\-A ${CHAIN} \-j " ${IPSAVE}`
    D=`grep "\-A ${CHAIN} \-s " ${IPSAVE} | grep -c "${IP}"`
    if [ ${C} -gt 0 ] && [ ${D} -eq 0 ]
    then
      /sbin/iptables -F ${CHAIN}
      /sbin/iptables -A ${CHAIN} -s ${IP}/32 -j ACCEPT
      /sbin/iptables -A ${CHAIN} -j DROP
    fi
  fi
}

update_iptables my.dynamic.hostname.com MYIP

相关内容