일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- elasticsearch
- 논리삭제
- aws ec2
- Locust
- AWS
- nginx
- prometheus
- slack
- grafana
- 계정 관리
- 티스토리챌린지
- 물리삭제
- Hadoop
- hive
- hard delete
- ci/cd
- 로그 백업
- logstash
- Airflow
- redis
- NoSQL
- node exporter
- unique constraint
- Next.js
- 오블완
- soft delete
- DAG
- docker
- Django
- JWT
- Today
- Total
먹수의 개발일지
웹 서버 보안 체크 리스트 본문
웹 서버 보안 체크 사이트
https://observatory.mozilla.org/
https://securityheaders.com/ → 요청한 서버의 헤더 정보를 더 잘 보여준다.
웹서버 보안 체크리스트
- HTTPS 사용: SSL 인증서를 구매하거나 무료로 얻어서 HTTPS를 사용하는 것이 중요합니다. 이를 통해 데이터의 암호화와 통신의 보안성을 강화할 수 있습니다. Nginx 설정에서 SSL을 활성화하고 HTTPS로 트래픽을 전송하도록 설정해야 합니다.
- CSRF(Cross-Site Request Forgery) 방어: Django에서는 기본적으로 CSRF 보호 기능을 제공합니다. 이를 활성화하여 웹 어플리케이션의 사용자 세션을 보호할 수 있습니다.
- CORS(Cross-Origin Resource Sharing) 설정: React와 Django가 서로 다른 도메인에서 실행될 경우, CORS 정책을 설정하여 허용되는 도메인만 리소스에 접근할 수 있도록 합니다.
- 보안 헤더 설정: Nginx 설정에서 보안 헤더를 추가하여 Clickjacking, XSS 등과 같은 공격을 방어합니다. 이러한 헤더에는 Content-Security-Policy, X-Frame-Options, X-XSS-Protection 등이 있습니다.
- 정적 파일 서빙 및 리버스 프록시 설정: Nginx를 사용하여 정적 파일을 제공하고 Django 애플리케이션을 리버스 프록시로 설정하여 보안을 강화할 수 있습니다.
- 서버 보안 업데이트: 운영 체제, Nginx, Django 등의 소프트웨어를 최신 버전으로 유지하고 보안 패치를 적용하는 것이 중요합니다.
- SSH 접근 제어: 서버에 대한 SSH 접근을 보호하기 위해 비밀번호보다는 SSH 키를 사용하고, SSH 포트 번호를 변경하거나 필요한 경우 IP 주소를 허용 목록에 추가합니다.
- 보안 그룹 및 방화벽 설정: 클라우드 환경에서는 보안 그룹이나 방화벽 설정을 통해 서버에 접근을 제한하고 필요한 포트만 열어둡니다.
- 접근 권한 관리: Django, Nginx, 그리고 서버 파일에 대한 접근 권한을 관리하여 불필요한 접근을 방지합니다.
- 로그 모니터링: 로그를 모니터링하고 비정상적인 활동을 식별하여 적절한 대응을 취합니다.
보안 헤더 설정
1) Directory Listing
autoindex off;
: 생략 가능
index 파일이 없을 경우 호출된 경로에 있는 파일 List를 보여주는 Directory Listing을 막기 위해서 아래와 같이 설정해주면 된다. Default값이 OFF기 때문에 생략해도 된다.
location / {
.....
autoindex off;
}
2) 서버 정보 보안
Nginx의 버전 정보를 응답 헤더에서 숨기려면 nginx.conf 파일에 다음과 같이 설정하면 된다:
server_tokens off;
3) 클릭재킹(clickjacking) 보안 설정
웹 페이지가 다른 도메인의 웹 페이지 안에서 <iframe> 요소를 통해 로드되는 것을 방지하기 위한 HTTP 응답 헤더이다. 클릭재킹(clickjacking)과 같은 공격으로부터 보호하기 위한 중요한 보안 메커니즘이다.
X-Frame-Options "SAMEORIGIN";
SAMEORIGIN : 페이지가 동일한 출처에서 로드된 **<iframe>**에서만 볼 수 있습니다. 다른 출처의 페이지에서는 이 페이지를 **<iframe>**으로 래핑하여 표시할 수 없습니다.
→ 그 외에 DENY, ALLOW_-FROM uri 등의 옵션으로 지정해줄 수 있다.
4) 크로스사이트 스크립팅(XSS) 공격 방어 보안
브라우저가 페이지를 렌더링할 때 XSS 공격으로부터 자동으로 보호되도록 설정할 수 있다.
X-XSS-Protection "1; mode=block";
1; mode=block : 브라우저에서 XSS 필터링을 활성화하고, XSS 공격이 감지되면 페이지 렌더링을 차단하도록 설정된다.
5) MIME 타입 스니핑(mime type sniffing) 방어
라우저가 서버에서 제공한 **Content-Type**을 무시하고 리소스의 실제 내용을 바탕으로 MIME 타입을 추론하지 않도록 한다.
X-Content-Type-Options nosniff;
5) HSTS (HTTP Strict Transport Security)
Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
Nginx header 보안 적용 예시
nginx.conf
server {
server_name test.com;
location / {
.......
autoindex off;
}
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
}