보안을 위해 브라우저에서 IP 주소로 직접 접속할 때 Discourse 포럼이 기본적으로 표시되지 않는 것이 더 좋다고 생각합니다.
그 이유는 다음과 같습니다:
사용자 및 관리자의 초기 설정 시에도 HTTPS 없이 사이트를 사용할 수 있습니다.
Cloudflare 또는 유사한 서비스를 사용하여 원본 IP를 DDoS 공격이나 서버 해킹 시도로부터 보호하고 있는 경우, 원본 서버 주소가 노출되는 것은 좋지 않습니다. 특히 해커가 해당 서버를 높은 가치로 판단하는 경우 더욱 그렇습니다. 웹호스팅 회사가 소유한 모든 IP 범위를 스캔하는 봇을 운영하는 사람들이 존재합니다.
또한, Discourse 설치 프로그램은 이제 도메인/서브도메인이 올바르게 구성되었는지 확인하며, 그렇지 않으면 설치를 계속하지 않습니다.
Docker 컨테이너 내의 /etc/nginx/conf.d/discourse.conf 파일의 맨 아래에 다음 내용만 추가하면 됩니다:
여기서 1.1.1.1은 서버의 공용 IP 주소입니다. IP 주소를 하드코딩하는 것보다 더 우아한 방법이 있을 것 같지만, 몇 가지 방법을 시도해 보았으나 작동하지 않았습니다.
제 환경에서는 잘 작동합니다(Cloudflare 프록시 사용 시에도 포함). IP 주소로 직접 웹 접근을 허용하는 것이 유용하거나 필요한 경우는 많지 않을 것 같습니다. 이를 허용하지 않는 것이 상당히 일반적인 관행인 것 같습니다. 물론 이 방법을 권장하지 않는 이유가 있다면 알려주시면 감사하겠습니다!
그래서 그중 하나에서 공식 Cloudflare 템플릿을 제거한 뒤 다시 빌드해 보았지만, 불행히도 상황이 달라지지 않았습니다. 여전히 IP를 통해 안전하지 않은 방식으로 접근할 수 있습니다.
해당 설치 환경들 사이에 특별한 차이점을 생각해 내기 어렵습니다. 해당 인스턴스에 설치된 플러그인은 기본으로 포함된 Docker 매니저와 공식 광고 플러그인뿐이었습니다. 이 인스턴스는 stable 브랜치를 사용 중이지만, 동일한 문제를 보이는 다른 사이트들은 stable, beta, tests-passed 브랜치를 혼합하여 사용하고 있습니다.
특정 구성이나 Cloudflare에 국한된 내용은 아니며, 그저 또 하나의 데이터 포인트와 관점입니다:
Apache2와 Nginx 모두 여러 방식으로 “포트 80의 네이키드 IP 주소”(예시)를 다른 FQDN으로 리디렉션하도록 프록시를 설정할 수 있습니다.
이를 수행하는 방법은 다양합니다(rewrite 및 redirect, virtual host 및 redirect 등).
예를 들어, 리버스 프록시에서 포트 80의 해당 IP 주소를 경청(listen)하도록 가상 호스트를 생성하고, 해당 요청을 우리가 선택한 FQDN(또는 IP 주소)으로 리디렉션할 수 있습니다.
또한 Apache2의 mod_rewrite와 Nginx의 rewrite 규칙을 사용하는 리버스 프록시를 통해 이 작업을 수행할 수도 있습니다.
운영 중인 모든 Discourse 구성에는 Discourse 앞에 리버스 프록시(Apache2 또는 Nginx)가 있으며, 리버스 프록시를 구성하여 이러한 유형의 문제와 특수한 경우를 처리함으로써 이 같은 문제를(발생 시) 쉽게 완화할 수 있습니다.
그러나 cloudflare를 프록시로 사용하는 특수한 경우는 사용하지 않지만, 어떤 프록시든 이러한 유형의 문제를 관리하도록 구성할 수 있을 것으로 보입니다. 이는 리버스 프록시가 “거의 모든 것을 다른 어떤 것으로든” 리디렉션하도록 구성할 수 있는 것과 마찬가지입니다.
한 발 더 나아가, 만약 제가 상업용 프록시 사용자(예: Cloudflare)였다면 리디렉션(또는 블랙홀 처리)하고 싶은 특정 IP 주소나 도메인 이름이 있다면, 프록시(이 경우 Cloudflare)를 구성하거나 요청하여 "포트 80의 네이키드 IP 주소"를 제가 선택한 FQDN(또는 다른 위치)으로 리디렉션하도록 할 것입니다.
프록시는 본질적으로 이러한 유형의 작업을 처리하도록 설계되어 있습니다. 또한 언급했듯이 Apache2 또는 Nginx를 사용하여 이러한 유형의 리디렉션은 쉽게 수행할 수 있으므로, Cloudflare와 같은 상업용 서비스도 이 유형의 자명한 리디렉션을 쉽게 처리할 수 있다고 가정합니다(Cloudflare 사용자는 아니지만).
하지만 다른 분들과 마찬가지로, 제 개인 포럼에서도 IP를 통한 접근을 재현할 수 없습니다. 리다이렉트는 발생합니다. 그리고 제 환경에는 특별한 설정도, Cloudflare도 없으며, 월 0달러의 가상 서버를 실행 중인데, 이 서버는 어떤 추가 기능도 제공하지 않습니다.
Digital Ocean의 마켓플레이스 앱을 사용하여 인스턴스를 빠르게 배포하는 방식으로, 2개의 Discourse 인스턴스를 배포하는 것을 방금 테스트했습니다.
거의 커스텀 설정 없이 테스트하고 싶었기 때문에, smtp, dev email, discourse_hostname 항목만 허위 정보로 편집했습니다(재구성을 허용하기 위해).
설치 프로그램은 제가 설정한 허위 도메인/서브도메인이 도메인 검증 단계를 통과하지 못해 중단되었습니다(그리고 app.yml 파일을 수동으로 편집한 후 재구성할 것을 권장합니다).
app.yml을 편집하고 재구성한 후(smtp, dev email, discourse_hostname만), Cloudflare에 개입 없이 사이트가 IP 주소로 불안전하게 접근 가능해졌습니다. 설정된 discourse_hostname으로 리디렉션되지 않습니다.
제 대부분의 설치 작업은 Digital Ocean 마켓플레이스 앱을 사용하지 않고 표준 docker 설치 가이드를 사용하여 수동으로 수행되었습니다.
참고로, 도메인을 검증할 수 없어 설치 프로그램이 중단되는 문제는 Cloudflare를 사용한 최근 2건의 설치에서도 발생했습니다. 아마도 프록싱 때문일 것입니다. 다른 설치 작업들은 설치 프로그램에 도메인 검증 단계가 도입되기 전에 수행되었습니다.
수정: 8개의 Discourse 설치 중 초기 설치 시 도메인 검증 문제가 발생한 것은 2건뿐입니다(위에서 만든 2개의 테스트 인스턴스는 제외). 도메인 검증 오류가 발생하면 Discourse 설정 스크립트는 사용자에게 app.yml을 수동으로 편집하고 재구성하도록 제안합니다. 이것이 유용하지 않다면 문제가 되지 않지만, 제 경우에는 해결책이 되지 못했습니다.
수정: 일반적으로 Cloudflare의 유연한 SSL을 사용하고 있으며, letsencrypt(이것이 더 좋겠지만)는 사용하지 않습니다. @neounix 감사합니다.