안녕하세요. 오늘은 간단하게 웹 서버를 구축을 해보고, 서버 보안 설정을 하는 방법에 대해 알아보겠습니다.
apache2 란?
아파치 HTTP 서버는 아파치 소프트웨어 제단에서 관리하는 오픈 소스, 크로스 플랫폼 HTTP 웹 서버 소프트웨어입니다.
https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_HTTP_%EC%84%9C%EB%B2%84
아파치 HTTP 서버 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 아파치 HTTP 서버(영어: Apache HTTP Server)는 아파치 소프트웨어 재단에서 관리하는 오픈 소스, 크로스 플랫폼 HTTP 웹 서버 소프트웨어다. BSD, 리눅스 등 유닉스 계열
ko.wikipedia.org
아파치 웹 서버 설치
$sudo apt-get install apache2
$systemctl status apache2
만약 active 상태가 아니면, 아래의 명령어를 실행하여 서비스를 시작합니다.
$systemctl start apache2
이제 Ubuntu에서 firefox를 실행하고, localhost에 접속을 합니다.
웹 서버가 정상적으로 구성이 되었다는 것을 알 수 있습니다.
아파치 웹 서버 보안 설정
여기서는 디렉토리 리스팅 취약점을 막는 설정에 대해 알아보겠습니다.
디렉토리 리스팅 : 웹 서버의 특정경로에 있는 파일들을 웹 서비스를 통해 디렉토리 형식으로 볼 수 있는 것을 말한다.
$vim /etc/apache2/apache2.conf
따라서 Options indexes 가 설정이 되어 있으면 디렉터리 리스팅이 불가능하도록 삭제를 해야합니다.
한번 디렉터리 리스팅에 대해 알아보기 위해 다음과 같은 명령어를 입력합니다.
$sudo mkdir /var/www/html/test
$sudo touch /var/www/html/test/test.txt
현재 웹 사이트의 경로에 test디렉터리를 생성하고, 해당 디렉터리의 안에 있는 파일들을 볼 수 있습니다.
localhost/test/ 에 들어가보면 다음과 같이 사진이 나온것을 알 수 있습니다.
이제 옵션을 삭제해서 디렉터리 리스팅 취약점을 제거해보겠습니다.
$systemctl restart apache2
다시 사이트를 접속을 해보면,
거부 메세지가 나온 것을 알 수 있습니다.
로그 관리
$vim /var/log/apache2/access.log
로그 하나를 분석을 해보겠습니다.
1번째 행은 서버에 요청을 한 클라이언트의 IP 주소입니다.
2번째 행은 클라이언트의 사용자 이름입니다. 아무런 정보가 없어 - - 로 표시되어 있다.
3번째 행은 접속을 시도한 날짜와 시간이다.
4번째 행은 요청한 메서드(get)와 접근 경로(/), 프로토콜 종류(HTTP 1.1) 를 보여준다.
5번째 행은 서버가 클라이언트에 보내는 상태 코드이다.
6번째 행은 클라이언트에 보내는 내용의 크기
7번째 행은 링크를 설정한 항목에 대한 접근 기록을 나타낸다.
8번째 행은 서버에 접근하는 클라이언트의 웹 브라우저 종류를 보여준다.
에러 로그
웹 서버를 운영할 때 여러 가지 이벤트나 문제점 등이 생기면 이를 로그에 남기는데 이러한 정보는 매우 중요합니다.
Ubuntu에서는 /var/log/apache2/error.log에서 에러 로그를 확인할 수 있습니다.
오류가 생긴 날짜와 시간
오류의 심각성
오류가 발생한 pid 정보
클라이언트의 접속 ip
접근한 웹 경로
성공 또는 실패 여부
발생한 오류 설명