クラウド仮想マシンインスタンスへのアクセスを管理するために、Guacamoleリモートデスクトップゲートウェイテスト設定を実行しています。
固定IPなしでGuacamole RDGへのアクセスを特定のドメインに制限するように、奇妙なPOC要求を顧客から受け取ったときに選択肢はありませんでした。クライアントは、動的DNSなどのサービスを使用して、自分が取得した動的IPでドメインを再確認できます。
したがって、デフォルトでは、IPアドレスではなくドメイン名に基づいてGuacamole RDGサーバーにインバウンドファイアウォールルールを設定する必要があります。基本的なネットワークロジックに加えて、この要件を満たす方法はありますか?
ドメイン名に基づいてiptablesルールを設定するには、次のコマンドを試しましたが、実行時に実際にドメイン名を解決し、解決されたIPアドレスを使用してiptablesにルールを適用します。
iptables -A INPUT -p tcp --src domain.com --dport 3128 -j ACCEPT
答え1
iptables
それ自体はIPアドレスでのみ機能しますが、ipsetベースのルールを作成し、定期的にipsetを更新できます。
ipset create allowed hash:ip family inet # IPv4-only
ipset create allowed6 hash:ip family inet6 # IPv6-only
デフォルトでは、すべてのIPsetは再起動後に削除されます。
ルールは次のとおりです。
iptables -A INPUT -p tcp --dport 3128 -m set --match-set allowed src -j ACCEPT
ip6tables -A INPUT -p tcp --dport 3128 -m set --match-set allowed6 src -j ACCEPT
(脚注ではFORWARDおよびOUTPUTチェーンの場合src
に置き換える必要がありますdst
。)
ドメイン検索を実行し、IPset を更新するスクリプトを作成します。
#!env /bin/bash
# Domain names to look up
names=("example.com" "example.org")
ipset flush allowed
for name in ${names[@]}; do
# Look up and add IPv4 addresses (dig may output multiple)
ip4s=$(dig A +short ${name})
for ip4 in ${ip4s}; do
ipset add allowed ${ip4}
done
# Look up and add IPv6 addresses (dig may output multiple)
ip6s=$(dig AAAA +short ${name})
for ip6 in ${ip6s}; do
ipset add allowed6 ${ip6}
done
done
定期的にスクリプトを実行するには、cronjobを追加してください。たとえば、5分ごとに次のようになります。
*/5 * * * * root /path/to/myscript.sh
答え2
ipset add allowed $ip
4つのIPが応答したため、私には適していませんdig
。これを行いました。
for n in $ip
do
ipset add allowed $n
done
答え3
CSFファイアウォールにはこの機能が組み込まれています。したがって、単一のソースへのインバウンドをロックすることもできます。そして、IPを特定のサブドメインに更新する(安価だが安全な)動的DNSサービスがあります。 CSFは許可された着信IPを定期的に確認して変更します。非常に非常にうまく動作します。メンテナンス費用は非常に安いです。 VPSへのアクセスをロックするために使用します。これが人気があるはずですが、これに関する情報をたくさん見つけるのは難しいですね。だからCSFについて知ることをお勧めします。ところで、これはWebminで簡単に設定できます。そしてそれは無料です。そして人気があります。使用しているディストリビューションによってさまざまなパスが異なる場合は、設定が少しトリッキーです。https://www.configserver.com/cp/csf.html