본문 바로가기
IT KNOWLEDGE

오픈소스 활용하기 (2) - Apache

by BTC_DIGIMON 2022. 4. 15.

안녕하세요:) 임오군란과 민씨 팀에서 임입니다.

이번 주에는 아파치 라이센스2.0의 오픈소스인 아파치의 사용 이유와 아파치를 잘 활용하고 취약점은 어떤 부분이 있는지 알아보겠습니다.

GPL 라이센스를 따르지 않고 자체 라이센스인 아파치 라이센스 2.0 특성상 아파치 재단의 모든 소프트웨어에 적용이 되며 소스코드의 의무는 발생하지 않는 다소 여유로운 라이센스에 속합니다. 다만 아파치 재단의 상표권 침해와 특허권에 대한 조항이 있어서 사용에 주의가 필요한 라이센스입니다.

목차

1. 개요

2. 기능 소개

3. 추가 옵션 및 모듈

1. 개요

아파치 웹서버(Apache Web Server)는 리눅스 기반의 무료 오픈소스 웹서버 소프트웨어입니다. 아파치재단에서 관리하고 있습니다. 아파치(Apache)는 미국 인디언 부족인 아파치족을 존경하는 의미를 담아서 만든 말입니다. 로고는 아파치족이 머리에 꽂는 깃털입니다. 나중에 아파치(Apache)는 "A Patchy Web Server"의 약자라는 설명(backronym)이 뒤늦게 생겨났습니다.

장점

  • 공개SW로 무료로 사용가능하며, 다른 상용 웹서버와 비슷한 성능 보유하고 있어서 개인적 용도와 상업적 용도 모두에서 자유로움
  • apache는 신뢰할 수 있는 소프트웨어이며, 활발히 유지되고 있기 때문에 자주 업데이트를 함. 새롭고 우수한 기능을 지속적으로 제공할 뿐만 아니라 보안 패치 및 취약점을 개선하기 위해 계속 업데이트 할 수 있는 기능도 있음
  • 다양한 추가 기능이 있으며 구축 용이하며, 유연한 모듈 지원(ex:암호 인증 및 디지털 인증서 지원, 오류 메시지를 사용자가 정의, 하나의 Apache 설치로 가상 호스팅 기능을 갖춘 여러 웹사이트를 제공, 프록시 모듈 사용, SSL 및 TLS를 지원하고 웹페이지 속도를 높이기 위해 GZIP 압축을 지원)
  • 처리 속도가 빠름
  • 트래픽 과부하에 강함

단점

  • 오픈소스 소프트웨어이기 때문에 문제가 발생했을 때 즉각적으로 해결하기 힘든 이슈일 경우 관리 비용이 더 증가할 수 있음
  • Apache Foundation에서 Documentation을 통해 기술적인 정보를 제공하지만, 주어진 환경에서 어느 부분의 어떤 값들을 수정해야 할 이슈를 해결하고 최적의 성능을 낼 수 있는지 알기가 매우 어려움
  • 좋은 성능을 가지고 있는 오픈소스 소프트웨어일지라도 체계적인 기술 체계가 갖추어져 있지 않다면 그 성능을 제대로 발휘할 수 없음

공식홈페이지 : https://www.apache.org

 

Welcome to The Apache Software Foundation!

Official ASF reports and statements, including Quarterly and Annual Reports, Vision Statement, "Apache is Open", 5-Year Strategic Plan, and more.

www.apache.org

2. 기능소개

  • 보안기능
    • SSL : 웹사이트와 브라우저 사이에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술
    • Proxy : 외부 네트워크에서 접속 요청이 들어왔을 때, 해당 요청을 내부 서버로 전달하는 중계기 역할을 담당
    • ACL : 개체나 개체 속성에 적용되어 있는 허가 목록을 말함. 이 목록은 누가 또는 무엇이 객체 접근 허가를 받는지, 어떠한 작업이 객체에 수행되도록 허가를 받을지를 지정
    • Dirctory 접근제한 : 웹서버가 제공하는 페이지, 경로에 대한 접근제한 설정.
  • 성능적인 측면
    • 리소스 분산처리, Cache, HTTP 표준설정
    • MPM, KeepAlive
  • 가상호스트 기능
    • 하나의 서버에 여러 도메인 운영, 서버호스팅
  • 운영적인 측면
    • ErrorDocument 지시자를 사용해 특정 에러 발생 시 특정 페이지로 전환
    • 사용자에게 편리하고 친절한 메시지를 표시
    • Access Log가 기록되어 접속한 클라이언트의 IP, 도메인 등 접속정보 분석 가능
  • 부가적인 기능
    • 유용한 Apache Module 등을 제공

3. 추가 옵션 및 모듈

configure 스크립트는 특정 플랫폼에서 아파치 웹서버를 컴파일하고 설치하기 위해 소스 트리를 구성한다. 아파치에서 제공하는 여러 옵션을 사용하면 원하는 요구조건에 맞게 서버를 컴파일 할 수 있습니다.

이러한 옵션에는 구성옵션, 설치 디렉토리 지정, 시스템 종류, 기능 선택, 지원 프로그램을 위한 옵션 등이 있습니다.

각 옵션별로 대표적으로 쓰이는 옵션에 대해서 알아보겠습니다.

구성옵션-configure 자체 행동에 영향을 준다

  • -cache-file=FILE : 검사 결과를 FILE 파일에 캐싱한다. 기본값은 검사 결과를 기록하지 않는다.
  • -help : 도움말을 출력하고 종료한다.
  • -version : 저작권 정보를 출력하고 종료한다.

설치 디렉토리-설치 디렉토리를 지정한다. 설치 위치는 선택한 구조에 따라 다름

  • -prefix=PREFIX : 아키텍처에 독립적인 파일을 PREFIX에 설치한다. 기본값(/usr/local/apache2)
  • -exec-prefix=EPREFIX : 아키텍처에 의존적인 파일을 EPREFIX에 설치한다. 기본값(PREFIX디렉토리)
  • 디렉토리 구조 지정
  • -enable-layout=LAYOUT : 설치 위치를 LAYOUT 구조에 따르도록 소스코드와 컴파일 스크립트를 구성 기본값(Apahe)

시스템 종류

  • -build=BUILD : 도구를 컴파일하는 시스템의 종류를 지정. 기본값(config.guess 스크립트의 결과)
  • -host=HOST : 서버를 실행할 시스템의 종류를 지정 기본값(BUILD)
  • -target=TARGET : TARGET시스템 종류를 위한 컴파일러를 만들 때 사용한다. 기본값(HOST)

기능 선택-이 옵션은 웹서버의 세부 기능을 조절

  • -disable-FEATURE : PEATURE 기능을 뺀다.
  • -enable-FEATURE[=ARG] : FEATURE 기능을 포함한다. ARG의 기본값은 yes이다.
  • -enable-MOUDULE=shared : 해당 모듈을 DSO 모듈로 컴파일한다.
  • -enable-MODULE=static : 포함하는 모듈은 기본적으로 정적으로 링크, 이 옵션을 사용하면 정적 링크르 강제

지원 프로그램을 위한 옵션

  • -enable-static-support : 지원 프로그램을 정적으로 링크된 실행파일로 만든다. 즉, 필요한 라이브러리를 모두 포함하도록 실행파일을 컴파일
  • -enable-suexec : 웹서버가 실행하는 프로세스의 uid와 gid를 설정하는 suexec를 사용하려면 옵션을 사용 *suid 실행파일의 보안상 위험을 모두 알지 못한다면 이 옵션 사용 미권장

기타 옵션

  • -enable-maintainer-mode : 디버깅 모드와 컴파일시 경고를 작동
  • -enable-mods-shared-MODULE-LIST : 동적공유모듈로 컴파일할 모듈 목록을 지정한다.
  • -enable-v4-mapped : IPv6소켓이 IPv4 연결을 처리할 수 있도록 한다.
  • -with-program-name : 다른 실행파일명을 지정한다. 기본값은(httpd)

다음은 모듈 관련 옵션입니다.

모듈에는 아파치에서 기본적으로 컴파일되기 때문에 사용하지 않는다면 명시적으로 빼줘야하는 모듈이 있고 모듈을 사용하려면 직접 혹은 most나 all 키워드를 사용하여 명시적으로 포함해야 하는 모듈이 있습니다. 또는 테스트용으로 개발자에게만 유용하며 기본적으로 포함하지 않는 모듈도 존재합니다.

이번 주제에서는 기본적으로 포함하는 모듈과 포함하지 않는 모듈에 대해서 알아보겠습니다.

기본적으로 포함하는 모듈

  • -disable-actions : mod_actions가 제공하는 요청에 대한 행동 기능을 사용하지 않는다.
  • -disable-alias : mod_alias가 제공하는 요청을 파일시스템의 다른 부분으로 대응하는 기능을 사용하지 않는다.
  • -disable-auth : mod_auth가 제공하는 사용자별 접근제어 기능을 사용하지 않는다.
  • -disable-access : mod_access가 제공하는 호스트별 접근제어 기능을 사용하지 않는다.
  • -disable-dir : mod_dir이 제공하는 디렉토리 요청 처리 기능을 사용하지 않는다.
  • -disable-env : mod_env가 제공하는 환경변수 설정/해제 기능을 사용하지 않는다.
  • -disable-http : HTTP 프로토콜을 처리하지 않는다.
  • -disable-log-config : mod_log_config가 제공하는 로그 설정을 사용하지 않는다. 모듈이 없으면 서버의 요청을 로그에 기록할 수 없다.

기본적으로 포함하지 않는 모듈

  • -enable-auth-anon : mod_auth_anon이 제공하는 익명사용자 접근 기능을 사용
  • -enable-cache : mod_cache가 제공하는 동적으로 생성하는 파일의 캐싱 기능을 사용한다. 부하가 많거나 프록시 서버를 캐싱하는 서버에게 유용할 수 있다.
  • -enable-disk-cache : mod_cache_disk가 제공하는 디스크 캐싱 기능을 사용한다.
  • -enable-file-cache : mod_file_cache가 제공하는 파일 캐싱 기능을 사용한다.
  • -enable-info : mod_info가 제공하는 서버정보 기능을 사용한다.
  • -enable-mem-cache : mod_mem_cache가 제공하는 메모리 캐싱 기능을 사용한다.
  • -enable-proxy : mod_proxy가 제공하는 프록시/게이트웨이 기능을 사용한다.
  • -enable-ssl : mod_ssl이 제공하는 SSL/TLS 기능을 사용한다.

해당 옵션 이외에도 다양한 옵션이 지원되고 있습니다.

자세한 내용은 https://httpd.apache.org/docs/2.4/programs/configure.html#supportopt 를 통해 확인할 수 있습니다.

댓글