아무거나

Nginx 보안 취약점 처리 본문

Infra/Nginx

Nginx 보안 취약점 처리

전봉근 2018. 6. 17. 02:00
반응형

웹 서버를 운영하면서 기본적인 보안처리에 대해 포스팅합니다. 

해당 방법을 무조건 적용하라는건 아닙니다. 상황에 맞게 적용하여 사용하시길 권장드립니다.

확인명령으로 조회 후 확인하셔서 적용하시면 됩니다.


[ Ubuntu 기준 ]


1. 관리서버 디렉토리 권한 설정 (일반 사용자가 관리서버 디렉토리에 접근할 경우 홈페이지 변조, 설정 변경 등으로 인한 장애가 발생할 수 있으므로 일반 사용자의 접근 권한을 제한해야 함.)

   * 명령확인 : ls -ald /etc/nginx/

sudo chown -R ubuntu:ubuntu /etc/nginx/
sudo chmod 750 /etc/nginx/


2. 설정파일 권한 설정 (일반 사용자가 웹 서버의 설정 파일을 삭제, 변경할 수 있을 경우 시스템이 오작동하여 사용 불능 상태에 빠질 우려가 있음.)

   * 명령확인 : find /etc/nginx/ -name *.conf -exec ls -al {} \;

sudo chmod 700 /etc/nginx/*.conf
sudo chmod 700 /etc/nginx/snippets/*.conf


3. 로그 디렉토리/파일 권한 설정 (로그 파일에는 공격자에게 유용한 정보가 들어있을 수 있으므로 일반 사용자에 의한 정보 유출이 불가능하도록 권한 설정해야 함.)

   * 명령확인 : ls -ald /var/log/nginx/

sudo chown -R ubuntu:ubuntu /var/log/nginx/
sudo chmod 750 /var/log/nginx/
sudo chmod 640 /var/log/nginx/*.log
vi /etc/nginx/nginx.conf
[nginx.conf]
....
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log;
 ....


4. 로그 포맷 설정 (웹 서버의 로그 포맷을 Combined로 설정하지 않으면, 공격 여부 파악, 공격자 사용 툴 파악, 공격자 위치 파악이 불가능하므로 반드시 Combined 포맷 또는 그에 준하는 포맷 스트링으로 설정해야 함.)

   * 명령확인 : cat /etc/nginx/nginx.conf | grep access_log

vi /etc/nginx/nginx.conf
[nginx.conf]
....
access_log /var/log/nginx/access.log combined;  // combined 추가
....


5. 헤더 정보 노출 방지 (공격자가 대상 시스템의 정보를 획득하기 위해 고의적으로 웹 서버 헤더 정보를 유출을 유도할 수 있음.)

   * 명령확인 : cat /etc/nginx/nginx.conf | grep server_tokens

vi /etc/nginx/nginx.conf
[nginx.conf]
....
server_tokens off;
....


6. 에러 메시지 관리 (공격자가 대상 시스템의 정보를 획득하기 위해 고의적으로 다양한 에러를 유발하여 돌아오는 에러 메시지를 통해 웹 프로그램의 구조 및 환경 설정을 추정할 수 있음.)

    * 명령확인 : cat /etc/nginx/nginx.conf | grep error_page

nginx 설치경로(/etc/nginx/)에 error.html 생성
[error.html]

시스템 오류

이용에 불편을 드려 죄송합니다.
잠시 후 다시 이용해 주시길 바랍니다.


[/etc/nginx/sites-available/default.conf]
	server {
		....

		location / {
		     proxy_pass http://localhost:8080;
		     proxy_set_header X-Real-IP $remote_addr;
		     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		     proxy_set_header Host $http_host;
		}

		error_page 400 401 403 404 500 /error.html;
	}
반응형
Comments