클라우드 가상 머신 인스턴스에 대한 액세스를 관리하기 위해 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