1. Nginx 버전 정보 감추기
미니 PC를 웹서버로 쓰고 있는데 웹페이지를 로드할 때 개발자모드로 Network 탭을 보면 서버의 IP주소와 어떤 툴을 이용해서 서비스를 하고 있는지 다 나와 있어서 보안 쪽으로 걱정이 되었습니다. 검색을 해보니 IP만 가지고는 해킹을 하기 어렵다고 해서 안심이 되었지만, Nginx의 어느 버전을 쓰고 있는지 노출이 되면 그 버전의 취약점을 이용해서 서버를 공격할 수 있다고 해서 최소한 버전만이라도 숨겨야겠다고 생각했습니다.
아무런 작업도 해주지 않는다면 위와 같이 Remote Address에서 서버의 IP주소와 Response Headers의 Server에서 Nginx 버전이 그대로 노출되고 있는 것을 볼 수 있습니다.
# server_tokens를 on으로 변경 후 저장
sudo vim /etc/nginx/nginx.conf
# Nginx 재시작
sudo nginx -t
sudo systemctl restart nginx
에디터로 nginx.conf 파일을 열어주고 server_tokens가 off로 되어 있는 것을 on으로 바꿔주고 저장을 합니다.
수정을 마쳤으면 sudo nginx -t로 nginx 설정 파일이 제대로 작동하는지 확인하고 재시작을 합니다.
재시작을 하고 다시 웹사이트에 들어가서 개발자 모드로 확인을 해보면 Nginx의 버전이 사라진 것을 확인할 수 있습니다. Nginx를 사용하는 것까지 숨기고 다른 임의의 서버명을 표시하고 싶다면 Nginx의 Headers-More라는 모듈을 사용해야 하지만 모듈을 설치하고 다시 컴파일해줘야 하는 번거로움이 있습니다. 그리고 여전히 서버의 IP 주소가 노출되고 있어서 프록시를 적용하는 방법을 찾아봤는데 Cloudflare를 사용하면 쉽게 IP 주소와 서버의 정보가 숨겨진다고 해서 적용을 해보았습니다.
2. Cloudflare 적용하기
Cloudflare에 가입한 후에 기존 도메인을 추가해 줍니다.
도메인을 입력하고 DNS 레코드 빠른 스캔을 선택해 주세요.
요금제는 Free를 선택해 주세요.
도메인을 구입한 곳의 네임 서버 페이지에 들어가서 네임 서버를 수정해 줍니다.
저는 가비아에서 도메인을 구매했는데 기존 네임 서버 3개가 적혀 있는 것을 지운 후에 Cloudflare의 네임 서버를 입력했습니다.
네임 서버를 수정해 주면 Cloudflare에 도메인 등록이 완료가 됩니다. Dashboard의 DNS 메뉴를 눌러보면 DNS가 자동으로 추가되고 프록시가 적용된 것을 확인할 수 있습니다. 참고로 무료 요금제를 선택했을 때 프록시 설정이 적용되어 있으면 사이트 속도가 다소 느려집니다. 무료 요금제는 망 사용료 때문에 한국의 CDN을 이용할 수 없어서 그렇다고 합니다.
Dashboard에서 SSL/TLS 메뉴를 누른 후에 구성을 클릭해 주세요.
기본값은 가변으로 되어있을 것입니다. '가변'은 클라이언트와 Cloudflare 사이에서는 HTTPS, Cloudflare와 Server 사이에서는 HTTP로 작동합니다. 서버가 HTTPS 인증서를 발급받지 않은 경우 선택합니다. '전체'는 클라이언트와 Cloudflare, Server 모두 HTTPS를 적용하고 서버의 인증서가 만료되거나 자체 인증된 인증서라도 허용합니다. '전체(엄격)'은 서버의 인증서가 유효해야 합니다. 저는 certbot을 이용해서 Let's Encrypt의 인증서를 발급받았기 때문에 '전체(엄격)'을 선택했습니다.
다른 설정은 따로 안 건드려주고, 보안의 봇 메뉴를 클릭해서 봇 차단모드 정도만 켜주었습니다.
모든 설정이 완료되었더라도 다시 웹페이지로 들어가서 개발자 모드로 확인을 해보면 여전히 서버의 정보가 그대로 표시되고 있을 것입니다. 그 이유는 DNS 설정이 바로 적용되는 것이 아니라 시간이 걸리기 때문입니다. 최대 24시간 정도 걸린다고 하는데 저의 경우는 1시간쯤 후에 적용됐습니다.
Cloudflare 설정이 적용된 후에 개발자 모드의 Network 탭을 확인해 보면 서버의 IP가 노출되었던 Remote Address에는 Cloudflare의 프록시 IP 주소가 적혀있고, Server에는 nginx가 아닌 cloudflare가 적혀있는 것을 볼 수 있습니다.
Cloudflare 연결 전 웹사이트의 인증서를 확인해 보면 certbot으로 발급받은 Let's Encrypt 인증서가 표시되고 있었습니다.
Cloudflare 연결 후에는 발급 기관이 Google Trust Services로 바뀐 것을 볼 수 있습니다.
ping <도메인 이름>
마지막으로 터미널에서 ping 도메인 이름을 입력하면 전에는 서버의 IP 주소가 그대로 노출이 됐었습니다. Cloudflare 적용 후에는 서버의 IP 주소가 아닌 Cloudflare의 프록시 주소가 표시가 됩니다.
터미널에서 표시된 주소를 직접 브라우저에 입력해 보면 'Direct IP access not allowed'라는 Cloudflare 페이지가 표시됩니다.
그나저나 서버를 열어둔 지 하루 밖에 안 됐는데 벌써 요청 수가 1,000번 가까이 되네요. 국적도 다양하고 벌써 차단된 공격도 보입니다. 앞으로 보안 공부를 더 철저히 해야겠습니다.
'코딩 공부 > 미니 PC 서버' 카테고리의 다른 글
[미니 PC 서버] 우분투에서 PostgreSQL 설치 및 기본 설정하기 (0) | 2024.10.17 |
---|---|
[미니 PC] 6. FIREBAT AM02 개봉기 5편 - NVMe SSD 방열판 설치 (0) | 2024.09.12 |
[미니 PC 서버] 구입한 도메인을 서버에 연결하기 + HTTPS(SSL/TLS) 적용하기 (0) | 2024.09.08 |
[미니 PC 서버] 우분투 SSH 접속 및 보안 설정 + Termius로 접속하기 (0) | 2024.09.04 |
[미니 PC] 5. FIREBAT AM02 개봉기 4편 - Hagibis IPS 미니 모니터 연결 (0) | 2024.09.04 |