아파치

From Hidden Wiki
Jump to navigation Jump to search
필독 사항 유닠스 계열 저작물, 성인물, 도박 웹 써버 보안 프로그래밍 그래핔 파싱
필독 사항 고스트BSD 표면 웹 싸이트 제작 리눅스 마스터 파이썬 트킨터 뷰티펄 숲
수학 아이투피 마약, 아청물, 해킹 웹 싸이트 보안 웹 프로그래밍 데이터 분석 게임 제작
통계학 뮤와이어 다크넽 싸이트 제작 정보 보안 기사 쟁고우 팬더즈 파이게임

개요

아파치 HTTP 써버(Apache HTTP Server)는 아파치 소프트웨어 재단에서 관리하는 HTTP 웹 써버이다. BSD, 리눅스유닉스 계열 뿐 아니라 마이크로소프트 윈도우즈노벨 넷웨어 같은 기종에서도 운영할 수 있다.


요즘엔 아파치(Apache)보다 엔진엑스(nginx)를 많이 쓴다.


엔진엨스 문서 참조.

아파치 설치

우분투에서는

apache2 -v

로 아파치 버전 확인. 아파치가 안 깔려있을 경우

apt install apache2

로 apache2를 설치한다.


센트OS의 경우

httpd -v

로 자신의 VPS에 설치되어있는 아파치 버전을 확인한다.

Server version: Apache/2.4.6 (CentOS)
Server built:   Oct 12 2013 21:56:39

와 같은 식으로 나올 것이다. 만약 아파치 2가 설치되어있지 않다면

yum install httpd

로 아파치 2를 설치한다.


systemctl start httpd.service

를 입력하여 아파치를 시작하고

systemctl enable httpd.service

로 아파치를 센트OS의 서비스로 등록하여 리부트(reboot)시마다 자동으로 시작하게 만든다.


아파치를 제거할 때는

apt purge apache*

를 입력한다.

아파치 일반 설정

원래 센트OS리눅스 배포판들은 아파치의 설정이

/etc/httpd/conf/httpd.conf

파일에 다 들어있다. 그러나 우분투, 리눅스 민트데비안 계열에서는 httpd.conf 대신에

/etc/apache2/apache2.conf

에apache2.conf가 있으며 사실상 동일하다. 단, httpd.conf에 있던 일부 설정이

/etc/apache2/ports.conf
/etc/apache2/mods-enabled/*.load
/etc/apache2/mods-enabled/*.conf
/etc/apache2/conf-enabled/*.conf
/etc/apache2/sites-enabled/*.conf

의 여러개의 디렉터리와 파일로 나눠서 들어가있다. 그리고

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

apache2.conf에 위와 같은 내용이 적혀있는데 위 디렉터리들에서 load와 conf 파일들을 불러오라는 소리이다. 즉, 여러개로 나눠놨지만 결국 apache2.conf가 httpd.conf의 역할을 한다는 의미이다. apache2.conf는 메인 설정 파일이다. 웹 써버가 시작할 때, 이 파일은 다른 설정 파일들을 불러온다.

ports.conf는 들어오는 연결을 위한 listening port를 설정한다.

mods-enabled 디렉터리는 모듈(module. 추가 기능을 위해 설치하는 확장 기능.) 관리를, conf-enabled 디렉터리는 아파치 전체 설정을, sites-enabled 디렉터리는 각 가상 호스트(virtual host)별 설정을 한다.


mods-enabled 폴더에는 *.conf 파일 말고도 *.load 파일도 존재한다. conf 파일은 말 그대로 설정 내용을 적어두는 파일이고, load 파일은 특정 모듈을 불러올지 결정하는 파일이다. 예를 들어, status.load 파일은

LoadModule status_module /usr/lib/apache2/modules/mod_status.so

와 같은 내용인데 맨 앞에 #을 쳐서 주석 처리하여

#LoadModule status_module /usr/lib/apache2/modules/mod_status.so

처럼 만들면 아파치에서는 위 모듈을 더 이상 불러오지 않게 된다.


이 설정들은 *-available 디렉터리의 conf 파일과 load 파일들을 *-enabled 디렉터리로 심볼릭 링크(symbolic link)함으로써 활성화될 수 있다. 또한 이것들은 a2enmod/a2dismod, a2ensite/a2dissite, a2enconf/a2disconf에 의해 관리되어질 수 있다.


설정 변경 후에는 항상 아파치를 재시작해줘야 변경 내용이 저장된다.

아파치 시작, 정지, 재시작, 상태보기

우분투, 리눅스 민트데비안 계열 리눅스에서는

/usr/bin/apache2 restart

처럼 직접적으로 apache2를 부르는 것은 작동하지 않는다. 대신

/etc/init.d/apache2 start
/etc/init.d/apache2 stop
/etc/init.d/apache2 restart
/etc/init.d/apache2 status

와 같이 하여 아파치를 시작, 정지, 재시작, 상태보기를 해야한다.


/etc/init.d/apache2 restart

를 하면

[ ok ] Restarting apache2 (via systemctl): apache2.service.

라고 뜬다.


그 외에 데비안에서는

service apache2 restart
systemctl restart apache2.service

같은 형태도 된다. 그런데 이건 /etc/init.d/apache2 restart처럼 재실행됬다는 메시지가 뜨지 않아 제대로 작동했나 확인하기 어렵다. 그리고

apache2ctl restart

도 되기는 하는데 직접 실행해보면

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 123.123.123.123. Set the 'ServerName' directive globally to suppress this message

와 같은 에러가 뜬다. 왜냐하면 onion 주소이기 때문이다. 이 메시지가 안 뜨게 하려면 com이나 net과 같은 정상 인터넷 주소로 바꿔줘야 한다.


센트OS 등 다른 리눅스들에서는

/sbin/service httpd restart 
/etc/init.d/httpd restart 
service httpd restart
systemctl restart httpd.service
apachectl restart

와 같이 해야한다.

하드 링크, 심볼릭 링크

하드 링크심볼릭 링크를 만들고 삭제하는 방법은 리눅스 문서 참조.

주소 줄이기

  • 아파치 rewrite module 켜서 .htaccess 활성화하기(우분투 기준)

.htaccess를 사용하면 http://mywebsite.com/content/index.php?no=500http://mywebsite.com/content/500 와 같은 형식으로 바꿀 수 있다. 훨씬 간편한 주소가 되는 것이다.

https://mytory.net/archives/108


cd /etc/apache2
vim apache2.conf

하면 아래와 같은 내용이 나온다.

# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

log 파일

우분투에서 로그(log) 파일 경로는

/var/log/apache2/

이고, 센트OS에서는

/var/log/httpd/

이다.


우분투에서 아파치 설정시 로그 파일 경로는

${APACHE_LOG_DIR}

와 같이 적어주는데

/var/log/apache2/

라는 의미이다. 만약 $를 빼먹고

{APACHE_LOG_DIR}

라고 적으면

/etc/apache2/var/log/apache2/

라는 의미이다. 이 경로를 바꾸려면

/etc/apache2/envvars

파일을 수정하면 된다.


또는 로그 파일의 위치를

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined

처럼 적지 않고

ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log vhost_combined

처럼 적어도 된다. 센트OS의 경우는

ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log vhost_combined

와 같이 적으면 된다.


CustomLog는 말 그대로 사용자가 커스텀한 로그이므로 무엇을 기록할지 직접 지정해줘야 한다. 여기서는 vhost_combined나 combined로 지정해줬다. 그리고

CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

와 같은 식으로 여러개의 CustomLog를 기록하는 것도 가능하다. combined 등의 로그 포맷은 apache2.conf 파일이나 httpd.conf 파일에

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

와 같은 형식으로 지정되어 있다. 그냥 가장 많은 정보를 적는 combined를 설정해주면 되고, 가상 호스트(virtual host)로 동시에 여러개의 웹 싸이트를 운영할 경우에는 vhost_combined를 지정해주면 된다.

https://httpd.apache.org/docs/2.4/logs.html


  • combined: 아래의 3가지 로그 포맷을 모두 조합한 것이다. 접속자에 대해 많은 정보를 기록하길 원한다면 combined로 설정하면 된다.
  • common: 가장 일반적인 로그 기록
  • referer: 현재 아파치 서버에 접속하기 전에 머물렀던 URL을 기록한다.
  • agent: 접속자의 웹 브라우저(OS 포함) 종류를 기록한다.


그리고 센트OS에서는

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

처럼 %O 대신에 %b가 들어가있던데 차이가 뭔지는 모르겠다.


모듈 설치

PHP용 MySQL 모듈

우분투에서는 PHP와 MySQL을 연동해야 하므로

apt install php-mysql

해서 php-mysql 모듈을 설치해야 한다. php-mysql은 "PHP용 MySQL 모듈"(MySQL module for PHP)이라는 의미이다. 중간에 계속 설치할 거냐고 물어보면 y를 누른다.


센트OS에서도 PHP와 MySQL을 연동시켜야 한다.

yum install php71w-mysql

해서 PHP 7.1과 MySQL의 연동 모듈을 설치한다.

Apache용 PHP 모듈

우분투에서 PHP와 아파치 2를 연동하려면

apt install libapache2-mod-php

를 설치해야 한다. libapache2-mod-php의 설명을 보면 "아파치 2 모듈: 써버 싸이트 HTML 내장 스크맆팅 언어"(Apache 2 module: server-side, HTML-embedded scripting language)라고 되어있다. 이걸 설치 안 하면 웹 브라우저로 웹 싸이트에 접속했을 때 php 파일이 써버쪽 스크맆트 언어로 실행되는 게 아니라 그냥 텍스트 파일처럼 뜬다. 엔진엑스(nginx)에서는 libapache2-mod-php 대신에 php-fpm을 설치한다.

그 후 터미널에서

service apache2 restart

를 입력하여 아파치 2를 재시작시키면 된다.

참고로 말하자면

service apache2 start

는 아파치2 시작 명령,

service apache2 stop

은 아파치2 정지 명령이다.


센트OS에서는

yum install mod_php

를 설치해주면 되는데 아까

yum install php71w

해서 PHP 7.1 설치할 때 같이 설치되어 패키지 mod_php71w-7.1.10-1.w7.x86_64가 이미 설치되어있고, 그게 가장 최근 버전이라는 메시지가 뜨면서 아무 것도 하지 않는다. 이런 메시지가 뜨면 추가로 무언가를 할 필요는 없다.


mod_php는 "아파치 모듈로서의 PHP"를 의미한다.

Using PHP as an Apache module (called mod_php) : the PHP interpreter is then kind of "embedded" inside the Apache process : there is no external PHP process -- which means that Apache and PHP can communicate better.


그 후

service httpd restart

를 해서 아파치 2를 재시작시킨다.


Tor용 아파치 설정

Tor의 onino 주소를 가진 다크 웹 싸이트 제작을 위한 아파치 설정 및 사용 방법이다.

접속 IP 주소와 포트 설정

Listen: 우분투

ssh로 VPS에 접속된 상태에서

cd /etc/apache2/

해서 이동 후

vim ports.conf

를 해서

#Listen 12.34.56.78:80
Listen 80

이나

Listen 80

이라고 되어 있는 부분을 찾는다. 이건 80번 포트를 열어놓으라는 의미이다. 그리고 그것을

Listen 127.0.0.1:892
Listen 127.0.0.1:1004
#Listen 80

으로 바꾼다. #은 주석 처리, 즉 웹 써버 소프트웨어인 아파치에서는 무시하고 사용자만 볼 수 있게 가려놓는다는 의미이다. 주석 처리하면 해당 부분을 지운 것과 동일한 작동을 한다. 이렇게 하면 자신의 VPS의 IP 주소인 123.123.123.123의 80번 포트(port)로 들어오는 연결이 막힌다. 이게 무슨 의미냐 하면 크롬이나 인터넷 익스플로러에 123.123.123.123 주소를 쳐도 자신의 다크 웹 싸이트에 접속할 수 없다는 의미이다. 대신 토어(Tor)의 127.0.1.1 IP 주소의 892번 포트와 1004번 포트로만 접속을 허용하라는 의미이다.

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

처럼 892나 1004 외에 다른 열린 포트(Listen)가 있으면

#<IfModule ssl_module>
#        Listen 443
#</IfModule>

#<IfModule mod_gnutls.c>
#        Listen 443
#</IfModule>

와 같이 모두 주석처리하여 닫아준다.

:wq

해서 저장한다.

service apache2 restart

해서 아파치 2를 재시작하면 원래 표면 웹IP 주소다크 웹의 onion 주소로 모두 접속되던 웹 싸이트가 IP 주소로 접속을 시도하면

사이트에 연결할 수 없음
123.123.123.123에서 연결을 거부했습니다.
다음을 시도:
연결 확인
프록시 및 방화벽 확인
ERR_CONNECTION_REFUSED

라고 뜨는 것을 볼 수 있다. 물론 onion 주소로는 정상적으로 접속된다.

Listen: 센트OS

아래의 방법은 데비안 스타일로 센트OS에서 아파치를 설정한 것이다. 원래 CentOS에서는 접속 허용 IP 주소포트 설정, 가상 호스트 설정을 httpd.conf 파일에 직접 적고, 별도로 sites-available 폴더나 sites-enabled 폴더를 만들지 않는다. 따라서 전통적인 센트OS 방식으로 httpd.conf 파일에 모든 설정을 다 적을 생각이라면 httpd.conf 파일에 sites-enabled 디렉터리의 conf 파일을 불러오라는 내용인 IncludeOptional sites-enabled/*.conf 를 추가할 필요가 없다.


터미널에서

mkdir /var/www/html1
mkdir /var/www/html2

를 해서 디렉터리를 만든다. html1은 웹 싸이트 1이 들어갈 곳, html2는 웹 싸이트 2가 들어갈 곳이다.

vim /etc/httpd/conf/httpd.conf

해서

#Listen 12.34.56.78:80
Listen 80

위 내용을 찾아

Listen 127.0.0.1:892
Listen 127.0.0.1:1004
#Listen 80

로 바꾼다. 892와 1004 외에 열린 포트(Listen)가 있으면 모두 #을 쳐서 주석 처리하여 닫아준다.


그리고 맨 아래에

IncludeOptional sites-enabled/*.conf

를 추가한다.

가상 호스트

가상 호스트: 우분투

cd /etc/apache2/sites-available/

해서 sites-available 디렉터리로 이동한다. 그리고

cp 000-default.conf html1.conf
cp 000-default.conf html2.conf

하여 000-default.conf을 html1.conf와 html2.conf라는 이름으로 복사한다. 그리고

vim html1.conf

를 입력하여 html1.conf 파일을 수정한다.

<VirtualHost *:80>
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

라는 내용이 보일 것이다. 키보드 방향 키로 커서를 움직인 후 i나 a 키를 눌러 입력 모드로 전환한다. 그리고 위의 내용을 아래 내용으로 바꿔준다.

<VirtualHost 127.0.0.1:892>
        ServerName rapeyourdaughter.onion
        ServerAlias www.rapeyourdaughter.onion

        #ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html1

        ErrorLog ${APACHE_LOG_DIR}/error1.log
        CustomLog ${APACHE_LOG_DIR}/access1.log vhost_combined
</VirtualHost>

rapeyourdaughter.onion은 자신의 onion 주소로 적어주면 된다. 그리고 Esc 키를 눌러 명령 모드로 나온 후

:wq

를 입력하여 변경 내용을 쓰기(w, write)하고, 종료(q, quit)한다. 그 후

vim html2.conf

해서

<VirtualHost 127.0.0.1:1004>
        ServerName fuckyourtwowives.onion
        ServerAlias www.fuckyourtwowives.onion

        #ServerAdmin webmaster@localhost 
        DocumentRoot /var/www/html2

        ErrorLog ${APACHE_LOG_DIR}/error2.log
        CustomLog ${APACHE_LOG_DIR}/access2.log vhost_combined
</VirtualHost>

와 같이 html2.conf 파일을 바꿔준다. fuckyourtwowives.onion은 자신의 onion 주소로 적어주면 된다. 그리고

ln -s /etc/apache2/sites-available/html1.conf /etc/apache2/sites-enabled/html1.conf
ln -s /etc/apache2/sites-available/html2.conf /etc/apache2/sites-enabled/html2.conf

해서 sites-enabled 디렉터리에 html1.conf와 html2.conf 설정 파일에 대한 심볼릭 링크를 만들어준다. 심볼릭 링크를 만들어줄 때는 절대 경로로 만들어줘야지

cd /etc/apache2/sites-available
ln -s html1.conf ../sites-enabled/html1.conf

와 같이 상대 경로로 만들어주면 문제가 생기는 것 같다.

그 후

cd ../sites-enabled
rm 000-default.conf 

해서 000-default.conf 파일에 대한 심볼릭 링크도 지워버린다.


그 후 터미널에서

service apache2 restart

하여 아파치2를 재시작한다.

그리고 자신의 onion 주소로 접속해본다. 만약 안 되면

/etc/init.d/tor restart

토어를 재시작한다. 소스 코드로 설치했을 경우 kill 명령어로 tor 프로세스를 죽인 후, 엔터를 쳐준다. 그리고

~/tor

로 자신의 홈 디렉터리인 /root에 있는 tor 셸 스크맆트를 실행한다. Bootstrapped 100%: Done이라고 뜨면 엔터를 쳐준다.

가상 호스트: 센트OS

아래처럼 sites-available 폴더와 sites-enabled 폴더를 만드는 방식은 우분투리눅스 민트데비안 계열의 방식이고, 센트OS에서는 모든 설정을 httpd.conf에 때려박는다. 즉, 아래에 나와있는 것처럼 할 필요는 없고, <VirtualHost>와 </VirtualHost> 사이의 내용을 httpd.conf 파일에 적어주기만 해도 된다.


터미널에서

cd /etc/httpd/
mkdir sites-available
mkdir sites-enabled

해서 디렉터리 만들고

cd sites-available
vim html1.conf

해서

<VirtualHost 127.0.0.1:892>
    ServerName rapeyourdaughter.onion
    ServerAlias www.rapeyourdaughter.onion

    DocumentRoot /var/www/html1

    ErrorLog /var/log/httpd/error1_log
    CustomLog /var/log/httpd/access1_log vhost_combined
</VirtualHost>

라는 내용의 새 문서를 만든다. rapeyourdaughter.onion은 자신의 onion 주소로 적어주면 된다. 그리고

cp html1.conf html2.conf

해서 html1.conf 파일을 html2.conf라는 이름으로 복사하고

vim /etc/httpd/sites-available/html2.conf

해서 html2.conf의 내용을

<VirtualHost 127.0.0.1:1004>
    ServerName fuckyourtwowives.onion
    ServerAlias www.fuckyourtwowives.onion

    DocumentRoot /var/www/html2

    ErrorLog /var/log/httpd/error2_log
    CustomLog /var/log/httpd/access2_log vhost_combined
</VirtualHost>

와 같이 수정한다. fuckyourtwowives.onion은 자신의 onion 주소로 적어주면 된다.

위에서 만든 파일의 심볼릭 링크(symbolic link)를

ln -s /etc/httpd/sites-available/html1.conf /etc/httpd/sites-enabled/html1.conf
ln -s /etc/httpd/sites-available/html2.conf /etc/httpd/sites-enabled/html2.conf

를 해서 sites-enabled 디렉터리에 만든다.

apachectl restart

해서 아파치를 재시작한다.

접속 테스트

이제 정상적으로 접속이 되나 테스트해본다.

vim /var/www/html1/index.html

해서

<html>
    <head>
        <title>You are pretty...</title>
    </head>
    <body>
        <h1>I wanna fuck you!</h1>
    </body>
</html>

와 비슷한 형식으로 새 HTML 문서를 만든다. vim에서는 한글이 정상적으로 입력되지 않으니 그냥 영어로 쓰자. 이제 웹 싸이트에 접속했을 때 이 문서가 뜨나 확인해본다. 뜨면 모든 설정이 정상적으로 된 것이다. title에 있는 내용은 웹 브라우저 주소창 위의 맨 꼭대기 부분에 싸이트의 이름처럼 뜨는 내용이고, body는 웹 페이지에 보여지는 내용이다.


만약 이 index.html 파일을 지우려면 터미널에서

cd /var/www/html1/

을 입력하여 이동한다.

ls

를 입력하면

index.html

이 있는 게 보일 것이다.

rm index.html 

을 입력하여 삭제한다. 만약 하위 폴더가 있는 디렉터리를 지우려고 하면 그냥 rm 명령으로는 안 지워지고 rm -rf directory_name과 같이 해야 지워진다. directory_name 자리에는 해당 디렉터리의 이름을 적어주면 된다.

아파치 보안 설정

  • Apache server security: 10 tips to secure installation

OCTOBER 6, 2014

https://www.acunetix.com/blog/articles/10-tips-secure-apache-installation/


  • Apache Web Server Hardening & Security Guide

June 30, 2017

https://geekflare.com/apache-web-server-hardening-security/


  • apache 보안 설정

2008/11/06

http://sisan.egloos.com/1062585


아래의 보안 설정들을 변경한 후 변경 내용을 적용하기 위해서는 아파치를 재시작해야 한다.

우분투에서는

/etc/init.d/apache2 restart

하여 아파치를 재시작한다.


센트OS에서는

/etc/init.d/httpd restart

하여 아파치를 재시작한다.

server-info

http://yourpussyis4rape.onion/server-info 처럼 자신의 주소 뒤에 server-info를 붙여서 웹 브라우저로 접근해보면 웹 써버 설치일, 웹 써버 종류(아파치)와 버전, 운영 체제 종류, 설치한 모듈 등 각종 정보가 뜬다.


우분투의 경우 info.conf가 /etc/apache2/mods-available에는 있지만 /etc/apache2/mods-enabled로 심볼릭 링크(symbolic link)되어있지 않아 기본적으로 비활성 상태이다. 따라서 http://yourpussyis4rape.onion/server-info 로 접속해도 아무 것도 안 보인다.


mods-enabled 디렉터리에 심볼릭 링크되어있다고 가정하고, 어떻게 수정하는지는 실습해보자.


우선

cd /etc/apache2/mods-enabled/
rm info*

해서 info.conf와 info.load를 모두 지워버려도 된다. 이 두 파일은 심볼릭 링크이고, 원본은 mods-available 폴더에 있으니 나중에 필요하면 다시 심볼릭 링크를 만들어주면 된다.


또는

cd /etc/apache2/mods-enabled
vim info.load

하여

LoadModule info_module /usr/lib/apache2/modules/mod_info.so

#LoadModule info_module /usr/lib/apache2/modules/mod_info.so

로 수정하여 더 이상 아파치에서 로드하지 않게 만든다. 윈도우즈에서 바로가기를 클릭하면 원본 파일이 열리는 것처럼 리눅스에서도 심볼릭 링크vim에서 열어서 수정하면 원본 파일이 수정된다. 물론 바로가기를 삭제한다고 원본 파일이 삭제되지 않는 것처럼, 심볼릭 링크를 삭제한다고 원본 파일이 삭제되지는 않는다.


아니면

cd /etc/apache2/mods-enabled
vim info.conf

하여

       <Location /server-info>
               SetHandler server-info
               Require local
               #Require ip 192.0.2.0/24
       </Location>

처럼 뜬 것을

       #<Location /server-info>
               #SetHandler server-info
               #Require local
               #Require ip 192.0.2.0/24
       #</Location>

처럼 전부 #을 쳐서 주석 처리하여 무효화시켜도 된다.


센트OS에서는

vim /etc/httpd/conf/httpd.conf 

하여

httpd.conf에서
LoadModule info_module modules/mod_info.so

라는 내용을

#LoadModule info_module modules/mod_info.so

처럼 앞에 #을 쳐서 주석 처리하면 server-info가 안 뜬다.


그리고 아파치를 재시작한다.

server-status

http://yourpussyis4rape.onion/server-status 에 접속하는 것만으로도 운영 체제 종류, 서버 종류와 버전, 서버에 접속한 사람의 아이피 주소, 한 서버에 여러 개의 웹 싸이트를 운영하고 있다면 각 접속자 IP별로 어떤 웹 싸이트의 몇 번 포트로 접속했나 등 웹 싸이트의 엄청나게 많은 정보를 사람들이 볼 수 있다.


이걸 막으려면 우분투의 경우

cd /etc/apache2/mods-enabled/

로 이동 후

vim status.conf

하여

LoadModule status_module /usr/lib/apache2/modules/mod_status.so

앞에 #을 붙여

#LoadModule status_module /usr/lib/apache2/modules/mod_status.so

처럼 만들어 해당 모듈이 더 이상 로드되게하지 않으면 된다.


또는

cd /etc/apache2/mods-enabled/
vim status.conf

해서 status.conf 파일을 연 후

       <Location /server-status>
               SetHandler server-status
               Require local
               #Require ip 192.0.2.0/24
       </Location>

를 찾아서

       #<Location /server-status>
               #SetHandler server-status
               #Require local
               #Require ip 192.0.2.0/24
       #</Location>

처럼 #을 쳐서 전부 주석처리 한다.


아니면

cd /etc/apache2/mods-enabled/
rm status*

해서 status.conf와 status.load를 모두 지워버려도 된다. 이 두 파일은 심볼릭 링크이고, 원본은 mods-available 폴더에 있으니 나중에 필요하면 다시 심볼릭 링크를 만들어주면 된다.


그리고 아파치를 재시작한다.

ServerTokens

ServerTokens는 404 Not Found 등 아파치 웹 페이지 맨 아래에 뜨는 서버의 정보 중 어떤 게 표시될지 결정한다.


ProductOnly: 웹 서버 종류만 표시(Prod)

Minimal: 웹 서버 종류와 버전 정보 표시

OS: 웹 서버 종류와 버전, 운영 체제 정보 표시

Full: 웹 서버 종류와 버전, 운영 체제, 설치된 모듈 정보 표시


Full이 가장 많은 정보가 뜨고, Prod가 가장 적은 정보가 뜬다. 보통 기본 설정은 OS일 것이다. 즉, http://yourpussyis4rape.onion/rapeyou 처럼 아무 페이지에나 접속해보면

404 Not Found

Not Found
The requested URL /rapeyou was not found on this server.

처럼 뜨면서 그 아래 "웹 써버 종류와 버전, 운영 체제 정보, 웹 싸이트 주소, 포트 번호"가 뜰 것이다. 아래 경로는 우분투 기준이다.

cd /etc/apache2/conf-enabled
vim security.conf

하고

#ServerTokens Minimal
ServerTokens OS
#ServerTokens Full

를 찾아

#ServerTokens Minimal
#ServerTokens OS
#ServerTokens Full
ServerTokens Prod

다 #을 쳐서 주석 처리하고, 맨 밑에 ServerTokens Prod를 추가한다. 그리고

service apache2 restart

하여 아파치를 재시작한다.

그러면 404 Not Found 페이지 맨 밑에

Apache Server at yourpussyis4rape.onion Port 80

와 같이 웹 써버 종류(Apache), 웹 싸이트 주소, 포트 번호만 뜬다.


그리고 아파치를 재시작한다.

ServerSginature

ServerSignature는 서버 배너 정보를 나타내는 곳이다. 즉, 서버의 404 Not Found 페이지 등 아파치의 각종 웹 페이지의 맨 밑에 운영 체제와 웹 서버 종류 등이 찍히게 된다. 서버 정보를 은닉하기 원한다면 Off로 변경한다.

예) Server: IBM_HTTP_SERVER/1.3.28.1 Apache/1.3.28(Unix)

아래 경로는 우분투 기준이다.

cd /etc/apache2/conf-enabled
vim security.conf 

하고

#ServerSignature Off
ServerSignature On

를 찾아서

ServerSignature Off
#ServerSignature On

로 바꿔서 꺼버린다.


그리고 아파치를 재시작한다.


그 후 http://yourpussyis4rape.onion/rapeyou 에 접속해보면

404 Not Found

Not Found
The requested URL /rapeyou was not found on this server.

라고만 뜨고 그 밑에 웹 써버 정보가 하나도 뜨지 않는다.

directory listing

이걸 끄지 않으면 자신의 웹 싸이트의 디렉터리 내부를 마음대로 볼 수 있다. 예를 들어 http://yourpussyis4rape.onion/language 하면 /var/www/html/language 디렉터리 안의 폴더와 파일들을 볼 수 있다. 하지만 왜인지 우분투에서는 보이지 않는다. 그래도 일단 하는 방법은 알아두자.

<Directory /var/www/>
  Options +Indexes
</Directory>

와 같이 하면 디렉터리 리스팅이 켜진다.

<Directory /var/www/>
  Options -Indexes
</Directory>

와 같이 하거나 Indexes를 지우면 directory listing이 꺼진다.


아래 경로는 우분투 기준이다.

cd /etc/apache2
vim apache2.conf

해보면

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

처럼 되어있을 것이다. 그 중

Options FollowSymLinks

Options Indexes FollowSymLinks

Options -FollowSymLinks

Options -Indexes -FollowSymLinks

처럼 바꾼다.


웹 브라우저에서 사용자가 URL을 입력했을 경우, Apache 웹서버는 3가지 방법으로 응답한다. 정상적으로 웹 내용을 보여주든지, 디렉터리 리스트를 보여주든지, 에러 메시지를 보여준다. 원격의 공격자가 시스템에 대한 많은 정보를 획득할수록 보안 허점을 발견하기가 용이해 진다. 디렉토리 리스트를 보여주는 것 또한 불필요한 정보를 공격자에게 제공하여 공격에 이용될 수 있다. 백업 데이터, CGI 소스코드들, 필요에 의해 만들어놓은 심볼릭 링크 등 서버 관리자가 실수로 지우지 않은 파일들이 공격자의 손에 들어갈 수 있다. DocumentRoot 디렉토리 내의 모든 파일들이 리스팅되는 것을 방지하기 위해서 Options 지시자에서 Indexes 옵션을 제거하여야 한다.


몇몇 서버는 심볼릭 링크를 이용해서 기존의 웹 문서 이외의 파일시스템에 접근 가능하도록 하고 있다. 이러한 방법은 편리할 수는 있지만 심각한 보안 문제를 야기시킬 수 있다. 가령 시스템 자체의 root 디렉토리(/ )를 링크 걸게 되면 웹 서버 구동 사용자(예전 아파치는 nobody, 현재 센트OS의 아파치는 apache, 현재 우분투의 아파치는 www-data) 권한으로 모든 파일시스템의 파일에 접근할 수 있게 된다. 즉, /etc/passwd와 같은 대단히 민감한 파일까지 누구나 열람가능하게 된다. Options 지시자에서 심볼릭 링크를 가능하게 하는 옵션인 FollowSymLinks를 제거함으로써 이를 막을 수 있다.


그리고 아파치를 재시작한다.

https://wiki.apache.org/httpd/DirectoryListings

필요한 모듈만 활성화하기

아파치를 설치하면 많은 모듈(module)이 같이 설치되는데 필요없는 모듈은 비활성화하여 보안 위협을 줄인다. 많은 웹 써버 관리자들이 혹시 웹 써버에 오류가 뜰까봐 모든 모듈을 활성화해놓는데 보안상 좋지 않다.


우분투의 경우 필요없는 모듈은 mods-enabled 폴더에서 load 파일과 conf 파일을 삭제하면 된다. 이 두 파일은 심볼릭 링크이고, 원본은 mods-available 폴더에 있으니 나중에 필요하면 다시 심볼릭 링크를 만들어주면 된다.


센트OS의 경우 필요없는 모듈은 httpd.conf 파일에서 #을 쳐서 주석 처리하여 무효화시킨다. 예를 들어,

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule version_module modules/mod_version.so

와 같은 모듈들 앞에

#LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule version_module modules/mod_version.so

위와 같이 #을 치면 위 모듈들은 로드되지 않는다.


그리고 아파치를 재시작한다.

적절한 사용자와 그룹 사용하기

아파치는 기본적으로 데비안 계열에서는 www-data라는 디먼(daemon, demon) 사용자와 그룹으로, 센트OS 등 다른 리눅스에서는 apache라는 디먼 사용자와 그룹(daemon user and group)으로 실행되지만, root같은 관리자 계정(privileged account)이 아닌 일반 사용자 계정으로 실행하는 것이 더 낫다. 그리고 두 개의 프로세스(예를 들어 아파치와 마이SQL같은)가 하나의 사용자와 그룹으로 실행된다면 한 프로세스의 보안 결함을 이용하여 다른 프로세스에 대한 익스플로잇(exploit) 공격을 할 수도 있다. 아파치의 유저와 그룹은 CentOS에서는

/etc/httpd/conf/httpd.conf

User apache
Group apache

와 같은 형태로 들어있고, 데비안 계열에서는

/etc/aphche2/envvars

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

와 같은 형태로 들어있다. 유저와 그룹을 바꾸려면 위의 파일들을 수정하면 된다.

그리고 아파치를 재시작한다.

원하지 않는 서비스 제한하기

필요없는 서비스는 쓰지 않도록 제한을 걸어야 않다. 특히 특정 디렉터리에서만 사용하지 못 하게 하려면 센트OS에서는

/etc/httpd/conf/httpd.conf

파일에서, 우분투

/etc/apache2/apache2.conf

에서 <directory>의 Options에 -를 달아 추가해준다. 예를 들어, CGI execution, 심볼릭 링크(symbolic links), server side includes를 비활성화시키고 싶으면 아래와 같이 해준다.

<Directory /your/website/directory>
  Options -ExecCGI -FollowSymLinks -Includes
</Directory>

그리고 아파치를 재시작한다.

ModSecurity 사용하기

ModSecurity오픈 소스 모듈(module)이다. mod_security는 웹 애플리케이션 방화벽으로서 작동한다. 필터링, 서버 동일성 마스킹(server identity masking), 그리고 널 바이트 공격 방어(null byte attack prevention) 등 다른 기능을 포함한다. 실시간 트래픽 모니터링 또한 이 모듈에서 제공한다.

설치 방법은 https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual 를 참고하기 바란다.

업데이트

알려진 보안 문제에 대처하고, 새로운 보안 대책을 사용하기 위해, 항상 아파치를 최신 버전으로 유지해야 한다.


우분투의 경우

apt update

로 apt 목록을 업데이트하고

apt upgrade

apt로 설치한 모든 소프트웨어를 업그레이드하면 된다.

우분투에서

apt dist-upgrade

로 하는 배포판 업그레이드는 꼭 테스트 서버에서 테스트해서 업그레이드 후 정상 작동 여부를 확인하고 업그레이드 한다. 정상 작동하던 소프트웨어가 배포판 업그레이드 후 작동하지 않게 될 수도 있기 때문이다. 꼭 배포판 업그레이드가 아니더라도, 변화가 큰 업그레이드시에는 항상 정상 작동 여부를 테스트 서버에서 미리 테스트해봐야 한다.


센트OS의 경우

yum update

를 하면 yum으로 설치한 모든 소프트웨어를 업데이트한다.

로깅 활성화하기

접속자의 정보를 최대한 자세하게 기록하게 LogFormat을 설정하고, access.log에 기록되게 해놓는다.

설명

Apache HTTP Server

오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만드는 웹 서버 프로그램. 팀 버너스 리가 만든 최초의 웹 서버 프로그램인 "NCSA HTTPd"를 기반으로 만들어졌다.

팀 버너스 리의 NCSA HTTPd는 유닉스 기반으로 만들어졌기에, 아파치 HTTP 서버는 NCSA HTTPd를 리눅스에서도 돌리는 것을 목표로 만들어진 프로그램이다. 그 이후 리눅스와 함께 퍼져나갔고, 리눅스가 서버 OS의 최다 점유율을 차지하자 아파치도 자연스럽게 최다 점유율을 차지하게 되었다. 거의 모든 리눅스 배포본이 이 아파치를 지원한다.

아파치는 확장성이 상당히 좋은데, 모듈이라는 개념으로 수 많은 기능을 덧붙일 수 있다. 이 모듈을 통해 다른 프로그램과의 연동도 가능하다. 이 때문에 여러가지 서버 사이드 프로그래밍 언어데이터베이스 관리 시스템(DBMS)과도 궁합이 잘 맞았는데, 초창기에는 (Perl)이 대세였고, 피에이치피(PHP)가 그 뒤를 이었다. 그리고 오픈소스 DBMS인 마이에스큐엘(MySQL)이 나오자 아파치+PHP+MySQL을 통틀어 "APM"이라고 통칭하면서 웹 서버를 돌리기 위한 기본 3종 세트 비스무레하게 되었다. 물론 다른 언어와 다른 DBMS도 지원하지만, 저 조합이 가장 인지도가 높다.

라이선스는 GPL이 아닌 자체 라이선스를 쓴다. 아파치 라이선스라고 하는데, 아파치 소프트웨어 재단에서 만들었다는 사실을 밝히고 아파치 라이선스를 따르면 자유롭게 수정 및 재배포가 가능하다. 소스 공개 강제 사항도 없는 꽤 자유로운 라이선스다.

그러나 2.2 버전대에서 너무 무겁다는 평이 많아졌고, 빠른 속도를 내세운 nginx라는 웹 서버 프로그램이 새로 나오면서 아파치의 위기가 왔다. 그러나 아파치는 속도를 개선한 2.4 버전을 내놓으면서 거기에 대응하고 있다.

윈도우용도 나온다. 윈도우에도 APMSetup이라는 이름으로 아파치+PHP+MySQL을 통합 설치할 수 있는 패키지가 나와 있다. 셋 다 윈도우용이 나오기 때문에 가능한 것. 그러나 아무래도 리눅스 베이스로 만들어진 프로그램이다보니 윈도우에서는 제 속도가 나오지 않는다. 거기다 윈도우에는 MS가 자체적으로 만든 인터넷 정보 서비스(IIS)가 있기 때문에, IIS에 FastCGI 모듈로 PHP를 연결시켜서 돌리는 것이 보통이다. 이 때문에 PHP의 윈도우 버전은 IIS용과 Apache용이 따로 나온다.

활용

  • 리눅스 운영 체제, 아파치 웹 서버, MySQL 데이터베이스, PHP등으로 웹 서버를 운영하는 것을 각각의 머릿글자를 따서 LAMP라고도 부르기도 한다.
  • Tomcat, Resin 등의 웹 애플리케이션 서버와 같이 사용할 수 있다.
  • Open-SSL, Mod-SSL 을 설치하여, 보안을 강화할 수 있다. (http -> https)

점유율

아파치 웹 서버는 현재 세계에서 가장 인기있는 웹 서버이다. 2013년 5월 현재 세계 전체 웹 서버 중 53%를 차지하고 있다[1].

함께 보기

참고

바깥 고리