クラウド仮想マシンインスタンスへのアクセスを管理するために、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