特定の 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

次に、定期的に (例)動的 IP に対して を実行し、変更が検出された場合にチェーンをフラッシュ/書き換えるcronスクリプトを実行します。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

関連情報