기술 가이드

Ubuntu/Debian 서버에서 Logjam 취약점 방어하기

4 min read 서버 보안 업데이트됨 03 Oct 2025
Ubuntu/Debian에서 Logjam 방어 가이드
Ubuntu/Debian에서 Logjam 방어 가이드

TL;DR

서버에서 Diffie-Hellman(DH) 기반 Logjam 공격을 막으려면 고유한 DH 파라미터 파일을 생성하고(Apache, Nginx, Postfix, Dovecot, Pure-FTPd 등) 각 서비스의 암호화 설정에서 약한 암호화 조합을 비활성화하세요. 이 가이드는 명령어와 구성 위치를 단계별로 제공합니다. 주요 점검: dhparams.pem 생성, 각 서비스에 DH 파라미터 적용, 서비스 재시작.

소개

이 튜토리얼은 최근 발견된 Logjam 공격으로부터 Ubuntu 또는 Debian 리눅스 서버를 보호하기 위한 절차를 설명합니다. Logjam은 Diffie-Hellman 키 교환을 표적화하는 공격으로 HTTPS, TLS, SMTPS, SSH 등에서 영향을 줄 수 있습니다. 자세한 기술적 설명은 https://weakdh.org/에서 확인하세요.

이 가이드는 ISPConfig 3가 설치된 Debian/Ubuntu 시스템과 호환됩니다. 모든 명령은 셸에서 루트(root) 권한으로 실행해야 합니다.

사전 요구사항

  • 루트 또는 sudo 권한
  • openssl, apache2/nginx/postfix/dovecot/pure-ftpd 설치 여부 확인
  • /etc/ssl/private 디렉터리에 쓰기 권한

중요: 운영 중인 서버에서 설정 변경 전에 구성 파일과 인증서의 백업을 반드시 받아두세요.

고유한 DH 그룹 생성

서버를 보호하는 첫 단계는 openssl로 고유한 DH 그룹을 생성하는 것입니다. 예시에서는 /etc/ssl/private/dhparams.pem 파일을 사용합니다. 해당 디렉터리가 없으면 생성합니다:

mkdir -p /etc/ssl/private  
chmod 710 /etc/ssl/private

dhparams 파일을 생성하고 보안 권한을 설정합니다:

cd /etc/ssl/private  
openssl dhparam -out dhparams.pem 2048  
chmod 600 dhparams.pem

참고: 2048 비트는 현실적인 보안-성능 균형입니다. 더 높은 보안을 원하면 4096 비트를 고려하되 생성 시간이 크게 늘어납니다.

Apache 설정

먼저 weakdh.org 권장 사항 기반의 안전한 암호화 스위트를 추가합니다. /etc/apache2/mods-available/ssl.conf 파일을 열어 수정하세요:

nano /etc/apache2/mods-available/ssl.conf

다음 줄을 추가하거나 변경합니다: (SSLCipherSuite는 한 줄로 유지하세요)

SSLProtocol             all -SSLv2 -SSLv3  

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder     on

두 번째로 Apache에서 DH 파라미터를 설정합니다. SSLOpenSSLConfCmd 옵션은 Apache 2.4.8 이상과 OpenSSL 1.0.2 이상에서만 사용 가능합니다. 먼저 버전을 확인하세요:

apache2 -v

그리고 OpenSSL 버전도 확인:

openssl version

예시에서 Apache가 2.2.x이거나 OpenSSL이 1.0.1 같은 구버전이면 SSLOpenSSLConfCmd를 사용할 수 없습니다. 이 경우에도 SSLCipherSuite를 조정하는 것만으로도 약한 암호를 많이 비활성화할 수 있습니다.

Apache와 OpenSSL 버전이 조건을 충족하면 ssl.conf에 다음 줄을 추가하세요:

SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem"

그리고 Apache를 재시작합니다:

service apache2 restart

중요: SSLOpenSSLConfCmd를 활성화하면 Apache는 OpenSSL 구성에서 DH 파라미터를 직접 사용합니다. 버전 호환성을 먼저 확인하세요.

Nginx 설정

/etc/nginx/nginx.conf 파일을 열고 http { … } 블록 안에 다음을 추가 또는 교체하세요:

nano /etc/nginx/nginx.conf
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/private/dhparams.pem;

설정 후 Nginx를 재시작합니다:

service nginx restart

노트: Nginx 설정 파일의 위치는 배포판 및 패키지에 따라 달라질 수 있습니다(예: /etc/nginx/sites-enabled/*.conf). 전체 http 블록이 아닌 서버 블록에서 설정을 오버라이드하지 않도록 주의하세요.

Postfix 설정

Postfix에 안전한 암호화 스위트와 DH 파일을 지정하려면 다음 명령을 실행하세요:

postconf -e "smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA"  
postconf -e "smtpd_tls_dh1024_param_file = /etc/ssl/private/dhparams.pem"

그런 다음 Postfix를 재시작합니다:

service postfix restart

중요: 위 postconf 명령의 리스트는 기존 구성을 대체할 수 있으므로, 기존 설정을 확인하고 필요시 병합하세요.

Dovecot 설정

/etc/dovecot/dovecot.conf를 열고 ssl_protocols 항목 바로 뒤에 ssl_cipher_list를 추가하세요:

nano /etc/dovecot/dovecot.conf
ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Dovecot 버전을 확인하세요:

dovecot --version
  • 버전이 2.2.6 이상이면 다음을 추가하세요:
ssl_prefer_server_ciphers = yes
  • 버전이 2.2.7 이상이면 다음을 추가하세요:
ssl_dh_parameters_length = 2048

마지막으로 Dovecot을 재시작합니다:

service dovecot restart

Pure-FTPd 설정

Debian/Ubuntu의 pure-ftpd-wrapper 스크립트는 기본적으로 -J 옵션을 지원하지 않아 SSL Cipher Suite를 설정하기 복잡할 수 있습니다. 먼저 래퍼 스크립트에 -J 옵션을 추가합니다:

nano /usr/sbin/pure-ftpd-wrapper

스크립트에서 다음 줄을 찾습니다:

'TLS' => ['-Y %d', \&parse_number_1],

그 바로 아래에 다음 줄을 추가합니다:

'TLSCipherSuite' => ['-J %s', \&parse_string],

그다음 /etc/pure-ftpd/conf/TLSCipherSuite 파일을 생성하거나 편집하고 다음 암호 목록을 입력하세요:

nano /etc/pure-ftpd/conf/TLSCipherSuite
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

파일을 저장한 후 pure-ftpd를 재시작합니다(예시: MySQL 백엔드인 경우):

service pure-ftpd-mysql restart

주의: 배포판에 따라 서비스 이름이 pure-ftpd 또는 pure-ftpd-mysql 등으로 다릅니다.

테스트 및 검증

변경 후에는 외부 도구로 서버의 TLS 설정을 검사하세요. 예: Qualys SSL Labs, testssl.sh 같은 도구를 사용하면 취약점(예: Logjam, BEAST, POODLE 등) 여부를 확인할 수 있습니다.

간단한 로컬 확인 예시 (OpenSSL 사용):

openssl s_client -connect yourserver.example.com:443 -cipher ECDHE

정상적으로 연결되고 약한 DH 파라미터가 사용되지 않는지 로그와 인증서 체인을 확인하세요.

대안 및 예외 상황

  • OpenSSL 또는 Apache 버전 제약으로 SSLOpenSSLConfCmd를 못 쓰는 경우: 최소한 SSLCipherSuite/ssl_ciphers를 업데이트하여 약한 암호화를 비활성화하세요.
  • 완전한 키 교환 강제(예: 강력한 ECDHE 전용)를 원하면 서버와 클라이언트 호환성을 고려해야 합니다(구형 클라이언트 접속 불가 가능).
  • CPU 부담을 줄이려면 2048 비트를 기본으로 하고, 트래픽/성능 특성에 따라 4096을 신중히 검토하세요.

운영자별 체크리스트

  • 시스템 관리자
    • dhparams.pem 생성 및 권한 설정 확인
    • 각 서비스의 구성 파일 백업
    • 서비스 재시작 및 로그 확인
  • 보안 담당자
    • SSL/TLS 테스트 툴(SSL Labs/testssl.sh)로 검증
    • 취약 클라이언트 목록 파악 및 커뮤니케이션
  • 개발 팀
    • 애플리케이션 레벨에서 TLS 핸들링(예: 라이브러리 의존성) 점검

간단한 점검 절차(미니-방법론)

  1. 현재 버전 확인: apache2 -v, openssl version, dovecot –version
  2. dhparams.pem 생성(또는 재생성)
  3. 각 서비스의 암호화 스위트 업데이트
  4. DH 파라미터 적용 가능한 서비스에 적용
  5. 서비스 재시작 및 외부 검사 수행

결정 트리

flowchart TD
  A[서버 준비] --> B{OpenSSL >= 1.0.2?
  }
  B -- 예 --> C{Apache >= 2.4.8?}
  C -- 예 --> D[SSLOpenSSLConfCmd로 DH 적용]
  C -- 아니오 --> E[SSLCipherSuite만 적용]
  B -- 아니오 --> E
  E --> F[각 서비스에 ssl_ciphers/ssl_cipher_list 적용]
  D --> F
  F --> G[서비스 재시작 및 테스트]

수용 기준(검증 항목)

  • dhparams.pem 파일이 /etc/ssl/private에 존재하고 권한이 600으로 설정되어 있다.
  • Apache/Nginx/Postfix/Dovecot/Pure-FTPd 의 구성 파일에 권장 암호 목록이 반영되어 있다.
  • 외부 TLS 검사에서 Logjam 관련 취약점이 보고되지 않는다.

간단 용어집

  • Diffie-Hellman (DH): 두 쪽이 안전하게 공유 비밀을 만드는 키 교환 방식.
  • Logjam: DH의 약한 파라미터를 악용해 보안 세션을 약화시키는 공격.

요약

이 문서에서는 Logjam 공격을 완화하기 위해 고유한 DH 파라미터(dhparams.pem)를 생성하고, Apache/Nginx/Postfix/Dovecot/Pure-FTPd에 권장 암호 스위트를 적용하는 방법을 설명했습니다. 핵심은 버전 호환성을 확인하고(특히 OpenSSL/Apache), 구성 변경 후 반드시 외부 도구로 검증하는 것입니다.

중요: 운영 중인 시스템에서 변경하기 전 항상 구성과 데이터를 백업하세요.

참고 링크

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

EA AntiCheat 호환되지 않는 드라이버 오류 해결 가이드
문제 해결

EA AntiCheat 호환되지 않는 드라이버 오류 해결 가이드

안드로이드 폰을 모뎀처럼 사용하기 — 루팅 불필요
모바일

안드로이드 폰을 모뎀처럼 사용하기 — 루팅 불필요

Chromebook에 Linux 설치 가이드
튜토리얼

Chromebook에 Linux 설치 가이드

smartmontools로 SMART 모니터링 설정 가이드
시스템관리

smartmontools로 SMART 모니터링 설정 가이드

Ubuntu/Debian에서 Logjam 방어 가이드
서버 보안

Ubuntu/Debian에서 Logjam 방어 가이드

다크스카이(Dark Sky) 초단기 강수 예보 가이드
날씨

다크스카이(Dark Sky) 초단기 강수 예보 가이드