Red Hat Enterprise Linux

Deployment Guide

Copyright © 2008 Red Hat, Inc. This material may only be distributed subject to the terms and conditions set forth in the Open Publication License, V1.0 or later with the restrictions noted below (the latest version of the OPL is presently available at http://www.opencontent.org/openpub/).

Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder.

Red Hat and the Red Hat "Shadow Man" logo are registered trademarks of Red Hat, Inc. in the United States and other countries.

All other trademarks referenced herein are the property of their respective owners.

The GPG fingerprint of the security@redhat.com key is:

CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E

1801 Varsity Drive RaleighNC 27606-2072 USA Phone: +1 919 754 3700 Phone: 888 733 4281 Fax: +1 919 754 3701 PO Box 13588 Research Triangle ParkNC 27709 USA

January 2008

고친 과정
고침 5.2-11 Wed May 21 2008 Michael Hideo
Smith
Resolves: #232215
Changing from XML to HTML Single with floating Table of Contents and viewable by browser
초록

This Deployment Guide documents relevant information regarding the deployment, configuration and administration of Red Hat Enterprise Linux 5.2.


머리글
1. 여러분의 의견을 기다리고 있습니다
I. 보안 및 인증
1. 보안 개요
1.1. 취약성 평가
1.1.1. 적의 마음으로 생각하기
1.1.2. 평가와 테스팅 정의하기
1.1.3. 도구를 평가하기
1.2. 일반 보안 취약점과 공격
1.3. 보안 업데이트
1.3.1. 패키지 업데이트하기
2. 네트워크 보안
2.1. 서버 보안
2.1.1. TCP 래퍼와 xinetd를 사용하여 서비스 보안 강화하기
2.1.2. Portmap 보안 강화
2.1.3. NIS 보안 강화
2.1.4. NFS 보안 강화
2.1.5. Apache HTTP 서버 보안 강화
2.1.6. FTP 보안 강화
2.1.7. Sendmail 보안 강화
2.1.8. 청취 중인 포트 확인하기
2.2. PAM (Pluggable Authentication Modules)
2.2.1. PAM의 장점
2.2.2. PAM 설정 파일
2.2.3. PAM 설정 파일 포멧
2.2.4. PAM 설정 파일의 예
2.2.5. PAM 모듈 생성
2.2.6. PAM 및 관리자 인증 캐싱
2.2.7. PAM 및 장치 소유권
2.2.8. 추가 자료
2.3. 가상 사설 통신망 (Virtual Private Networks)
2.3.1. VPN은 어떻게 작동합니까?
2.3.2. VPN 및 Red Hat Enterprise Linux
2.3.3. IPsec
2.3.4. IPsec 연결 생성하기
2.3.5. IPsec 설치
2.3.6. IPsec 호스트 간 설정
2.3.7. IPsec 네트워크 간 설정
2.3.8. IPsec 연결 시작하기 및 중지하기
2.4. IPTables
2.4.1. 패킷 필터링 (Packet Filtering)
2.4.2. IPTables과 IPChains의 다른점
2.4.3. IPTables에 대한 명령 옵션
2.4.4. IPTables 규칙 저장하기
2.4.5. IPTables 제어 스크립트
2.4.6. IPTables 및 IPv6
2.4.7. 추가 자료

머리글

Red Hat Enterprise Linux 활용 가이드에 오신 것을 환영합니다!

Red Hat Enterprise Linux 활용 가이드에는 Red Hat Enterprise Linux 시스템을 사용자의 요구에 맞게 사용자 설정하는 방법에 관한 정보가 포함되어 있습니다. 시스템 설정 및 사용자 설정에 대한 포괄적이고, 실전 중심의 가이드를 찾고 계신 경우, 이 메뉴얼을 사용하시기 바랍니다.

이 가이드는 사용자가 Red Hat Enterprise Linux 시스템에 관해 기본적인 내용을 이해하고 있다고 간주합니다. Red Hat Enterprise Linux 설치를 위한 도움이 필요하실 경우, Red Hat Enterprise Linux 설치 가이드를 참조하시기 바랍니다.

1. 여러분의 의견을 기다리고 있습니다

만일 Red Hat Enterprise 활용 가이드에서 오자를 발견하셨거나, 더 좋은 메뉴얼을 만들기 위한 제안이 있으시다면, 언제든지 저희에게 연락해 주십시오! 활용 가이드에 대한 리포트를 버그질라(Bugzilla)에 제출해 주시기 바랍니다. (http://bugzilla.redhat.com/bugzilla/)

자료 문서 개선을 위한 제안이 있으시면, 최대한 명확히 설명해 주시기 바랍니다. 오류를 발견하셨다면, 저희가 쉽게 식별할 수 있도록 섹션 번호와 주위의 문장들을 함께 보내주시기 바랍니다.

부 I. 보안 및 인증

시스템 관리자는 필요 시스템, 서비스, 데이터에 대한 보안이 필요하며 Red Hat Enterprise Linux는 포괄적인 보안 전략의 일부분으로서 그에 맞는 다양한 도구 및 방식을 제공합니다.

이 장에서는 Red Hat Enterprise Linux 의 관점에서 보안에 관해 전반적으로 소개하고 있습니다. 이는 보안 평가, 일반적 사용, 침입 및 사고 대응에 관한 개념적 정보를 제공함은 물론, 워크스테이션, 서버, VPN, 방화벽 및 기타 다른 기능 실행을 강화하기 위해 SELinux 를 사용하는 방법에 관한 개념적이고 자세한 설정 정보도 제공합니다.

이 장에서는 IT 보안에 관한 기본적인 지식을 갖고 있다고 간주하여 물리적 접근 제어하기, 철저한 계정 유지 정책 및 절차, 감사 (auditing) 등과 같이 일반적인 보안 사항에 대해 최소한의 정보만을 제공합니다. 이와 관련된 정보는 외부 참고 자료로 마련되어 있습니다.

1장. 보안 개요

기업을 운영하고 개인 정보를 관리함에 있어서 네트워크로 연결된 강력한 컴퓨터의 사용이 나날이 증가하고 있습니다. 대부분의 모든 산업 생산이 네트워크와 컴퓨터 보안을 중심으로 이루어 집니다. 기업체들은 보안 전문가의 지식과 기술을 바탕으로 시스템을 점검하고 각 기업체에서 필요로 하는 운영 체제 요건에 맞게 이를 적절히 설정합니다. 대부분의 기업체는 직원들이 회사 IT 자원을 지역적으로나 원격적으로 액세스하는 끊임없이 변화하는 환경을 갖추고 있습니다. 따라서 그 어느 때 보다 컴퓨터 시스템 보안에 대한 필요성이 매우 강조되고 있습니다.

그러나 불행히도 개인 사용자는 물론 대부분의 기업에서는 컴퓨터 용량을 늘여 생산성을 높이는데 더 중점을 두고 예산 문제로 컴퓨터 보안의 중요성을 간과하고 있습니다. 종종 postmortem (사후 검토) —로써 이미 시스템에 제 3자가 침입한 후에 적절한 보안 조치를 취하는 경우가 많습니다. 컴퓨터 보안 전문가들은 인터넷과 같이 신뢰할 수 없는 네트워크에 연결하기 이전에 적절한 보안 조치를 취하는 것이 대부분의 침입을 방지할 수 있는 최선의 방법이라고 동의합니다.

1.1. 취약성 평가

충분한 시간, 자원과 동기만 있다면 크래커는 거의 어느 시스템이든 침입 가능합니다. 결국 현재 사용되는 어느 보안 절차와 기술로도 시스템이 침입당하지 않으리라고 보장하지 못합니다. 라우터는 인터넷으로부터 게이트웨이를 보호해주며 방화벽은 네트워크의 보안을 도와줍니다. 가상 사설 네트워크는 데이터를 암호화된 스트림으로 안전하게 전달해주며 수상한 활동이 탐지되었을 경우 여러분께 경고해주도록 침입 탐지 시스템을 사용할 수 있습니다. 그러나 다음과 같은 여러 변수에 따라 이러한 기술의 성공적인 사용 여부가 좌우됩니다:

  • 기술을 설정하고 모니터하며 관리할 수 있는 전문 기술자

  • 서비스와 커널을 신속하고 효율적으로 패치하고 업데이트할 수 있는 능력

  • 네트워크 활동을 계속적으로 경계할 수 있는 담당자

데이터 시스템과 기술이 매우 동적으로 변화되기 때문에 회사 자원을 안전하게 지키는 작업은 결코 쉽지가 않습니다. 이러한 복잡한 문제로 인하여 회사 시스템 전부를 잘 이해하는 전문가를 찾기가 힘든 경우가 있습니다. 고급 수준의 다양한 영역의 정보 보안에 대하여 알고 있는 직원을 채용하는 것은 가능하지만, 여러 보안 영역의 전문가를 채용하는 것은 쉽지 않습니다. 그 이유는 각 정보 보안 분야가 멈추치 않고 변화하기 때문에 계속적인 관심과 집중을 필요로하기 때문입니다.

1.1.1. 적의 마음으로 생각하기

여러분이 회사 전체의 네트워크를 책임지고 있다고 가정합시다. 기업체 네트워크는 일반적으로 운영 체제, 응용 프로그램, 서버, 네트워크 모니터, 방화벽, 침임 탐지 시스템 등으로 구성됩니다. 이제 이러한 모든 요소들을 계속해서 감시한다고 상상해 보십시오. 오늘날 소프트웨어와 네트워킹 환경의 복잡성을 감안할때 보안 침입이나 버그가 발생할 가능성을 부인할 수 없습니다. 따라서 여러 시스템으로 이루어진 큰 기업체에서 전체 네트워크를 계속적으로 패치하고 업데이트하는 것이 얼마나 힘든 작업인가를 상상하실 수 있으실 것입니다.

이처럼 시스템을 계속적으로 감시하는 작업과 여러 분야의 보안 전문가를 찾는 어려움을 결합하여 보았을때 시스템 보안 침해가 발생하여 데이터가 손상되고 서비스가 중단되는 문제를 피할 수 없습니다.

보안 기술을 증대시키고 시스템, 네트워크 및 데이터 보안을 돕기 위하여 자신이 크래커라면 어떠한 시스템 헛점을 악용하여 보안을 침해할 것인지 한번 생각해 보십시오. 여러분의 시스템과 네트워크 자원에 예방적인 취약성 평가를 해봄으로서 잠재적으로 문제가 될 만한 사항들을 크래커가 헛점으로 사용하기 전에 미리 발견할 수 있습니다.

만일 집안의 취약성 평가를 수행하신다면 문들이 제대로 닫혀있는지 잠겨있는지를 확인하실 것입니다. 또한 창문들도 모두 완전히 잠겼는지 제대로 빗장이 걸려있는지 확인하실 것입니다. 이러한 동일한 개념이 시스템, 네트워크 및 컴퓨터 데이터에도 적용됩니다. 악의를 지닌 시스템 침입자는 여러분의 데이터를 훔쳐가는 도둑입니다. 침입자가 사용하는 도구가 무엇인지, 어떠한 생각을 하고 있는지 침입한 동기는 무엇인지를 먼저 생각해보신 후 즉각적으로 조치를 취하시기 바랍니다.

1.1.2. 평가와 테스팅 정의하기

취약성 평가는 다음과 같은 두가지 유형으로 구분될 수 있습니다: 외부에서 내부를 평가하기내부에서 외부를 평가하기.

외부에서 취약성 평가를 수행시 외부에서 여러분이 직접 여러분의 시스템으로 침입을 시도한다고 가정해보십시오. 회사 외부에서 침입을 시도함으로서 크래커의 관점을 이해할 수 있게 됩니다. 크래커가 보고 있는 사항들 — 공개적으로 라우팅가능한 IP 주소, DMZ 상에 위치한 시스템, 방화벽의 외부 인터페이스 등을 알아볼 수 있습니다. DMZ는 "비무장 지대(demilitarized zone)"의 줄임말로서 신뢰할 수 있는 내부 네트워크 (예, 회사 사설 LAN)와 신뢰할 수 없는 외부 네트워크 (공공 인터넷) 사이에 위치하는 컴퓨터나 소규모 하부 네트워크를 말합니다. 일반적으로 DMZ에는 웹(HTTP) 서버, FTP 서버, SMTP (이메일) 서버 및 DNS 서버와 같이 인터넷 트래픽을 처리하는 장치가 위치합니다.

내부에서 취약성 평가를 수행하시는 경우 여러분이 내부에 위치하며 신뢰받는 위치에 있으므로 어느정도 유리한 입장에 있습니다. 이것이 여러분이나 함께 근무하는 직원이 시스템에 로그인시 위치하게 되는 지점입니다. 프린트 서버, 파일 서버, 데이터베이스 및 다른 자원을 살펴보는 것이 가능합니다.

이러한 두 가지 유형의 취약성 평가 사이에는 두드러진 차이점이 있습니다. 회사 내부에 위치하면 외부 사용자보다 많은 권한을 갖게 됩니다. 오늘날 대부분의 기업체에서는 외부인의 침입을 막을 수 있도록 보안을 설정합니다. 그러나 기업 내부에서의 침입을 막을 수 있는 조치를 거의 취하지 않고 있습니다 (예, 부서마다 방화벽 설치, 사용자-수준 접근 제어, 내부 자원을 위한 인증 절차 등). 일반적으로 대부분의 시스템은 회사 내부에 위치하므로 내부에서 보다 많은 자원을 찾을 수 있습니다. 만일 회사 외부에서 접근을 시도하시면 즉시 신뢰할 수 없는 상태로 간주됩니다. 회사 외부에서 접근 가능한 시스템과 자원은 일반적으로 매우 제한되어 있습니다.

취약성 평가와 침입 데스트 간의 차이점을 생각해 보십시오. 취약성 평가를 침입 데스트를 위한 첫번째 단계로 간주할 수 있습니다. 취약성 평가를 통해 수집한 정보는 테스팅에 사용됩니다. 취약성 평가에서는 보안 헛점과 잠재적 취약점을 찾는 반면, 침입 데스팅에서는 실제로 발견된 취약점을 사용하여 침입을 시도합니다.

네트워크 기반 구조를 평가하는 작업은 동적인 과정입니다. 정보 보안 및 물리적 보안 모두 동적이라 할 수 있습니다. 네트워크 평가를 수행함으로서 존재하지 않는 위험성이 보고되거나 존재하는 위험성이 보고되지 않는 경우를 발견할 수 있습니다.

보안 관리자는 자신의 지식과 보안 관리를 위해 사용되는 도구에 의존하고 있습니다. 현재 사용 가능한 평가 도구 중 하나를 한번 시스템 상에 실행시켜 보십시오. 거의 매번 보고된 문제점 중 최소한 몇 개는 존재하지 않는 문제점입니다. 프로그램이 잘못되었거나 사용자의 잘못인지 여부를 떠나서 결과는 언제나 같습니다. 도구는 실제로는 존재하지 않는 취약점을 찾아내거나 (false positive); 또는 실제로는 존재하는 취약점을 찾아내지 못하는 경우 (false negative)가 있습니다.

이제 취약성 평가와 침입 테스트 간의 차이점을 알아보았으니 평가 후 찾아낸 사항들을 주의깊게 검토한 후 침투 테스트를 실행해 보시기 바랍니다.

경고

생산 자원의 취약점을 이용하여 침입 테스트를 시도하시면 회사 시스템과 네트워크의 생산성과 효율성에 반대 영향을 미칠 수 있으니 주의하십시오.

다음 목록에서는 취약성 평가를 수행함으로서 받을 수 있는 여러 가지 혜택을 설명하고 있습니다:

  • 정보 보안에 대해 사전 대처할 수 있음

  • 크래커가 찾아내기 전에 잠재적 취약점을 찾아낼 수 있음

  • 시스템이 항상 업데이트되고 패치될 수 있음

  • 직원의 전문적 기술을 증대시키는데 도움이 됨

  • 재정적 손실과 부정적인 회사 이미지를 줄일 수 있음

1.1.2.1. 방법론 수립

취약성 평가에 사용될 도구 선택을 위하여 취약성 평가 방법론을 먼저 수립하시기 바랍니다. 불행히 아직 미리 정의되거나 산업체에서 인증받은 방법이 존재하지 않지만 일반 상식과 실행 결과만으로도 평가 방법론에 대한 충분한 길잡이가 될 수 있습니다.

어느 시스템을 상대로 하는가? 한 개의 서버를 상대하는가 또는 전체 네트워크 및 그 네트워크 내의 모든 시스템을 상대로 하는가? 현재 회사 외부에 위치하고 있는가 내부에 위치하고 있는가? 이러한 질문에 대한 해답을 찾는 것은 사용할 적절한 도구를 찾는데 도움이 될 뿐만 아니라 그 도구를 어떠한 방법으로 사용할 지 결정 가능하게 합니다.

방법론 수립에 대한 보다 많은 정보를 원하신다면 다음 웹사이트를 참조하시기 바랍니다:

1.1.3. 도구를 평가하기

평가 과정은 정보 수집 도구를 사용함으로서 시작됩니다. 전체 네트워크를 평가하실 때에는 우선 실행 중인 호스트를 찾아내기 위해 네트워크 배치를 자세히 살펴보십시오. 일단 호스트를 찾으면 각 호스트를 개별적으로 검사해보십시오. 호스트 검사를 위해서는 또 다른 도구를 사용하셔야 합니다. 어떠한 도구를 사용하느냐에 따라서 호스트의 취약성을 찾아내는데 중요한 역할을 합니다.

일상 생활에서와 마찬가지로 동일한 작업을 수행하는데 여러 다른 도구를 사용할 수 있습니다. 취약성 평가를 수행시에도 마찬가지 입니다. 운영 체제에 특별히 사용되는 도구가 있으며 또한 응용 프로그램 및 심지어는 사용된 프로토콜에 따라서 네트워크에 특별히 사용되는 도구도 따로 존재합니다. 일부 도구는 사용이 무료이며 유료인 도구도 있습니다. 어떠한 도구는 직관적으로 이해가 가능하며 사용하기 쉽지만, 일부 다른 도구는 애매하며 제대로 문서화되어 있지 않아 사용하기 힘들지만 다른 도구가 가지지 않는 특별한 기능을 갖추고 있기도 합니다.

올바른 도구를 찾는 것은 어려운 작업일 수 있지만, 결국 얼마나 경험이 있느냐에 달려있습니다. 가능하면 실험실을 설립하여 최대한 많은 도구를 시험하여 각 도구의 장점과 단점을 기록해 놓으십시오. 각 도구의 README 파일이나 메뉴얼 페이지를 검토하는 것도 잊지 마십시오. 마지막으로 인터넷에서 기사, 단계별 설명서 또는 메일링 리스트에 이르기까지 특정 도구에 대한 추가 정보를 얻으시기 바랍니다.

다음에 설명되는 도구는 사용 가능한 도구 중 일부 예시입니다:

1.1.3.1. nmap을 사용하여 호스트 스캐닝하기

nmap은 Red Hat Enterprise Linux에 포함된 네트워크 배치를 찾아내기 위해 자주 사용되는 도구입니다. nmap은 수년간 사용되어져 왔으며 아마도 가장 흔히 사용되는 정보 수집용 도구입니다. 메뉴얼 페이지를 보시면 옵션과 사용법에 대한 자세한 정보를 찾으실 수 있습니다. 관리자는 네트워크 상에서 nmap을 사용하여 호스트 시스템과 호스트 시스템 상에서 열려진 포트를 찾아낼 수 있습니다.

nmap은 취약성 평가의 첫단계로 사용하기에 모자람이 없는 훌륭한 도구입니다. 네트워크 내의 모든 호스트를 찾고 심지어는 특정 호스트에서 실행 중인 운영 체제를 찾기 위한 옵션도 전달 가능합니다. nmap은 보안 서비스를 사용하고 사용되지 않는 서비스는 멈추는 정책을 수립하는데 좋은 기반이 됩니다.

1.1.3.1.1. nmap 사용법

nmap은 쉘 프롬프트에서 실행 가능합니다. 쉘 프롬프트에서 nmap 명령과 스캔할 시스템의 호스트명이나 IP 주소를 입력하십시오.

nmap foo.example.com

스캔 결과는 다음과 같이 나타날 것입니다 (호스트의 위치에 따라서 몇 분이 소요될 수도 있습니다):

Starting nmap V. 3.50 ( www.insecure.org/nmap/ ) Interesting ports on localhost.localdomain (127.0.0.1): (The 1591 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 25/tcp open smtp 111/tcp open sunrpc 443/tcp open https 515/tcp open printer 950/tcp open oftep-rpc 6000/tcp open X11 Nmap run completed -- 1 IP address (1 host up) scanned in 71.825 seconds

nmap은 대부분의 일반 네트워크 통신 포트를 테스트하여 서비스를 청취하거나 대기 중인 포트가 있는지 찾아냅니다. 이는 관리자가 불필요하거나 사용되지 않는 서비스를 닫는데 매우 유용합니다.

nmap과 관련된 보다 많은 정보를 원하신다면 다음 URL에서 공식 홈페이지를 찾아보시기 바랍니다:

http://www.insecure.org/

1.1.3.2. Nessus

Nessus는 전체 서비스 보안 스캐너입니다. Nessus는 플러그인 구조로 되어있기 때문에 사용자가 자신의 시스템과 네트워크에 맞게 사용자 정의 가능합니다. 다른 스캐너와 마찬가지로 Nessus는 침입탐지 패턴 데이터베이스에 의존하지만, 다행히도 Nessus는 자주 업데이트됩니다. 완전한 보고 기능, 호스트 스캐닝, 실시간 취약성 검색과 같은 기능을 제공합니다. Nessus처럼 자주 업데이트되고 강력한 도구라 해도 잘못된 결과 (존재하지 않는 취약점을 보고하거나 존재하는 취약점을 발견하지 못하는 결과)를 보고할 가능성이 있습니다.

알림

Nessus는 Red Hat Enterprise Linux에 포함되어 있지 않으며 지원되지 않습니다. 이 문서에서는 이 응용 프로그램을 사용하고자 하시는 사용자를 위한 참고 자료로서 언급되었습니다.

Nessus와 관련된 보다 많은 정보를 원하신다면 다음 URL에서 공식 홈페이지를 찾아보시기 바랍니다:

http://www.nessus.org/

1.1.3.3. Nikto

Nikto은 훌륭한 CGI(common gateway interface) 스크립트 스캐너입니다. Nikto는 CGI 취약점을 확인하는 기능을 갖추고 있을 뿐만 아니라 침입 탐지 시스템의 눈에 띄지 않고 찾아내기 어려운 방법을 사용합니다. 이 프로그램은 훌륭한 문서 자료가 함께 나와 있으므로 프로그램을 실행하시기 전에 주의깊게 읽어보시기 바랍니다. CGI 스크립트를 사용하는 웹 서버를 찾으신다면 Nikto를 사용하여 이 서버의 보안을 확인해보실 수 있습니다.

알림

Nikto는 Red Hat Enterprise Linux에 포함되어 있지 않으며 지원되지 않습니다. 이 문서에서는 이 응용 프로그램을 사용하고자 하시는 사용자를 위한 참고 자료로서 언급되었습니다.

Nikto에 대한 보다 자세한 정보는 다음 URL에서 찾으실 수 있습니다:

http://www.cirt.net/code/nikto.shtml

1.1.3.4. VLAD 스캐너

VLAD는 Bindview, Inc 사의 RAZOR 팀에서 개발한 스캐너로서 취약성을 검사하는데 사용됩니다. 이 프로그램은 가장 흔한 보안 문제점 중 SANS 최상위 열가지 문제점 (SNMP 문제, 파일 공유 문제점 등)을 찾아냅니다. VLAD는 Nessus 만큼 완전한 기능을 갖추고 있지는 않지만 조사해 볼만한 가치가 있습니다.

알림

VLAD는 Red Hat Enterprise Linux에 포함되어 있지 않으며 지원되지 않습니다. 이 문서에서는 이 응용 프로그램을 사용하고자 하시는 사용자를 위한 참고 자료로서 언급되었습니다.

VLAD에 대한 보다 자세한 정보는 RAZOR 팀 웹사이트인 다음 URL에서 찾으실 수 있습니다:

http://www.bindview.com/Support/Razor/Utilities/

1.1.3.5. 향후 필요한 사항을 미리 준비하십시오.

여러분의 목표와 자원에 따라서 여러 다른 도구를 사용 가능합니다. 무선 네트워크, Novell 네트워크, Windows 시스템, 리눅스 시스템 등에 따른 여러 다른 도구가 있습니다. 평가 수행의 또 다른 중요한 부분은 물리적 보안을 검토하고 직원을 살펴보고 음성/PBX 네트워크를 평가하는 것입니다. war walking 무선 네트워크 취약점을 살펴보기 위해 기업체의 물리적 구조의 경계를 스캐닝하는 작업과 같은 새로운 개념을 조사해보시고 필요하다면 여러분의 평가 계획에 통합하십시오. 취약성 평가를 계획하고 수행하는 데는 여러분의 상상력과 경험 외에는 한계가 없습니다.

1.2. 일반 보안 취약점과 공격

표 1.1. “보안 취약점” 침입자가 다른 기관의 컴퓨터 네트워크 등을 이용해 불법으로 자료를 유출하는데 가장 흔히 사용하는 침입 방법에 대한 내용입니다. 이러한 일반 보안 취약점에서 중요한 점은 침입이 행해진 방법과 시스템 관리자가 이러한 공격에 대비하여 자사의 네트워크를 적절히 보호할 수 있는 방법을 찾는 것입니다.

보안 취약점 설명 알림
암호가 없거나 디폴트 암호를 사용하는 경우 관리자 암호를 설정하지 않거나 판매업체에서 설정한 디폴트 암호를 사용하는 경우는 라우터나 방화벽에서 자주 발생하지만 일부 리눅스 서비스도 기본 관리자 암호를 그대로 사용하는 경우가 종종 있습니다 (Red Hat Enterprise Linux 5는 제외).
라우터, 방화벽, VPNs, NAS 어플라이언스와 같이 일반적으로 네트워킹 하드웨어와 관련되어 있습니다.
여러 레거시 운영 시스템, 특히 UNIX 및 Windows와 같이 서비스를 일괄해서 판매하는 OSes에서 일반적입니다.
때때로 시스템 관리자가 급하게 권한있는 사용자 계정을 만들고 패스워드를 지정하지 않아 침입자가 사용자 계정을 알아내어 침입할 수 있게 합니다.
디폴트 공유 키 보안 서비스는 종종 개발용이나 평가 테스팅에 사용되는 기본 보안 키를 포함하고 있습니다. 만일 이 보안 키가 변경되지 않은 채 인터넷 상 생산 환경에 저장된다면, 동일한 기본 키를 가진 사용자라면 누구든지 그 공유-키와 그 키에 포함된 기밀 정보를 볼 수 있습니다.
무선 액세스 지점 및 사전 설정된 보안 서버 어플라이언스에서 가장 일반적입니다.
IP 스푸핑(Spoofing) 원격 접속한 컴퓨터는 마치 지역 네트워크에 연결된 컴퓨터처럼 작동하며 서버의 취약점을 발견 후 네트워크 자원을 빼내기 위해 백도어(backdoor)나 트로이목마(trojan horse) 프로그램을 설치합니다.
스푸핑은 목표 시스템에 연결하기 위해 침입자가 TCP/IP SYN-ACK 번호를 예측해야 하므로 매우 어렵습니다. 그러나 크래커는 여러 다른 도구를 사용하여 이러한 취약점을 공격 가능합니다.
rsh, telnet, FTP 등과 같이 소스 기반 인증을 사용하는 서비스의 목표 시스템에 따라 ssh이나 SSL/TLS에서 사용되는 암호화된 인증 방식이나 PKI와 비교했을 때 안전하지 않으므로 사용을 권장하지 않습니다.
도청 (Eavesdropping) 네트워크 상 두 개의 활성 노드 사이의 통신 선로 전선에 접속하여 정보를 빼내는 행위.
이러한 종류의 공격은 Telnet, FTP, HTTP 전송과 같이 평문으로 된 전송 프로토콜에서 자주 발생합니다.
원격 침입자는 시스템에 침입하기 위하여 LAN 상에 있는 목표 시스템에 접속해야 합니다; 일반적으로 크래커는 IP 스푸핑 또는 man-in-the-middle 공격과 같이 LAN 상의 시스템에 침입하기 위하여 능동적 공격을 사용합니다.
보안 방지법에는 패스워드 스누핑(snooping)을 방지하기 위해 암호화 키 교환, 일회용 패스워드 또는 암호화된 인증 방식과 같은 서비스가 있습니다; 네트워크 자료를 전송하는 동안 철저한 암호화 과정을 거치실 것을 권장합니다.
서비스 취약점 침입자는 인터넷 상에서 실행되는 서비스에서 허점을 찾아서 그 시스템에 칩입하여 저장된 정보를 가로챌 수 있습니다. 또한 동일한 네트워크 상에 위치한 다른 시스템에 침입하는 것도 가능합니다.
CGI와 같은 HTTP-기반 서비스는 원격 명령 실행 및 대화식 쉘 액세스에 공격받기 쉽습니다. HTTP 서비스가 "nobody"처럼 권한이 없는 사용자로서 실행된다 해도 설정 파일 및 네트워크 맵과 같은 정보를 읽어올 수 있으며 침입자가 과다한 시스템 리소스를 유출하여 다른 사용자가 그 시스템을 사용할 수 없게하는 서비스 거부 공격 (denial of service attack)을 사용할 수 도 있습니다.
가끔씩 취약점을 지닌 서비스가 개발 과정이나 테스팅 과정에서 발견되지 않는 경우가 있습니다; 이러한 취약점 (예, buffer overflows 처럼 공격자가 응용 프로그램의 메모리 버퍼를 채우는 임의 값을 사용하여 서비스를 파손시키고, 임의 명령을 실행하여 대화식 명령 프롬프트를 공격자에게 제공하는 것)은 침입자에게 완전한 관리자 제어 기능을 갖게할 가능성이 있습니다.
관리자는 루트 사용자로서 서비스를 실행해서는 안되며, 제조업체나 CERT 및 CVE와 같은 보안 기관의 응용 프로그램에 대한 패치와 에라타 업데이트를 빈틈없이 해야 합니다.
응용 프로그램 보안 취약점 공격자는 이메일 클라이언트와 같은 데스크탑이나 워크스테이션 프로그램의 보안 취약점을 이용하여 임의 코드를 실행하거나 트로이목마(trojan horse)를 설치하여 이후 시스템에 침입하거나 시스템을 중단시킬 수도 있습니다. 만일 침입당한 워크스테이션이 네트워크 상 다른 시스템을 통제한다면 다른 시스템 침입도 가능합니다.
일반 직장인들은 보안에 대한 경험이나 지식이 부족하기 때문에 워크스테이션이나 데스크탑은 보안 취약성 공격의 목표가 되기 쉽습니다; 따라서 개인마다 허가를 받지 않은 소프트웨어나 검열받지 않은 이메일 첨부 파일을 열 경우 그 위험성을 알려야 합니다.
이메일 클라이언트 소프트웨어가 자동으로 첨부 파일을 열거나 실행하지 않게하는 안전 장치를 실행할 수 도 있습니다. 또한 Red Hat Network를 통한 워크스테이션 소프트웨어 자동 업데이트나 다른 시스템 관리 서비스를 사용하시면 보다 쉽게 다중 보안 작업을 실행하실 수 있습니다.
서비스 거부 (DoS) 공격 공격자들은 개인이나 그룹으로 허가 없는 패킷을 표적 호스트 (서버, 라우터나 워크스테이션)에 보내어 회사의 네트워크나 서버 리소스를 공격합니다. 이러한 공격으로 인해 권한이 있는 사용자들이 서버 리소스를 사용할 수 없게 됩니다.
미국에서 보고된 DoS 케이스는 대부분 2000년에 발생하였습니다. 정보 소통량이 많은 일부 상업 사이트와 정부 사이트를 표적으로 삼아 이미 해킹당한 여러 시스템을 좀비 또는 방향 변경 브로드캐스트 노드처럼 사용하여 그 시스템의 고대역폭 연결을 이용하여 표적 사이트에 핑플루드(ping flood) 공격을 가한 후 접속 불능 상태로 만들었습니다.
일반적으로 소스 패킷은 위장되어 다시 브로드캐스트되었기 때문에, 공격의 원소스를 찾아 내기는 어렵습니다.
iptablessnort와 같은 Network IDSes를 사용한 ingress filtering (IETF rfc2267)이 개선되면서, 관리자는 분산된 DoS 공격을 추격하고 방지할 수 있습니다.
표 1.1. 보안 취약점

1.3. 보안 업데이트

보안 상 허점이 발견된다면, 적절한 소프트웨어를 업데이트하여 보안 위험을 최소화 시켜야 합니다. 해당 소프트웨어가 현재 Red Hat Enterprise Linux 배포판에 포함된 지원 가능한 패키지의 일부라면, Red Hat, Inc.는 최대한 빨리 보안 취약점을 고칠 수 있는 패키지를 업데이트하여 보내드릴 것입니다. 종종 보안 취약점을 공개시 그에 상응하는 패치 (문제를 해결할 수 있는 소스 코드)를 함께 출시합니다. Red Hat QA 팀은 이 패치를 Red Hat Enterprise Linux 패키지에 적용하여 테스팅을 마친 후 에라타 업데이트로 출시할 것입니다. 그러나 패치가 없는 보안 취약점을 공개시, Red Hat 개발자는 소프트웨어 관리자와 함께 작업하여 문제 해결책을 찾아낼 것입니다. 일단 문제가 해결되면, 패키지를 테스트한 후 에라타 업데이트로 배포합니다.

고객 시스템에 사용된 소프트웨어에 대한 에라타 업데이트가 발표된다면, 최대한 빨리 패키지를 업데이트하여 시스템 보안 위험을 최소화하시기 바랍니다.

1.3.1. 패키지 업데이트하기

시스템에 소프트웨어를 업데이트하실 경우, 신뢰할 수 있는 소스에서 업데이트를 다운로드 받으셔야 합니다. 누구든 문제 해결 패치와 동일한 버전 번호을 가졌지만 또 다른 보안상 허점을 제공하는 패키지를 재구축하여 인터넷에 올려놓을 가능성도 있습니다. 이러한 경우, 파일을 기존 RPM과 비교 검증하는 것과 같은 보안 대책을 사용하여도 보안 허점이 발견되지 않습니다. 따라서 Red Hat, Inc.와 같은 신뢰할 수 있는 소스에서 RPM을 다운로드 받으시는 것이 매우 중요합니다. 패키지의 무결성을 검증하기 위해 패키지의 서명을 확인하시기 바랍니다.

다음과 같은 두가지 방법을 사용하여 Red Hat 보안 에라타 업데이트를 받으실 수 있습니다:

  1. Red Hat Network에 기록 및 다운로드 가능

  2. Red Hat 에라타 웹사이트에 기록되었으며 링트되어 있지 않음

알림

Red Hat Enterprise Linux 부터는 Red Hat Network를 통해서만 업데이트된 패키지를 다운받을 수 있습니다. Red Hat 에라타 웹페이지에 업데이트 정보는 있지만, 실제 패키지를 다운받을 수는 없습니다.

1.3.1.1. Red Hat Network 이용 방법

Red Hat Network를 사용하시면 대부분의 업데이트 과정이 자동화됩니다. 시스템에 필요한 RPM 패키지를 검색한 후 안전한 리포지터리에서 패키지들을 다운로드 받습니다. 그 후 패키지가 변경되지 않은 것을 확인하기 위해 RPM 서명을 검증 후 패키지를 업데이트 합니다. 패키지 설치는 즉시 시작될 수도 있고 정해진 시간에 시작되도록 계획하는 것도 가능합니다.

Red Hat Network를 통해 시스템을 업데이트하기 위해서는, 각 시스템마다 시스템 프로파일이 있어야 합니다. 시스템 프로파일에는 시스템에 대한 하드웨어와 소프트웨어 정보가 포함되어 있으며, 이 정보는 기밀로 보관되어 어느 누구에게도 공개되지 않습니다. 이 프로파일은 각 시스템에 어떠한 에라타 업데이트를 적용할 것인가를 결정하는데 사용되며, 이 프로파일이 없이는 Red Hat Network는 해당 시스템이 업데이트가 필요한지 여부를 판단할 수 없습니다. 보안 에라타 (또는 다른 종류의 에라타)가 출시될 경우, Red Hat Network는 에라타에 대한 설명과 에라타가 영향을 미치는 시스템의 목록을 함께 이메일로 보내드립니다. 업데이트를 신청하시려면, Red Hat Update Agent를 사용하시거나 http://rhn.redhat.com 웹사이트를 통해 패키지 업데이트를 계획하실 수 있습니다.

힌트

Red Hat Enterprise Linux에는 Red Hat Network Alert Notification Tool과 Red Hat Enterprise Linux시스템에 업데이트 가능한 패키지가 있을 경우 쉽게 알 수 있도록 통지해주는 패널 아이콘이 포함되어 있습니다. 이러한 애플릿에 대한 자세한 정보를 원하신다면, 다음 URL을 참조하시기 바랍니다: https://rhn.redhat.com/rhn/help/quickstart.jsp

중요

보안 에라타를 설치하시기 전에 반드시 에라타 리포트에 포함된 특별한 지시 사항을 먼저 읽으신 후 지시 사항에 따르시기 바랍니다. 에라타 업데이트로 인한 변경 사항을 적용하는 방법에 대한 일반적인 정보는 1.3.1.5절. “변경 사항 적용하기” 을 참조하시기 바랍니다.

1.3.1.2. Red Hat 에라타 웹사이트 이용 방법

보안 에라타 리포트가 출시되면, Red Hat 에라타 웹사이트 http://www.redhat.com/security/에 발표됩니다. 이 페이지에서 시스템에 맞는 제품과 버전 번호를 선택해 주십시오. 그 후 페이지 상단에 위치한 security 를 선택하시면 Red Hat Enterprise Linux Security Advisories만 보실 수 있습니다. 시스템에 사용된 패키지와 관련된 보안 권고에 대한 시놉시스가 있다면, 보다 자세한 정보를 보기 위해 해당 시놉시스를 클릭하시기 바랍니다.

자세한 정보 페이지에는 보안 허점에 대한 정보와 함께 보안 상 문제점을 고치기 위한 패키지 업데이트 및 필요한 작업 실행 방법에 대한 지시 사항이 있습니다.

업데이트된 패키지(들)을 다운로드 받으시려면, Red Hat Network에 로그인 하셔서 패키지 이름에 클릭하신 후 하드 드라이브에 저장하시기 바랍니다. /tmp/updates와 같이 새로운 디렉토리를 생성하신 후 다운로드 받은 모든 패키지를 그 디렉토리에 저장하시길 적극 권장합니다.

1.3.1.3. 패키지 서명 검증하기

모든 Red Hat Enterprise Linux 패키지는 Red Hat, Inc. GPG키로 서명되었습니다. GPG는 GNU Privacy Guard (GnuPG)의 줄임말로서 배포 파일의 인증을 확인하는데 사용되는 자유 소프트웨어 패키지를 말합니다. 예를 들면 Red Hat은 비밀키 (개인키)를 사용하여 패키지를 잠근 후 공개키를 사용하여 패키지를 잠금 해제 후 검증합니다. 만일 RPM 검증 과정에서 Red Hat에서 배포한 공개키가 비밀키와 일치하지 않는다면, 패키지가 변경되었을 수 있으므로 신뢰할 수 없습니다.

Red Hat Enterprise Linux에서 RPM 유틸리티를 사용하면 RPM 패키지를 설치하기 전에 자동적으로 패키지의 GPG 서명을 검증합니다. 만일 Red Hat GPG 키를 아직 설치하지 않으셨다면, Red Hat Enterprise Linux 설치 CD-ROM과 같이 안전한 곳에서 GPG 키를 받아 설치하시기 바랍니다.

CD-ROM이 /mnt/cdrom에 마운트되었다고 가정합시다. 다음 명령을 입력하시면 신뢰할 수 있는 키 목록을 기록한 데이터베이스인 keyring을 가져올 수 있습니다:

rpm --import /mnt/cdrom/RPM-GPG-KEY

RPM 검증을 위해 설치된 모든 키 목록을 보시려면, 다음 명령을 실행하십시오:

rpm -qa gpg-pubkey*

Red Hat키는 다음과 같이 출력됩니다:

gpg-pubkey-db42a60e-37ea5438

특정 키에 대한 자세한 정보를 보시려면, 다음 예시와 같이 rpm -qi 명령 다음에 이전 명령의 출력 결과를 함께 입력하시면 됩니다:

rpm -qi gpg-pubkey-db42a60e-37ea5438

RPM 파일들을 설치하시기 전에 반드시 파일의 서명을 검증하여 파일이 Red Hat, Inc.에서 출시한 패키지에서 변경되지 않았음을 확인하시기 바랍니다. 다운로드 받은 패키지들을 동시에 모두 검증하시려면, 다음 명령을 입력하십시오:

rpm -K /tmp/updates/*.rpm

각 패키지마다 GPG 키 검증을 성공적으로 마치면 gpg OK라는 메시지가 나타납니다. 만일 검증이 성공적이지 않다면 우선 올바른 Red Hat 공개키를 사용하고 있는지 확인하시고 원인을 알아보시기 바랍니다. GPG 검증에 실패한 패키지는 제3자에 의해 변경되었을 가능성이 있으므로 설치하지 마시기 바랍니다.

GPG 키 검색과 에라타 리포트와 관련된 모든 패키지를 다운로드 받으셨다면, 쉘 프롬프트에서 루트로 로그인 하신 후 패키지를 설치하시기 바랍니다.

1.3.1.4. 서명된 패키지 설치하기

다음 명령을 입력하여 패키지를 안전하게 설치하실 수 있습니다 (커널 패키지 제외):

rpm -Uvh /tmp/updates/*.rpm

커널 패키지의 경우 다음 명령을 사용하시기 바랍니다:

rpm -ivh /tmp/updates/<kernel-package>

앞의 예시에서 <kernel-package> 부분을 커널 RPM의 이름으로 대체하시기 바랍니다.

새로운 커널을 사용하여 컴퓨터가 안전하게 재부팅한 후에는 다음 명령을 사용하여 이전 커널을 제거하셔도 됩니다:

rpm -e <old-kernel-package>

앞의 예시에서 <old-kernel-package> 부분을 이전 커널 RPM 이름으로 대체해 주십시오.

알림

이전 커널을 반드시 삭제할 필요는 없습니다. 기본 부트로더인 GRUB을 이용하여 여러 커널을 설치한 후 부팅시 어느 커널을 부팅할 지 결정할 수 있습니다.

중요

보안 에라타를 설치하시기 전에 반드시 에라타 리포트에 포함된 특별한 지시 사항을 먼저 읽으신 후 지시 사항에 따르시기 바랍니다. 에라타 업데이트로 인한 변경 사항을 적용하는 방법에 대한 일반적인 정보는 1.3.1.5절. “변경 사항 적용하기” 을 참조하시기 바랍니다.

1.3.1.5. 변경 사항 적용하기

Red Hat Network 또는 Red Hat 에라타 웹사이트를 통해 보안 에라타를 다운로드 받고 설치하신 후, 이전 소프트웨어 사용을 중단하시고 새로운 소프트웨어를 사용하셔야 합니다. 업데이트된 소프트웨어의 종류에 따라서 이 방법이 달라집니다. 다음 목록은 일반 소프트웨어 종류와 패키지 업그레이드 후 업데이트된 버전을 사용하는 방법을 보여줍니다.

알림

일반적으로 시스템을 재부팅하시는 것이 최신 버전의 소프트웨어 패키지를 사용할 수 있는 가장 쉬운 방법입니다; 그러나 시스템 관리자가 시스템을 재부팅할 수 없는 경우도 있습니다.

응용 프로그램

사용자-공간 응용 프로그램이란 시스템 사용자가 시작할 수 있는 모든 프로그램을 의미합니다. 일반적으로 이러한 응용 프로그램은 사용자나 스크립트 또는 자동화 작업 유틸리티에 의해 시작되어 사용되며, 오랫동안 실행되지 않습니다.

이러한 사용자-공간 응용 프로그램이 업데이트되면, 시스템 상 해당 응용 프로그램의 인스턴스를 멈춘 후 프로그램을 다시 시작하여 업데이트된 버전을 사용하십시오.

커널

커널은 Red Hat Enterprise Linux 운영 체제의 핵심 소프트웨어 요소입니다. 커널은 메모리, 프로세서 및 주변 기기의 사용을 관리할 뿐만 아니라 모든 작업을 계획하고 관리합니다.

커널의 중심적인 역할 때문에, 컴퓨터를 멈추지 않고서는 커널을 재시작할 수 없습니다. 따라서 커널을 업데이트한 경우 시스템을 재부팅하지 않고서는 업데이트된 버전의 커널을 사용할 수 없습니다.

공유 라이브러리

공유 라이브러리는 다수의 응용 프로그램과 서비스에 의해 사용되는 glibc와 같은 코드의 집합입니다. 공유 라이브러리를 사용하는 응용 프로그램은 일반적으로 초기화될 때 공유 코드를 읽어들입니다. 따라서 업데이트된 라이브러리를 사용하는 응용 프로그램은 모두 멈춘 후 다시 시작하셔야 합니다.

현재 실행 중인 응용 프로그램 중 특정 라이브러리에 연계된 프로그램을 알아보시려면, 다음 예시에서와 같이 lsof 명령을 사용하시기 바랍니다:

lsof /usr/lib/libwrap.so*

이 명령은 호스트 접근 제어를 위한 TCP 랩퍼을 사용하는 모든 실행 프로그램 목록으로 복귀합니다. 따라서, tcp_wrappers 패키지가 업데이트되었을 경우 프로그램 목록을 멈춘 후 다시 시작해야 합니다.

SysV 서비스

SysV 서비스는 부트 프로세스에서 시작되는 지속적인 서버 프로그램입니다. SysV 서비스의 예로서 sshd, vsftpdxinetd가 있습니다.

이 프로그램들은 기계가 부팅된 이후에는 메모리에서 변경되지 않기 때문에, 패키지가 업그레이드된 후에는 각 업데이트된 SysV 서비스를 멈춘 후 다시 시작해야 합니다. Services Configuration Tool을 사용하시거나 다음과 같이 쉘 프롬프트에서 루트로 로그인 하신 후 /sbin/service 명령을 입력하시면 됩니다:

/sbin/service <service-name> 재시작

앞의 예시에서 <service-name> 부분을 sshd와 같은 서비스 이름으로 대체하시기 바랍니다.

xinetd 서비스

xinetd 수퍼 서비스가 관리하는 서비스는 오직 연결이 활성화되었을 때만 실행됩니다. xinetd가 관리하는 서비스에는 Telnet, IMAP과 POP3 등이 있습니다.

새로운 요청이 들어올 때마다 이러한 서비스의 새로운 인스턴스가 xinetd에 의해 시작되기 때문에, 업그레이드 이후에 접속된 서비스는 업데이트된 소프트웨어가 처리합니다. 그러나 서비스가 접속된 상태에서 xinetd가 제어하는 서비스가 업그레이드되었다면, 이 서비스는 이전 버전 소프트웨어에 의해 서비스됩니다.

xinetd가 관리하는 서비스 중 특정 서비스의 이전 인스턴스를 종료하시려면, 서비스에 대한 패키지를 업그레이드하신 후 현재 진행 중인 모든 프로세스를 중지시켜야 합니다. 먼저 ps 명령을 사용하여 진행 중인 프로세스를 확인 후 kill이나 killall 명령을 사용하여 현재 진행중인 서비스를 중지시키면 됩니다.

예를 들어 보안 에라타 imap 패키지가 출시된 경우, 패키지를 업그레이드하신 후 쉘 프롬프트에 루트로 로그인하시고 다음 명령을 입력하시기 바랍니다:

ps -aux | grep imap

이 명령은 모든 활성 IMAP 세션을 보여줍니다. 이제 다음 명령을 사용하여 개별 세션을 종료시킬 수 있습니다:

kill <PID>

이 세션을 종료하지 못하셨을 경우, 다음 명령을 사용하십시오:

kill -9 <PID>

앞의 예시에서 <PID> 부분을 IMAP 세션에 해당하는 프로세스 식별 번호로 대체하시기 바랍니다. 프로세스 식별 번호는 ps 명령을 입력하시면 두번째 칸에 나타납니다.

모든 활성 IMAP 세션을 종료하시려면, 다음 명령을 입력하십시오:

killall imapd

2장. 네트워크 보안

2.1. 서버 보안

시스템이 공중 네트워크에서 서버로 사용될 경우 공격의 대상이 되기 쉽습니다. 이러한 이유로 시스템 보안을 보강하고 서비스를 잠그는 것은 시스템 관리자에게 무엇보다 중요합니다.

특정 사항에 대하여 깊이 파고들기 이전에 서버 보안을 강화시킬 수 있는 일반적인 힌트를 다음에서 간략히 살펴보도록 하겠습니다:

  • 최신 침입 유형에 대비하여 모든 서비스를 항상 업데이트 시키십시오.

  • 가능한 보안 프로토콜을 사용하십시오.

  • 가능한 한 기계당 한가지 유형의 네트워크 서비스를 사용하십시오.

  • 모든 서버에서 수상한 행동이 발견되는지 주의깊게 감시하십시오.

2.1.1. TCP 래퍼와 xinetd를 사용하여 서비스 보안 강화하기

TCP 래퍼(Wrappers)는 다양한 서비스에 접근 제어를 제공합니다. SSH, Telnet, FTP와 같은 대부분의 최신 네트워크 서비스는 들어오는 요청과 요청된 서비스 사이에서 감시 역할을 하는 TCP 래퍼를 사용합니다.

추가 액세스, 기록, 바인딩, 방향 전환 및 자원 활용 제어와 같은 기능을 제공하는 수퍼 서버인 xinetd를 함께 사용하면 TCP 래퍼가 제공하는 보안 기능이 보다 강화됩니다.

다음 부분에서는 여러분이 각 주제에 대한 기본적인 지식을 갖추고 계신다고 간주하고 특정 보안 옵션에 중점을 두고 설명해 보겠습니다.

2.1.1.1. TCP 래퍼를 사용하여 보안 강화하기

TCP 래퍼는 서비스로의 액세스를 거부하는 것 이외에도 다른 많은 기능을 제공합니다. 이 부분에서는 TCP 래퍼를 사용하여 연결 배너를 보내고, 특정 호스트에서 침입자에게 경고 메시지를 보내며, 기록 기능을 강화하는 방법에 대하여 설명하고 있습니다. TCP 래퍼의 기능과 제어 언어에 대한 전체적인 목록을 보시려면 hosts_options 메뉴얼 페이지를 참조하시기 바랍니다.

2.1.1.1.1. TCP 래퍼와 연결 배너

서비스에 접속하는 클라이언트에 경고성 배너를 보내는 것이 서버가 어떠한 시스템을 운영 중인지 보여주지 않으면서 동시에 침입자에게 시스템 관리자가 감시 중이라고 알려줄 수 있는 좋은 방법입니다. 서비스에 TCP 래퍼 배너를 구현하시려면 banner 옵션을 사용하십시오.

이 예시는 vsftpd에 배너를 사용합니다. 먼저 배너 파일을 생성하셔야 합니다. 시스템 상 어디에서든 생성하실 수 있지만 이 파일은 사용될 데몬과 동일한 이름을 가져야 합니다. 이 예시에서 파일 이름은 /etc/banners/vsftpd 입니다:

 220-Hello, %c 220-All activity on ftp.example.com is logged. 220-Inappropriate use will result in your access privileges being removed. 

%c 토큰은 사용자명, 호스트명 또는 연결 메시지에 보다 효과가 있도록 사용자명과 IP 주소와 같은 다양한 클라이언트 정보를 제공합니다.

이 배너가 들어오는 접속에 보여지도록 하시려면 /etc/hosts.allow 파일에서 다음 줄을 추가하시면 됩니다:

 vsftpd : ALL : banners /etc/banners/ 
2.1.1.1.2. TCP 래퍼와 침입 경고

만일 특정 호스트나 네트워크가 서버를 침입하는 것이 발견되었다면 TCP 래퍼에 spawn 지시자를 사용하여 침입이 시도된 호스트나 네트워크의 관리자에게 경고 메시지를 보낼 수 있습니다.

예를 들어 206.182.68.0/24 네트워크에서 크래커가 서버에 침입 시도하려는 것이 발견되었다고 가정해봅니다. /etc/hosts.deny 파일에 다음과 같은 줄을 추가하시면, 연결 시도가 거부되며 특별 파일에 기록될 것입니다:

 ALL : 206.182.68.0 : spawn /bin/ 'date' %c %d >> /var/log/intruder_alert 

%d 토큰은 침입자가 접근하려고 시도한 서비스의 이름을 제공합니다.

연결을 허용 후 기록하기 위해서는 /etc/hosts.allow 파일에 spawn 지시자를 추가하시기 바랍니다.

알림

spawn 지시자는 모든 쉘 명령을 실행하므로, 특정 클라이언트가 서버에 접속을 시도할 경우 관리자에게 알리거나 여러 명령을 수행할 특수 스크립트를 작성하십시오.

2.1.1.1.3. TCP 래퍼와 향상된 기록 기능

만일 특정 유형의 접속이 다른 유형 보다 중요하다면 severity 옵션을 사용하여 해당 서비스에 대한 여러 다른 기록 수준을 설정하실 수 있습니다.

이 예시에서는 FTP 서버 포트 23 (Telnet 포트)로 접속을 시도하는 사용자를 크래커라고 가정합니다. 크래커가 침입하는 것을 방지하기 위하여 로그 파일에서 기본 플래그(flag)인 info 대신 emerg 플래그를 지정하시고 이 포트로 들어오는 연결을 거부합니다.

연결을 거부하기 위해서는 /etc/hosts.deny 파일에 다음 줄을 추가하시면 됩니다:

 in.telnetd : ALL : severity emerg 

이러한 설정은 기본 authpriv 기록 기능을 사용하지만 기록 심각성 수준을 기본 값인 info에서 emerg 수준으로 높여서 로그 메시지를 콘솔에 바로 보여줍니다.

2.1.1.2. xinetd를 사용하여 보안 강화하기

이 부분에서는 xinetd를 사용하여 트랩(trap) 서비스를 설정하는 방법과 xinetd 서비스가 사용할 수 있는 자원의 양을 제어하는 방법에 대하여 중점적으로 설명해 보겠습니다. 서비스가 사용할 수 있는 자원의 한계를 설정하면 서비스 거부 (DoS) 공격을 좌절시킬 수 있습니다.모든 사용 가능한 옵션의 목록을 보시려면 xinetdxinetd.conf의 메뉴얼 페이지를 참조하시기 바랍니다.

2.1.1.2.1. 트랩(Trap) 설정하기

xinetd의 중요한 기능 중 하나는 전역 no_access 목록에 호스트를 추가할 수 있는 기능입니다. 이 목록에 포함된 호스트는 xinetd가 관리하는 서비스에 정해진 기간 동안 또는 xinetd가 재시작될 때까지 연결을 거부당합니다. 이 기능은 SENSOR 속성을 통해 실행 가능하며, 서버에서 포트를 스캔하려고 시도하는 호스트를 손쉽게 막을 수 있는 방법입니다.

SENSOR를 설정하기 위한 첫번째 단계는 사용할 계획이 없는 서비스를 선택하는 것입니다. 이 예에서는 Telnet이 사용됩니다.

/etc/xinetd.d/telnet 파일에서 flags 줄을 다음과 같이 수정하시기 바랍니다:

flags           = SENSOR

다음 줄을 추가하십시오:

deny_time       = 30

이 설정은 포트로 연결을 시도하는 호스트를 30 분 동안 거부할 것입니다. deny_time 속성에 사용 가능한 다른 값에는 FOREVER와 NEVER가 있습니다. FORVER는 xinetd가 재시작될 때까지 연결을 거부하며, NEVER는 연결을 허용한 후 기록합니다.

마지막 줄을 다음과 같이 수정하십시오:

disable         = no

이는 트랩 자체를 활성화시킵니다.

SENSOR를 사용하여 보안을 위협하는 호스트로부터 연결을 검색하여 정지시키는 것이 좋은 방법이기는 하지만, 다음과 같은 두가지 결점이 있습니다:

  • 스텔스 스캔 (쉽게 발견되지 않도록 한 스캔)을 찾아내지 못합니다.

  • 만일 침입자가 SENSOR가 실행 중인 사실을 이미 알고 있다면 자신의 IP 주소를 위장하여 특정 호스트에 서비스 거부 공격을 마운트한 후 금지된 포트에 연결할 수 있습니다.

2.1.1.2.2. 서버 자원을 제어하기

xinetd의 또 다른 중요한 기능은 서비스가 활용 가능한 자원의 양을 제어할 수 있는 기능입니다.

다음 지시자를 통하여 이 기능을 사용 가능합니다:

  • cps = <number_of_connections> <wait_period> — 1초당 서비스에 허용되는 연결 수를 지정합니다. 이 지시자는 두 개의 인수로 설정합니다:

    • <number_of_connections> — 1초당 처리되는 연결 수. 1초당 허용되는 연결 수가 처리되는 연결 수 보다 많을 때, 서비스가 임시적으로 비활성화됩니다. 기본 값은 50입니다.

    • <wait_period> — 서비스가 비활성화된 이후, 이를 다시 활성화시키기 전까지 기다려야하는 초수. 기본 간격은 10 초입니다.

  • instances = <number_of_connections> — 한 서비스에 허용되는 총 연결 수를 지정합니다.이 지시자는 정수값이나 UNLIMITED 값을 수용합니다.

  • per_source = <number_of_connections> — 각 호스트마다 서비스에 연결할 수 있는 수를 지정합니다. 이 지시자는 정수값이나 UNLIMITED으로 지정하셔야 합니다.

  • rlimit_as = <number[K|M]> — 서비스가 차지할 수 있는 메모리 주소 공간의 용량을 킬로바이트 또는 메가바이트 단위로 지정합니다. 이 지시자는 정수값이나 UNLIMITED로 설정하셔야 합니다.

  • rlimit_cpu = <number_of_seconds> — 서비스가 CPU를 사용할 수 있는 시간을 초 단위로 지정합니다. 이 지시자는 정수값이나 UNLIMITED으로 설정하셔야 합니다.

이러한 지시자를 사용하시면, 서비스 거부 공격을 통해 xinetd 서비스가 시스템을 마비시키는 상황을 방지하는데 도움이 됩니다.

2.1.2. Portmap 보안 강화

portmap 서비스는 NIS와 NFS와 같은 RPC 서비스에 사용되는 동적 포트 할당 데몬입니다. 이 데몬은 허술한 인증 메커니즘을 갖추고 있으며 데몬이 제어하는 서비스에 광범위한 포트를 할당 가능합니다. 따라서 보안 관리가 쉽지 않습니다.

알림

portmap을 보안 강화하게 되면 NFSv2와 NFSv3만 영향을 받습니다. NFSv4는 더 이상 portmap을 사용하지 않으므로 영향을 받지 않습니다. NFSv2 이나 NFSv3 서버를 구현할 계획이라면, portmap이 사용되므로 다음 부분에서 설명된 내용을 따르십시오.

RPC 서비스를 실행하신다면 다음과 같은 기본 규칙을 따르십시오.

2.1.2.1. TCP 래퍼를 사용하여 portmap 보호

portmap 서비스에는 내장된 인증 방식이 없으므로 TCP 래퍼를 사용하여 이 서비스를 사용할 수 있는 네트워크나 호스트를 제한하는 것이 중요합니다.

또한 서비스로 접근을 제한하실 때는 IP 주소만 사용하셔야 합니다. 호스트명은 DNS poisoning이나 다른 방법으로 위조가 가능하므로 사용하지 마십시오.

2.1.2.2. IPTables를 사용하여 portmap 보호

portmap 서비스로 접근을 더 제한하시려면 서버에 iptables 규칙을 추가하여 특정 네트워크로 접근하는 것을 제한하시는 것이 좋습니다.

다음은 (포트 111을 청취하는) portmap 서비스로 192.168.0/24 네트워크와 로컬호스트에서 TCP 연결을 허용하는 두가지 IPTables 명령 예시입니다. Nautilussgi_fam 서비스를 사용하는데 필요한 설정입니다. 모든 다른 패킷은 버립니다(drop).

iptables -A INPUT -p tcp -s! 192.168.0.0/24 --dport 111 -j DROP
iptables -A INPUT -p tcp -s 127.0.0.1  --dport 111 -j ACCEPT

이와 유사한 방식으로 UDP 트래픽을 제한하기 위해서는 다음 명령을 사용하십시오.

iptables -A INPUT -p udp -s! 192.168.0.0/24  --dport 111 -j DROP

2.1.3. NIS 보안 강화

NISNetwork Information Service의 줄임말입니다. NIS는 ypserv라고 불리우는 RPC 서비스로서portmap 및 다른 관련 서비스들과 함께 사용되어 동일한 도메인에 위치한 컴퓨터에 사용자명, 암호와 다른 기밀 정보를 배포하는 기능을 합니다.

NIS 서버는 다음과 같은 여러가지 응용 프로그램으로 구성되어 있습니다:

  • /usr/sbin/rpc.yppasswddyppasswdd 서비스로도 불리우는 이 데몬은 사용자가 NIS 암호를 변경할 수 있게 해줍니다.

  • /usr/sbin/rpc.ypxfrdypxfrd 서비스라고도 불리는 이 데몬은 네트워크 상에서 NIS 맵(map)을 전송합니다.

  • /usr/sbin/yppush — 이 프로그램은 수정된 NIS 데이터베이스를 다수의 NIS 서버에 전달하는 역할을 합니다.

  • /usr/sbin/ypserv — NIS 서버 데몬입니다.

NIS는 오늘날 보안 기준으로 판단시 안전하지 않습니다. 호스트 인증 메커니즘이 없으며 암호 해시를 포함한 모든 정보를 네트워크 상에서 암호화되지 않은 채로 전달합니다. 결과적으로 NIS를 사용하는 네트워크를 설정시 각별한 주의가 요구됩니다. 또한 NIS의 기본 설정은 본래부터 안전하지 못하기 때문에 문제가 더욱 복잡해질 수 있습니다.

NIS 서버를 구현하려고 계획하시는 분들은 우선 2.1.2절. “Portmap 보안 강화”에서 설명된 것처럼 portmap 서비스를 보안 강화하신 후 네트워크 설정과 같이 다음 문제를 차례로 해결하시기 바랍니다.

2.1.3.1. 네트워크를 신중하게 설정하기

NIS는 네트워크 상에서 기밀 정보를 암호화되지 않은 상태에서 전달하기 때문에 서비스를 분할되고 안전한 네트워크 상에서 방화벽을 사용한 상태에서 서비스를 실행해야 합니다. 비보안 네트워크 상에서 NIS 정보가 전달될 때마다 누군가 정보를 가로챌 위험이 있습니다. 이러한 의미에서 네트워크를 신중히 설정함으로서 심각한 보안 침입 위협을 방지할 수 있습니다.

2.1.3.2. 암호와 같이 추측하기 힘든 NIS 도메인 이름과 호스트명 사용하기

NIS 도메인 내에 위치한 컴퓨터에서 사용자가 NIS 서버의 DNS 호스트명과 NIS 도메인 이름만 알고 있다면 인증을 거치지 않고 서버에서 정보를 유출하는 것이 가능합니다.

예를 들어 만일 누군가 네트워크에 랩탑 컴퓨터를 연결하거나 외부에서 네트워크에 침입하여 내부 IP 주소를 위장할 수 있다면 다음 명령을 사용하여/etc/passwd 파일의 내용을 보는 것이 가능합니다:

ypcat -d <NIS_domain> -h <DNS_hostname> passwd

만일 이 침입자가 루트 사용자 권한을 가지고 있다면 다음과 같은 명령을 입력하여 /etc/shadow 파일의 내용을 볼 수 있습니다:

ypcat -d <NIS_domain> -h <DNS_hostname> shadow

알림

커베로스가 사용된 경우 /etc/shadow 파일은 NIS map에 저장되지 않습니다.

침입자가 NIS map에 액세스하는 것을 보다 힘들게 하기 위하여 DNS 호스트명을 o7hfawtgmhwg.domain.com와 같은 임의 문자열로 생성하시는 것이 좋습니다. 유사한 방법으로 NIS 도메인 이름도 임의 문자열로 생성하시되 호스트명과 다른 이름을 생성하십시오. 이렇게 하시면 침입자가 NIS 서버에 액세스하는 것이 더욱 힘들어 집니다.

2.1.3.3. /var/yp/securenets 파일을 수정하기

/var/yp/securenets 파일이 공백으로 비어있거나 (기본 설치를 수행한 후) 파일이 존재하지 않는 경우 NIS는 모든 네트워크를 청취합니다. 이러한 경우 가장 먼저 하실 것은 ypserv가 적절한 네트워크에서 들어오는 요청만 응답하도록 이 파일에 넷마스크/네트워크 쌍을 입력하셔야 합니다.

다음은 /var/yp/securenets 파일 예제입니다:

255.255.255.0     192.168.0.0

경고

/var/yp/securenets 파일을 생성하지 않은 상태에서 NIS 서버를 처음으로 시작하시면 안됩니다.

이 기술은 IP 스푸핑 공격에 대한 보호를 제공하지는 못하지만 최소한 NIS 서비스가 청취할 네트워크를 제한해줍니다.

2.1.3.4. 정적 포트를 할당하고 iptables 규칙 사용하기

NIS와 관련된 모든 서버에 특정 포트를 할당하는 것이 가능하지만 사용자가 로그인 암호를 변경할 수 있게 해주는 데몬인 rpc.yppasswdd는 예외입니다. 다른 두 개의 NIS 서버 데몬인 rpc.ypxfrdypserv에 포트를 할당함으로서 방화벽 규칙을 생성하여 침입자가 NIS 서버 데몬에 침입하지 못하도록 보안을 강화할 수 있습니다.

이러한 설정을 위해 /etc/sysconfig/network 파일에 다음과 같은 줄을 삽입하시기 바랍니다:

YPSERV_ARGS="-p 834" YPXFRD_ARGS="-p 835"

다음 iptables 규칙을 입력하여 이 포트에서 서버가 청취할 네트워크를 제한 설정하실 수 있습니다:

iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 834 -j DROP
iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 835 -j DROP

이는 192.168.0.0/24 네트워크에서 요청이 들어올 경우, 프로토콜에 상관없이 서버는 834와 835포트로의 연결만을 허용함을 의미합니다.

2.1.3.5. 커베로스 인증 사용하기

NIS 인증이 사용될 경우 가장 심각한 결점은 사용자가 시스템에 로그인할 때마다 /etc/shadow 파일의 암호 해시가 네트워크 상에서 전달되는 것입니다. 만일 침입자가 NIS 도메인에 침입하여 네트워크 트래픽을 훔쳐보고 있다면 사용자명과 암호 해시를 모르게 수집할 수 있습니다. 충분한 시간이 주어진다면 암호 크래킹 프로그램을 사용하여 추측하기 쉬운 암호를 알아낸 후 침입자는 유효한 계정을 사용하여 네트워크에 액세스 가능합니다.

2.1.4. NFS 보안 강화

중요

2.1.2절. “Portmap 보안 강화”에서 설명되었듯이 Red Hat Enterprise Linux에 포함된 NFS 버전인 NFSv4는 portmap 서비스를 필요로하지 않습니다. NFS 트래픽은 이제 모든 버전에서 UDP 대신 TCP를 사용하며 NFSv4를 사용할때 TCP를 사용합니다. NFSv4는 이제 RPCSEC_GSS 커널 모듈의 일부로 커베로스 사용자 및 그룹 인증 방식을 사용합니다. Red Hat Enterprise Linux는 여전히 portmap을 사용하는 NFSv2와 NFSv3을 지원하므로, portmap과 관련된 정보를 이곳에 포함하였습니다.

2.1.4.1. 네트워크를 신중하게 설정하기

NFSv4는 네트워크 상에서 모든 정보를 커베로스를 사용하여 암호화하여 전달할 수 있으므로, 방화벽이나 분활된 네트워크 상에서 올바르게 서비스를 설정하셔야 합니다. NFSv2와 NFSv3는 여전히 정보를 암호화되지 않은 상태로 전달하기 때문에 이러한 점이 고려되어야 합니다. 따라서 네트워크를 신중히 설정함으로서 심각한 보안 침입 위협을 방지할 수 있습니다.

2.1.4.2. 구문 오류에 주의하십시오.

NFS 서버는 /etc/exports 파일을 통해 어느 파일 시스템은 익스포트할 것이고 이 디렉토리를 익스포트할 호스트는 무엇인지 결정합니다. 따라서 이 파일을 수정하실 때 불필요한 공간을 추가하지 않도록 주의하셔야 합니다.

예를 들어 /etc/exports 파일에서 다음과 같은 줄은 bob.example.com 호스트에서 /tmp/nfs/ 디렉토리를 읽고 쓸 수 있도록 공유합니다.

/tmp/nfs/     bob.example.com(rw)

반면 /etc/exports 파일에 이 줄을 삽입하시면 호스트명 다음에 삽입된 빈 공간 때문에 동일한 디렉토리를 bob.example.com에 읽기 전용 허가를 가지고 공유하고 그 외 다른 전체 호스트에 읽기 쓰기 허가를 가지고 이 디렉토리를 공유합니다.

/tmp/nfs/     bob.example.com (rw)

따라서 showmount 명령을 사용하여 어떠한 디렉토리가 어떻게 공유되고 있는지 NFS 공유 설정을 확인해보시기 바랍니다:

showmount -e <hostname>

2.1.4.3. no_root_squash 옵션을 사용하지 마십시오

NFS 공유는 루트 사용자를 특별한 권한이 없는 사용자 계정인 nfsnobody로 변경하도록 기본 설정되어 있습니다. 따라서 루트 사용자가 생성한 파일은 모두 nfsnobody가 소유하게 되어 사용자 아이디 비트를 재설정하여 프로그램을 업로드하지 못하게 됩니다.

만일 no_root_squash 옵션을 사용하시면 원격 루트 사용자가 공유 파일 시스템에서 모든 파일을 변경할 수 있으며 트로이 목마 프로그램을 설치하여 다른 사용자가 의도하지 않게 실행하게 됩니다.

2.1.5. Apache HTTP 서버 보안 강화

Apache HTTP 서버는 Red Hat Enterprise Linux에 포함된 서비스 중 가장 안정적이고 안전한 서비스 중 하나입니다. Apache HTTP 서버 보안을 강화하기 위해 사용 가능한 매우 다양한 옵션과 기술이 존재합니다 — 이 메뉴얼에서 깊게 다루기에는 너무 광범위합니다.

시스템 관리자는 다음의 설정 옵션을 사용할 때 유의하셔야 합니다:

2.1.5.1. FollowSymLinks

이 지시자는 기본값으로 활성화되어 있습니다. 따라서 웹 서버의 문서 루트로 심볼릭 링크를 생성하실 때는 주의하시기 바랍니다. 예를 들어 /로 심볼릭 링크를 제공하는 것은 좋은 생각이 아닙니다.

2.1.5.2. Indexes 지시자

이 지시자는 기본 값으로 활성화되어 있지만, 그리 바람직하지 않습니다. 침입자가 서버에서 파일을 검색하는 것을 방지하기 위해 이 지시자를 삭제하시기 바랍니다.

2.1.5.3. UserDir 지시자

UserDir 지시자는 침입자가 시스템 상에 사용자 계정이 존재하는지 확인할 수 있기 때문에 비활성화되도록 기본 설정되어 있습니다. 서버에서 사용자 디렉토리 검색 기능을 활성화하시려면 다음 지시자를 사용하시기 바랍니다:

UserDir enabled
UserDir disabled root

이 지시자는 사용자 디렉토리 검색 기능을 /root/를 제외한 모든 사용자 디렉토리에서 활성화할 것입니다. 비활성 계정 목록에 사용자를 추가하시려면 UserDir disabled 줄에 사용자 이름을 빈칸으로 구분하여 추가하십시오.

2.1.5.4. IncludesNoExec 지시자를 삭제하지 마십시오

Server-Side Includes (SSI) 모듈에서는 명령을 실행하지 못하도록 기본 설정되어 있습니다. 만일 절대적으로 필요한 경우가 아니라면 이 설정을 변경하지 마십시오. 이 설정을 변경하시면 침입자가 시스템에서 명령을 실행할 위험이 높아집니다.

2.1.5.5. 실행 가능 디렉토리의 허가 제한하기

스크립트나 CGI를 포함한 디렉토리에는 루트 사용자에게만 쓰기 허가를 부여하셔야 합니다. 다음 명령을 입력하시기 바랍니다:

chown root <directory_name>
chmod 755 <directory_name>

중요

또한 시스템 상에서 실행될 스크립트는 의도하는 대로 작동하는지 미리 확인하신 후 생산 환경에서 사용하셔야 합니다.

2.1.6. FTP 보안 강화

FTP (File Transport Protocol)는 네트워크 상에서 파일을 전송하기 위해 설계된 이전 TCP 프로토콜입니다. 사용자 인증을 포함한 서버와 주고받는 통신이 모두 암호화되지 않았기 때문에 이 프로토콜은 비보안 프로토콜로 간주되며 주의하여 설정하셔야 합니다.

Red Hat Enterprise Linux는 3가지 FTP 서버를 제공합니다.

  • gssftpd — 커베로스를 사용하는 xinetd-기반 FTP 데몬으로서 인증 정보를 네트워크 상에서 전달하지 않습니다.

  • Red Hat 콘텐츠 가속기(Content Accelerator) (tux) — FTP 기능을 갖춘 커널 영역 웹 서버.

  • vsftpd — 독립형, 보안 FTP 서비스

다음은 vsftpd FTP 서비스를 설정하는데 사용되는 보안 정책입니다.

2.1.6.1. FTP 환영 배너

사용자명과 암호를 입력하기 전에 환경 배너가 나타납니다. 이 배너에는 버전 정보가 포함되어 있으며, 이 정보는 크래커가 시스템 약점을 찾아내는데 유용하게 사용됩니다.

따라서 vsftpd의 환영 배너를 변경하시려면 /etc/vsftpd/vsftpd.conf 파일에 다음 지시자를 추가하시기 바랍니다:

ftpd_banner=<insert_greeting_here>

위의 지시자에서 <insert_greeting_here> 부분에 새로운 환영 메시지를 입력하십시오.

여러 개의 줄로 이루어진 배너 메시지를 입력하시려면 배너 파일을 사용하시는 것이 좋습니다 여러 배너를 손쉽게 관리하기 위하여 /etc/banners/라는 새 디렉토리를 만드신 후 모든 패너 파일을 이 디렉토리에 저장하십시오. 이 예시에서 FTP 접속에 사용되는 배너 파일은 /etc/banners/ftp.msg 입니다. 다음은 이 파일의 내용 예제입니다:

######### # 안녕하세요, ftp.example.com에 있는 모든 작업은 기록됩니다. #########

알림

2.1.1.1.1절. “TCP 래퍼와 연결 배너”에서 나타난 것처럼 파일의 모든 줄이 220으로 시작될 필요는 없습니다.

vsftpd에 이 환경 배너 파일을 사용하기 위해서는 /etc/vsftpd/vsftpd.conf 파일에 다음과 같은 지시자를 추가하십시오:

banner_file=/etc/banners/ftp.msg

또한 2.1.1.1.1절. “TCP 래퍼와 연결 배너”에서 설명된 것처럼 TCP 래퍼를 사용하여 들어오는 연결에 추가 배너 메시지를 보내는 것도 가능합니다.

2.1.6.2. 익명 계정(anonymous) 접속

/var/ftp/ 디렉토리를 생성하시면 익명 계정이 활성화됩니다.

이 디렉토리를 생성할 수 있는 가장 쉬운 방법은 vsftpd 패키지를 설치하는 것입니다. 이 패키지는 익명 사용자를 위한 디렉토리 구조를 설정하고, 익명 사용자에게 이 디렉토리를 읽기만 할 수 있는 허가를 설정합니다.

익명 사용자는 어느 디렉토리에도 쓰기 작업을 할 수 없도록 기본 설정되어 있습니다.

주의

FTP 서버에 익명 계정으로 접속을 활성화하실 경우 기밀 데이터가 저장된 디렉토리를 염두하시기 바랍니다.

2.1.6.2.1. 익명 사용자 계정으로 업로드

익명 사용자가 파일을 업로드하는 것을 허용하시려면 /var/ftp/pub/에 쓰기 전용 디렉토리를 생성하시기를 권장합니다.

이를 실행하기 위해 다음 명령을 입력하십시오:

mkdir /var/ftp/pub/upload

다음으로 익명 계정 사용자가 디렉토리 내의 내용을 보지 못하도록 허가를 변경하기 위해 다음 명령을 입력하십시오:

chmod 730 /var/ftp/pub/upload

디렉토리 목록은 다음과 같이 나타나야 합니다:

drwx-wx---    2 root     ftp          4096 Feb 13 20:05 upload

경고

관리자가 익명 사용자가 디렉토리에 읽고 쓸 수 있는 권한을 부여한 경우 종종 도단당한 소프트웨어가 서버에 저장되어 있는 것을 발견하게 됩니다.

vsftpd에서 추가적으로 다음 줄을 /etc/vsftpd/vsftpd.conf 파일에 첨가하십시오:

anon_upload_enable=YES

2.1.6.3. 사용자 계정

FTP는 비보안 네트워크 상에서 인증을 위해 암호화되지 않은 사용자명과 암호를 전달하기 때문에 시스템 사용자가 사용자 계정을 통해 서버에 접속하는 것을 거부하도록 설정하는 것이 좋습니다.

vsftpd에서 사용자 계정을 비활성화하시려면 /etc/vsftpd/vsftpd.conf 파일에 다음 지시자를 추가하십시오:

local_enable=NO
2.1.6.3.1. 사용자 계정 제한하기

각 서비스에서 직접 사용자 계정을 비활성화시키는 것도 가능합니다.

vsftpd에서 특정 사용자 계정을 비활성화시키려면 /etc/vsftpd.ftpusers에 해당 사용자명을 추가하시면 됩니다.

2.1.6.4. 접근 제어를 위해 TCP 래퍼 사용하기

2.1.1.1절. “TCP 래퍼를 사용하여 보안 강화하기”에서 설명된 것처럼 FTP 데몬으로 접근을 제어하기 위해서 TCP 래퍼를 사용하십시오.

2.1.7. Sendmail 보안 강화

Sendmail은 메일 전송 에이전트 (MTA)로서 SMTP (Simple Mail Transport Protocol)을 사용하여 다른 MTA와 이메일 클라이언트나 배달 에이전트 사이에서 전자 메시지를 배달하는 역할을 합니다. 많은 MTA가 서로 주고 받는 트래픽을 암호화 가능하지만, 대부분의 MTA는 그렇지 않습니다. 따라서 공중 네트워크 상에서 이메일을 주고받는 것은 안전하지 못한 통신 방식으로 간주됩니다.

Sendmail 서버를 사용하려고 계획하신다면 다음에 언급된 사항들을 해결하셔야 합니다.

2.1.7.1. 서비스 거부 공격 제한하기

이메일의 특성상, 침입자는 비교적 간단히 서버에 다량의 이메일을 집중적으로 보내어 서비스 거부 현상을 야기시킬 수 있습니다. /etc/mail/sendmail.mc에 다음과 같은 지시자를 제한 설정하여 이와 같은 서비스 거부 공격이 발생할 가능성을 줄일 수 있습니다.

  • confCONNECTION_RATE_THROTTLE — 일초당 서버가 받을 수 있는 연결 수를 지정합니다. Sendmail은 기본적으로 연결 수를 제한하지 않습니다. 만일 제한이 설정된 경우 한계수에 이르게 되면 그 후에 들어오는 연결은 지연됩니다.

  • confMAX_DAEMON_CHILDREN — 서버에서 배출할 수 있는 최대 자식 프로세스 수. Sendmail은 기본적으로 자식 프로세스의 수를 제한하지 않습니다. 만일 제한이 설정된 경우 한계수에 이르게 되면 그 후에 들어오는 연결은 지연됩니다.

  • confMIN_FREE_BLOCKS — 서버가 메일을 수용하는데 필요한 최소 여유 블록의 수. 기본값은 100 블록입니다.

  • confMAX_HEADERS_LENGTH — 메시지 헤더의 최대 용량 (바이트 단위)

  • confMAX_MESSAGE_SIZE — 한 메시지의 최대 용량 (바이트 단위)

2.1.7.2. NFS와 Sendmail

절대로 메일 스풀 디렉토리인 /var/spool/mail/를 NFS 공유 볼륨에 놓지 마십시오.

NFSv2와 NFSv3는 사용자 그룹 ID를 관리 제어하지 않으므로 두 명 이상의 사용자가 동일한 UID를 가질 수 있습니다. 따라서 서로의 메일을 받고 읽는 것이 가능해집니다.

알림

그러나 커베로스를 사용하는 NFSv4의 SECRPC_GSS 커널 모듈이 UID 기반 인증을 사용하지 않으므로 다릅니다. 메일 스풀 디렉토리를 NFS 공유 볼륨에 놓지 마십시오.

2.1.7.3. 메일 전용 사용자

이렇게 로컬 사용자가 Sendmail 서버를 악용하는 것을 방지하기 위하여 메일 사용자는 이메일 프로그램을 사용하여 Sendmail 서버만 사용하도록 설정하시는 것이 좋습니다. 메일 사용자는 메일 서버에서 쉘 계정을 갖지 못하고 /etc/passwd 파일에서 모든 메일 사용자 쉘은 /sbin/nologin으로 설정하셔야 합니다. (루트 사용자 예외)

2.1.8. 청취 중인 포트 확인하기

네트워크 서비스를 설정하신 후 어떤 포트가 시스템의 네트워크 인터페이스를 청취 중인지 확인하는 것이 중요합니다. 열려진 포트가 있다면 침입자가 있다는 증거일 수도 있습니다.

네트워크 상에서 청취 중인 포트를 찾아낼 수 있는 두가지 방법이 있습니다. 보다 덜 안정적인 방법으로 netstat -an 또는 lsof -i와 같은 명령을 입력하여 네트워크 스택을 질의하실 수 있습니다. 이 프로그램은 네트워크의 시스템에 연결하지 않고 시스템 상에 무엇이 실행 중인지 확인하기 때문에 신뢰성이 떨어집니다. 따라서 침입자는 종종 이 프로그램을 상대로 침입을 시도합니다. 침입자가 netstatlsof를 자신의 수정된 버전으로 교체하여 권한이 없는 네트워크 포트를 열게된 경우 침입한 자취를 감추는데 이러한 방법을 사용합니다.

보다 안전하게 네트워크 상에서 청취 중인 포트를 확인할 수 있는 방법은 nmap과 같은 포트 스캐너를 사용하는 것입니다.

콘솔에서 다음 명령을 입력하시면 네트워크에서 어느 포트가 TCP 연결을 청취하고 있는지 확인할 수 있습니다:

nmap -sT -O localhost

이 명령의 결과는 다음과 같이 출력될 것입니다:

Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-09-24 13:49 EDT
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1653 ports scanned but not shown below are in state: closed)
PORT      STATE SERVICE
22/tcp    open  ssh 
25/tcp    open  smtp
111/tcp   open  rpcbind
113/tcp   open  auth
631/tcp   open  ipp
834/tcp   open  unknown
2601/tcp  open  zebra
32774/tcp open  sometimes-rpc11
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 12.857 days (since Sat Sep 11 17:16:20 2004)

Nmap run completed -- 1 IP address (1 host up) scanned in 5.190 seconds

이 출력 결과는 시스템이 sunrpc 서비스가 존재하기 때문에 portmap을 실행 중인것을 보여줍니다. 그러나 포트 834에서 수상한 서비스를 발견할 수 있습니다. 이 포트가 공식적으로 알려진 서비스와 관계있는지 확인해보시려면 다음 명령을 입력하시기 바랍니다:

cat /etc/services | grep 834

이 명령이 아무런 결과도 출력하지 않습니다. 즉, 포트는 0에서 1023 사이의 범위에 속하지만 루트 권한이 있어야 열 수 있습니다. 따라서 이 포트는 알려진 서비스와 관련되지 않습니다.

다음으로 netstat이나 lsof를 사용하여 포트에 대한 정보를 확인해보시기 바랍니다. netstat을 사용하여 포트 834를 확인하시려면 다음 명령을 사용하십시오:

netstat -anp | grep 834

명령은 다음과 같은 결과를 출력할 것입니다:

tcp   0    0 0.0.0.0:834    0.0.0.0:*   LISTEN   653/ypbind

netstat을 사용하여 열려진 포트를 발견하시면 이 포트가 안전하다고 안심하실 수 있습니다. 그 이유는 크래커가 침입한 시스템에서 은밀하게 포트를 연 경우에는 이 명령을 사용하여 발견되지 않도록 설정할 것이기 때문에 포트가 열려져 있다는 것은 이 포트가 안전하다는 것을 의미합니다. 또한 [p] 옵션은 포트를 연 서비스의 프로세스 ID (PID)를 보여줍니다. 이 예시에서 열려진 포트는 portmap 서비스와 함께 사용되는 RPC 서비스인 ypbind (NIS)에 사용됩니다.

lsof 명령도 열려진 포트와 관련된 서비스를 보여주는 기능을 갖추고 있으므로 netstat와 유사한 정보를 보여줍니다:

lsof -i | grep 834

다음은 출력 결과에서 이 명령과 관련있는 부분입니다:

ypbind      653        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      655        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      656        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      657        0    7u  IPv4       1319                 TCP *:834 (LISTEN)

이러한 도구를 사용하여 시스템 상에서 실행 중인 서비스의 상태에 대한 많은 정보를 얻을 수 있습니다. 이 도구들은 사용이 유연하며 네트워크 서비스와 설정에 대한 광범위한 정보를 제공합니다. 보다 자세한 정보는 lsof, netstat, nmap, services의 메뉴얼 페이지를 참조하시기 바랍니다.

2.2. PAM (Pluggable Authentication Modules)

시스템에 사용자 액세스 권한을 부여하는 프로그램은 인증을 통해 사용자 신분을 확인합니다. (즉, 사용자가 누구인지를 설정함)

일반적으로, 각각의 프로그램은 고유한 사용자 인증 방식을 갖고 있습니다. Red Hat Enterprise Linux에서 대부분의 프로그램은 PAM (Pluggable Authentication Modules)이라고 불리우는 중앙 집중 인증 메카니즘을 사용하여 설정됩니다.

PAM은 장착가능한 모듈러 아키텍쳐를 사용하여 시스템 관리자에게 시스템의 인증 정책을 설정하는 데에 있어서 유연성을 제공합니다.

대부분의 경우, PAM-aware 응용 프로그램에 대해 기본 PAM 설정 파일이면 충분하지만 때때로, PAM 설정 파일을 수정해야 할 필요가 있습니다. PAM의 잘못된 설정으로 인해 시스템 보안이 손상될 수 있으므로, 파일을 수정하기 전에 파일의 구조를 이해하는 것이 중요합니다. 보다 자세한 정보는 2.2.3절. “PAM 설정 파일 포멧”에서 참조하시기 바랍니다.

2.2.1. PAM의 장점

PAM에는 다음과 같은 장점이 있습니다:

  • 다양한 응용 프로그램과 함께 사용할 수 있는 일반적인 인증 설계.

  • 인증에 있어서 시스템 관리자와 프로그램 개발자를 위한 유연성 및 제어 기능.

  • 인증 설계를 생성하지 않고 개발자가 프로그램에 쓰는 것을 허용하는 완전 문서화된 단독 라이브러리.

2.2.2. PAM 설정 파일

/etc/pam.d/ 디렉토리에는 각각의 PAM-aware 응용 프로그램에 대한 PAM 설정 파일이 있습니다. 이전 버전의 PAM에는 /etc/pam.conf 파일이 사용되었으나, 현재 이 파일은 삭제되었으며 이는 /etc/pam.d/ 디렉토리가 존재하지 않을 경우에만 사용됩니다.

2.2.2.1. PAM 서비스 파일

각각의 PAM-aware 응용 프로그램이나 서비스/etc/pam.d/ 디렉토리에 파일을 갖습니다. 이 디렉토리에 있는 각각의 파일은 액세스를 제어하는 서비스와 같은 이름을 갖습니다.

PAM-aware 프로그램은 자신의 서비스명을 정의하고 /etc/pam.d/ 디렉토리에 PAM 설정 파일을 설치합니다. 예를 들어, login 프로그램은 login으로 자신의 서비스명을 정의하고 /etc/pam.d/login PAM 설정 파일을 설치합니다.

2.2.3. PAM 설정 파일 포멧

각각의 PAM 설정 파일에는 다음과 같이 포멧된 지시문 그룹이 있습니다:

<module interface><control flag><module name><module arguments>

이러한 각각의 요소에 대해서는 다음 부분에서 설명합니다.

2.2.3.1. 모듈 인터페이스

현재 네 가지 유형의 PAM 모듈 인터페이스가 사용 가능합니다. 각각의 유형은 권한 부여 과정의 다른 양상을 띠고 있습니다.

  • auth — 이러한 모듈 인터페이스는 사용을 인증합니다. 예를 들어, 이는 암호의 유효성을 요청 및 확인합니다. 이러한 인터페이스를 갖는 모듈은 그룹 멤버쉽이나 커베로스 티켓과 같이 인증을 설정할 수 있습니다.

  • account — 이러한 모듈 인터페이스는 액세스를 허용하는 지를 확인합니다. 예를 들어, 사용자 계정이 만료되었는지 또는 특정 시간에 사용자의 로그인이 허용되는지를 확인합니다.

  • password — 이러한 모듈 인터페이스는 사용자 암호를 변경하는 데 사용됩니다.

  • session — 이러한 모듈 인터페이스는 사용자 세션을 설정 및 관리합니다. 이러한 인터페이스를 갖는 모듈은 사용자의 홈 디렉토리를 마운트하기와 사용자의 메일 박스를 사용 가능하게 하는 것과 같은 액세스를 허용해야 하는 추가적 작업을 실행할 수 도 있습니다.

주의

개별 모듈은 모든 모듈 인터페이스를 제공할 수 있습니다. 예를 들어, pam_unix.so는 네 가지 모듈 인터페이스 모두를 제공합니다.

PAM 설정 파일에서, 모듈 인터페이스는 처음으로 정의되어야 할 영역입니다. 예를 들어, 설정에서 나타나는 전형적인 줄은 다음과 같습니다:

auth        required        pam_unix.so

이는 PAM이 pam_unix.so 모듈의 auth 인터페이스를 사용하게 합니다.

2.2.3.1.1. 모듈 인터페이스 스택하는 중

모듈 인터페이스 지시문은 스택되거나 또는 서로 위치할 수 있어, 여러 모듈이 하나의 목적으로 함께 사용될 수 있습니다. 모듈의 제어 플래그가 "충분한" 또는 "필요한" 값을 사용할 경우 (이러한 플래그에 관한 보다 자세한 정보는 2.2.3.2절. “제어 플래그”에서 참조), 모듈 목록이 있는 순서가 인증 과정에서 중요하게 됩니다.

스택하는 것은 사용자 인증을 허용하기 전에 존재하는 특정 사항을 관리자가 쉽게 필요로하게 합니다.예를 들어, 일반적으로 reboot 명령은 PAM 설정 파일에서 볼 수 있듯이 스택된 여러 모듈을 사용합니다.

[root@MyServer ~]# cat /etc/pam.d/reboot
#%PAM-1.0
auth        sufficient        pam_rootok.so
auth        required        pam_console.so
#auth        include        system-auth
account        required        pam_permit.so
  • 첫 번째 줄은 주석으로 실행되지 않습니다.

  • auth sufficient pam_rootok.so — 이 줄은 pam_rootok.so 모듈을 사용하여 사용자의 UID가 0임을 확인함으로써 사용자가 현재 루트에 있는 지를 확인합니다. 이러한 테스트가 성공적으로 이루어지면, 더이상 다른 모듈이 제시되지 않으며 명령이 실행됩니다. 테스트가 실패할 경우, 다음 모듈이 제시됩니다.

  • auth required pam_console.so — 이 줄은 pam_console.so 모듈을 사용하여 사용자 인증을 확인합니다. 사용자가 이미 콘솔에 로그인되어 있을 경우, pam_console.so 파일은 /etc/security/console.apps/ 디렉토리에 서비스명과 같은 이름을 가진 파일이 있는 지를 확인합니다 (재부팅). 이러한 파일이 존재할 경우, 성공적으로 인증이 이루어지며 다음 모듈로 제어권이 넘어갑니다.

  • #auth include system-auth — 이 줄은 주석으로 실행되지 않습니다.

  • account required pam_permit.so — 이 줄은 pam_permit.so 모듈을 사용하여 루트 사용자나 또는 시스템에 재부팅하기 위해 콘솔에 로그인하는 사용자를 허용합니다.

2.2.3.2. 제어 플래그

모든 PAM 모듈은 호출되었을 때 성공 또는 실패 결과를 생성합니다. 제어 플래그는 PAM에게 결과에 어떻게 대응할 지를 지시합니다. 모듈은 특정한 순서로 스택될 수 있으며, 제어 플래그는 특정 모듈의 성공 또는 실패 결과가 사용자를 서비스에 인증하게 하는 전체 목적에 얼마나 중요한 지를 결정합니다.

네 개의 미리 정의된 제어 플래그입니다:

  • required — 모듈 결과가 반드시 성공적으로 이루어져야 인증 작업을 계속 진행할 수 있습니다. 이 시점에서 모듈 테스트를 실패할 경우, 인터페이스를 참조하는 모든 모듈 테스트의 결과가 완료될 때 까지 사용자는 인식되지 않게 됩니다.

  • requisite — 모듈 결과가 반드시 성공적으로 이루어져야 인증 작업을 계속 진행할 수 있습니다. 하지만, 이 시점에서 모듈 테스트를 실패할 경우, 사용자는 처음으로 실패한 required또는 requisite 모듈 테스트를 반영하는 메세지와 함께 바로 인식됩니다.

  • sufficient — 모듈 테스트를 실패할 경우, 모듈 결과는 무시됩니다. 하지만, sufficient로 플래그된 모듈의 결과가 성공적으로 이루어지고required로 플래그된 이전 모듈이 실패하지 않은 경우, 다른 결과가 필요하지 않게 되며 사용자는 서비스에 인증됩니다.

  • optional — 모듈 결과가 무시됩니다. 다른 모듈이 인터페이스를 참조하지 않을 때 optional로 플래그된 모듈만이 성공적인 인증 작업을 위해 필요합니다.

중요 사항

required 모듈이 호출되는 순서는 중요하지 않습니다. sufficientrequisite 제어 플래그만이 순서가 중요하게 됩니다.

보다 정교하게 제어할 수 있는 새로운 제어 플래그 구문이 현재 PAM에서 사용 가능합니다.

/usr/share/doc/pam-<version-number>/ 디렉토리에 있는 pam.d 메뉴얼 페이지와 PAM 문서는 이러한 새로운 구문에 대하여 자세하게 설명합니다. 여기서<version-number>는 시스템에 있는 PAM의 버전 번호로 대체합니다.

2.2.3.3. 모듈명

모듈명은 특정 모듈 인터페이스를 포함하는 장착식 모듈 명과 함께 PAM을 제공합니다. Red Hat Enterprise Linux 버전 순서에서, 모듈로의 완전한 경로는 PAM 설정 파일에 제공되지만, /lib64/security/ 디렉토리에 있는 64비트 PAM 모듈을 저장할 수 있는 multilib 시스템이 나타나면서, 디렉토리명이 생략되었습니다. 이는 응용 프로그램이 올바른 모듈 버전을 배치할 수 있는 libpam 버전에 링크되기 때문입니다.

2.2.3.4. 모듈 인자

PAM은 몇몇 모듈에 대해 인증하는 동안 인자를 사용하여 장착식 모듈에 정보를 전달합니다.

예를 들어, pam_userdb.so 모듈은 Berkeley DB 파일에 저장된 정보를 사용하여 사용자를 인증합니다. Berkeley DB는 많은 응용 프로그램에 내장된 오픈 소스 데이터베이스 시스템입니다. 모듈이 db 인자를 갖음으로서 Berkeley DB는 어떤 데이터베이스가 요청된 서비스에 사용되는 지를 알게 됩니다.

다음은 PAM 설정에서의 전형적인 pam_userdb.so 줄입니다. <path-to-file>는 Berkeley DB 데이터베이스 파일로의 완전 경로로 대체합니다.

auth        required        pam_userdb.so db=<path-to-file>

잘못된 인자는 일반적으로 무시되며 PAM 모듈의 성공 또는 실패 결과에 영향을 미치지 않습니다. 하지만, 몇개의 모듈은 잘못된 인자로 인해 실패될 수 도 있습니다. 대부분의 모듈은 /var/log/secure 파일에 오류를 보고합니다.

2.2.4. PAM 설정 파일의 예

다음은 PAM 응용 프로그램 설정 파일의 예입니다:

#%PAM-1.0
auth        required  pam_securetty.so
auth        required  pam_unix.so nullok
auth        required  pam_nologin.so
account        required  pam_unix.so
password        required  pam_cracklib.so retry=3
password        required  pam_unix.so shadow nullok use_authtok
session        required  pam_unix.so
  • 첫 번째 줄은 주석으로, 줄은 해쉬 표시 (#)로 시작합니다.

  • 로그인 인증을 위해 4개의 스택 3개의 모듈을 통해 두 줄을 만듭니다.

    auth required pam_securetty.so — 이 모듈은 사용자가 루트로 로그인하려 할 경우, 사용자가 로그인되어 있는 tty는 파일이 존재할 경우/etc/securetty 파일 목록에 있게 됩니다.

    tty가 파일 목록에 없을 경우, Login incorrect 메세지와 함께 루트로 로그인을 실패하게 됩니다.

    auth required pam_unix.so nullok — 이 모듈은 사용자에게암호를 요구하며 /etc/passwd/etc/shadow (이 파일이 존재할 경우)에 저장된 정보를 사용하여 암호를 확인합니다.

    • nullok 인자는 공백 암호를 허용하는 pam_unix.so 모듈을 지시합니다.

  • auth required pam_nologin.so — 마지막 인증 단계로 /etc/nologin 파일이 존재하는 지를 확인합니다. 파일이 존재하고 사용자가 루트에 있지 않을 경우, 인증 실패합니다.

    주의

    이 예시에서, 첫 번째 auth 모듈이 실패했지만 세 개의 모든 auth 모듈이 확인되었습니다. 이는 사용자가 어떤 단계에서 자신의 인증이 실패되었는지를 알지 못하게 합니다. 이러한 내용이 침입자의 손에 들어가면 침입자가 시스템에 침입하는 방법을 보다 쉽게 추론하게 할 수 있습니다.

  • account required pam_unix.so — 이 모듈은 필요한 계정 확인 작업을 실행합니다. 예를 들어, 쉐도우 암호가 활성화되었을 경우, pam_unix.so 모듈의 계정 인터페이스는 계정이 만료되었는지 또는 사용자가 허용된 유예 기간 안에 암호를 변경하였는지를 확인합니다.

  • password required pam_cracklib.so retry=3 — 암호가 만료된 경우, pam_cracklib.so 모듈의 암호 구성 요소는 새로운 암호를 만들 것을 요구합니다. 그 후에 새로 생성된 암호에 대해 사전 기반 암호 해킹 프로그램에 의해 쉽게 결정될 수 있는 지를 테스트합니다.

    • retry=3 인수는 테스트가 처음으로 실패했는 지를 지정하고,사용자에게 강력한 암호를 생성할 수 있는 두 번의 기회가 주어집니다.

  • password required pam_unix.so shadow nullok use_authtok — 이 줄은 프로그램이 사용자 암호를 변경하였는 지를 지정하고, 이를 실행하기 위해 pam_unix.so 모듈의 password 인터페이스를 사용해야 합니다.

    • shadow 인수는 모듈을 지시하여 사용자 암호를 업데이트할 때 쉐도우 암호를 생성합니다.

    • nullok 인수는 모듈을 지시하여 사용자가 공백 암호에서 자신의 암호를 변경할 수 있게 허용합니다. 그렇지 않을 경우, 공백 암호는 계정 잠금으로 다루어 집니다.

    • 이 줄에 있는 마지막 인수인 use_authtok는 PAM 모듈을 스택할 때 순서의 중요함을 보여주는 예 입니다. 이러한 인수는 모듈이 사용자에게 새로운 암호를 요구하지 않도록 지시합니다. 대신, 이전 암호 모듈에 의해 기록된 암호중 아무것이나 허용합니다. 이러한 방법에서, 모든 새로운 암호는 암호의 보안을 위해 암호를 허용하기 전pam_cracklib.so 테스트를 거쳐야 합니다.

  • session required pam_unix.so — 마지막 줄은 세션을 관리하기 위한 pam_unix.so 모듈의 세션 인터페이스를 지시합니다. 이 모듈은 각 세션의 시작과 마지막에 사용자명과 서비스 유형을 /var/log/secure에 기록합니다. 이 모듈은 다른 세션 모듈을 사용하여 스택함으로서 추가 기능을 보완할 수 있습니다.

2.2.5. PAM 모듈 생성

PAM-aware 응용 프로그램을 사용하여 언제든지 새로운 PAM 모듈을 생성하거나 추가하실 수 있습니다.

예를 들어, 개발자는 일회용 암호 생성 방식을 만들어 이를 지원하기 위해 PAM 모듈을 기록할 수 도 있습니다. PAM-aware 프로그램은 새로운 모듈과 암호를 재컴파일하거나 수정하지 않고 즉시 사용할 수 있습니다.

이는 개발자와 시스템 관리자에게 다른 프로그램에 대해 이를 재컴파일하지 않고 인증 방식을 테스트함은 물론 혼합하고 붙일수 있게 합니다.

모듈 쓰기에 있는 문서는 /usr/share/doc/pam-<version-number>/ 디렉토리에 포함되어 있으며, 여기서 <version-number>는 시스템에 있는 PAM의 버전 번호로 대체합니다.

2.2.6. PAM 및 관리자 인증 캐싱

Red Hat Enterprise Linux에 있는 그래픽 관리자 도구의 수는 pam_timestamp.so 모듈을 사용하여 최대 5분 동안 사용자에게 극도의 권한을 제공합니다. pam_timestamp.so 파일이 작동하고 있는 동안 터미널에서 떨어진 사용자가 콘솔로 물리적으로 액세스하려는 누군가에 의한 조작으로 인해 컴퓨터가 열린 채로 있을 수 있으므로 이러한 메카니즘이 어떻게 작동하는 지를 이해하는 것이 중요합니다.

PAM 타임스탬프 설계에서, 그래픽 관리자 응용프로그램은이 시작할 때 이는 사용자에게 루트 암호를 요청합니다. 사용자가 인증 확인되면, pam_timestamp.so 모듈은 타임스탬프 파일을 생성합니다. 이는 /var/run/sudo/ 디렉토리에 기본으로 생성됩니다. 타임스탬프 파일이 이미 존재할 경우, 그래픽 관리자 프로그램은 암호를 요청하지 않고 대신, pam_timestamp.so 모듈은 타임스탬프 파일을 새롭게 하고 사용자를 위해 문제가 되지 않는 관리자 액세스에 대한 5분의 여유 시간을 보유해 둡니다.

/var/run/sudo/<user> 파일을 검사하여 타임스탬프의 실제적인 상태를 확인하실 수 있습니다. 데스크탑에 대한 관련 파일은 unknown:root입니다. 이 파일이 존재하고 파일의 타임스탬프가 5분 미만으로 경과하였을 경우, 인증이 유효합니다.

인증 아이콘이 타임스탬프 파일의 존재를 보여주며, 이는 패널의 알림 상자에 나타납니다.

인증 아이콘

인증 아이콘의 예시

그림 2.1. 인증 아이콘

2.2.6.1. 타임스탬프 파일 삭제 중

PAM 타임스탬프가 활성화되는 곳에서 콘솔을 배제하기 전에, 타임스탬프 파일을 삭제시킬 것을 권장합니다. 그래픽 환경에서 이를 실행하기 위해, 패널 상의 인증 아이콘을 클릭하면 대화 상자가 나타납니다. 관리자 권한 해제하기 버튼을 클릭하여 활성화된 타임스탬프 파일을 삭제합니다.

인증 다이얼로그 해제

인증 해제 대화 상자의 예시

그림 2.2. 인증 다이얼로그 해제

PAM 타임스탬프 파일에 대해 다음 사항을 주의하시기 바랍니다:

  • ssh를 사용하여 원격으로 시스템에 로그인할 경우, /sbin/pam_timestamp_check -k root 명령을 사용하여 타임스탬프 파일을 삭제합니다.

  • 권한이 있는 응용 프로그램을 시작하는 것으로 부터 같은 터미널 윈도우에서 /sbin/pam_timestamp_check -k root 명령을 실행하셔야합니다.

  • /sbin/pam_timestamp_check -k 명령을 사용하시려면pam_timestamp.so 모듈을 불러내는 사용자로 로그인하셔야 합니다. 이 명령을 사용하기 위해 루트로 로그인하지 마십시오.

  • 데스크탑 상에서 (아이콘에 있는 권한부여 해제하기 작업을 사용하지 않고) 인증을 종료하시려면, 다음 명령을 사용하시기 바랍니다:

    /sbin/pam_timestamp_check -k root </dev/null >/dev/null 2>/dev/null
    

    이 명령의 사용을 실패는 명령을 실행하신 곳에 있는 pty 에서 (만일 있을 경우) 인증을 삭제하게 됩니다.

pam_timestamp_check를 사용하여 타임스탬프 파일을 삭제하는 것에 관한 보다 자세한 정보는 pam_timestamp_check 메뉴얼 페이지를 참조하시기 바랍니다.

2.2.6.2. 일반적인 pam_timestamp 지시문

pam_timestamp.so 모듈은 여러 지시문을 허용합니다. 다음은 가장 일반적으로 사용되는 두 개의 옵션입니다:

  • timestamp_timeout — 타임스탬프 파일이 유효한 기간을 (초 단위) 지정합니다. 기본 값은 300초 (5분)입니다.

  • timestampdir — 타임스탬프 파일이 저장된 디렉토리를 지정합니다. 기본 값은 /var/run/sudo/입니다.

pam_timestamp.so 모듈 제어에 관한 보다 자세한 정보는 2.2.8.1절. “설치된 문서”에서 참조하시기 바랍니다.

2.2.7. PAM 및 장치 소유권

Red Hat Enterprise Linux에서, 컴퓨터의 물리적 콘솔에 로그인한 첫 번째 사용자는 특정한 장치를 조작할 수 있으며 루트 사용자을 위해 보유된 특정 작업을 실행할 수 있습니다. 이는 pam_console.so라고 불리는 PAM 모듈에 의해 제어됩니다.

2.2.7.1. 장치 소유권

사용자가 Red Hat Enterprise Linux 시스템에 로그인할 때, pam_console.so 모듈은 login 또는 그래픽 로그인 프로그램, gdm, kdm, xdm에 의해 호출됩니다. 이러한 사용자가 물리적 콘솔에 로그인하는 첫 번째 사용자일 경우 — console user로 불려짐 — 모듈은 일반적으로 루트 사용자에 의해 소유되었던 여러 장치의 사용자 소유권이 확장됩니다. 콘솔 사용자는 사용자의 마지막 로컬 세션이 끝날때 까지 이러한 장치를 소유합니다. 이러한 사용자가 로그 아웃한 후, 장치의 소유권은 루트 사용자에게로 복귀됩니다.

영향을 미치는 장치에는 사운드 카드, 디스켓 드라이브, CD-ROM 드라이브가 포함되지만, 이에 제한되지는 않습니다.

이러한 장치는 로컬 사용자가 루트 액세스 없이 이러한 장치를 조작하는 것을 허용하므로, 콘솔 사용자를 위한 일반적인 작업을 단순화시킬 수 있습니다.

다음의 파일을 편집하여 pam_console.so에 의해 제어되는 장치 목록을 수정하실 수 있습니다.

  • /etc/security/console.perms

  • /etc/security/console.perms.d/50-default.perms

위의 파일 목록보다는 다른 장치의 사용 권한을 변경하시거나 또는 특정 기본값으로 덮어쓰실 수 있습니다. 50-default.perms 파일을 수정하는 대신, 새로운 파일을 생성하시고 (예, xx-name.perms) 필요한 사항을 수정하시기 바랍니다. 새로운 기본 파일명은 50 이상의 숫자로 시작해야 합니다. (예, 51-default.perms) 이는 50-default.perms 파일에 있는 기본값을 덮어 쓰게 됩니다.

경고

gdm, kdm, 또는xdm 디스플레이 관리자 설정파일이 원격 사용자의 로그인을 허용하게 하기 위해 변경되고 또한 호스트가 런레벨 5에서 실행되도록 설정되었을 경우, /etc/security/console.perms에 있는 <console><xconsole> 지시문을 다음의 값으로 변경할 것을 권장합니다:

<console>=tty[0-9][0-9]* vc/[0-9][0-9]* :0\.[0-9] :0 
<xconsole>=:0\.[0-9] :0

이는 원격 사용자가 컴퓨터 상의 장치 및 제한된 응용 그로그램에 액세스하지 못하게 합니다.

gdm, kdm, 또는xdm 디스플레이 관리자 설정 파일이 원격 사용자의 로그인을 허용하게 하기 위해 변경되고 또한 호스트가 런레벨 5가 아닌 다중 사용자 런레벨에서 실행되도록 설정되었을 경우, <xconsole> 지시문을 완전히 삭제하고 <console> 지시문을 다음의 값으로 변경할 것을 권장합니다:

<console>=tty[0-9][0-9]* vc/[0-9][0-9]*

2.2.7.2. 응용 프로그램 액세스

콘솔 사용자는 /etc/security/console.apps/ 디렉토리에서 사용하도록 설정된 특정 프로그램에도 액세스합니다.

이 디렉토리에는 콘솔 사용자가 /sbin and /usr/sbin에 있는 특정 응용 프로그램을 실행할 수 있는 설정 파일이 포함되어 있습니다.

이 설정 파일에는 콘솔 사용자가 설정한 응용 프로그램과 같은 이름이 있습니다.

콘솔 사용자가 액세스한 주목할만한 응용 프로그램 그룹 중 하나는 시스템을 종료하거나 재부팅하는 세가지 프로그램입니다:

  • /sbin/halt

  • /sbin/reboot

  • /sbin/poweroff

이는 PAM-aware 응용 프로그램이므로, 사용을 위한 기본 조건으로서 pam_console.so 모듈을 호출합니다.

보다 자세한 정보는 2.2.8.1절. “설치된 문서”에서 참조하시기 바랍니다.

2.2.8. 추가 자료

다음의 자료는 PAM을 사용하고 설정하는 방식에 대해 보다 자세하게 설명합니다. 이러한 자료에 더하여, 시스템에 있는 PAM 설정 파일을 읽어보시면 PAM의 구성 방식에 대해 보다 명확하게 이해하실 수 있습니다.

2.2.8.1. 설치된 문서

  • PAM과 관련된 메뉴얼 페이지 — PAM과 관련된 다양한 응용프로그램 및 설정 파일에 대한 여러 메뉴얼 페이지가 있습니다. 다음은 보다 중요한 메뉴얼 페이지의 목록입니다.

    설정 파일
    • pam — PAM 설정 파일에 대한 구조 및 목적을 포함하는 PAM에 관한 개요.

      이 메뉴얼 페이지에서는 /etc/pam.d/ 디렉토리에 있는 /etc/pam.conf 및 개별 설정 파일에 관해 설명하고 있음을 유의하시기 바랍니다. 기본적으로 Red Hat Enterprise Linux에서는 /etc/pam.d/ 디렉토리에 있는 개별 설정 파일을 사용하며, /etc/pam.conf 파일이 있을지라도 이를 무시합니다.

    • pam_consolepam_console.so 모듈의 목적에 대해 설명하며, PAM 설정 파일 안에 있는 항목에 대한 올바른 구문에 대해서도 설명합니다.

    • console.apps — PAM에 의해 할당된 콘솔 사용자가 액세스할 수 있는 응용 프로그램에는 어떤 것이 있는 지를 정의하는 /etc/security/console.apps 설정 파일에서 사용 가능한 포맷 및 옵션에 대해 설명합니다.

    • console.perms — PAM에 의해 할당된 콘솔 사용자 허용을 지정하는 /etc/security/console.perms 설정 파일에서 사용 가능한 포맷 및 옵션에 대해 설명합니다.

    • pam_timestamppam_timestamp.so 모듈에 대해 설명합니다.

  • /usr/share/doc/pam-<version-number>시스템 관리자 가이드 (System Administrators' Guide), 모듈 작성자 메뉴얼 (Module Writers' Manual), 응용 프로그램 개발자 메뉴얼 (Application Developers' Manual), PAM 기준, DCE-RFC 86.0을 포함하고 있며, 여기서 <version-number>는 PAM 버전 번호로 대체합니다.

  • /usr/share/doc/pam-<version-number>/txts/README.pam_timestamppam_timestamp.so PAM 모듈에 관한 정보를 포함하고 있으며, 여기서 <version-number>는 PAM 버전 번호로 대체합니다.

2.2.8.2. 유용한 웹사이트

  • http://www.kernel.org/pub/linux/libs/pam/ — Linux-PAM 프로젝트에 대한 주요 웹사이트로 이에는 다양한 PAM 모듈에 관한 정보와 FAQ 그리고 추가적 PAM 문서가 포함되어 있습니다.

    주의

    위의 웹사이트에 있는 문서는 마지막으로 출시된 새로운 PAM 버전으로 Red Hat Enterprise Linux에 포함된 PAM 버전과 100% 일치하지 않을 수 도 있습니다.

2.3. 가상 사설 통신망 (Virtual Private Networks)

여러 사무실을 두고 있는 기업체에서는 전용선으로 각 사무실을 연결하여 중요한 정보를 보다 효율적으로 또한 안전하게 전송합니다. 예를 들면, 많은 기업체에서는 end-to-end 네트워킹 솔루션으로서 프레임 중계(frame relay) 서비스나 ATM (Asynchronous Transfer Mode) 서비스를 사용하여 각 사무실 간에 업무용 데이터를 전송합니다. 이러한 방법은 값비싼 엔터프라이즈 수준의 전용 디지털 회로에 드는 비용을 절감하면서 회사를 확장하기를 바라는 기업체에게는, 특히 중소 기업체 (SMB)의 경우에는 비용이 많이 드는 솔루션입니다.

값비싼 엔터프라이즈 전용 회로에 대해 비용면에서 보다 저렴한 대안책으로서 가상 사설 통신망 (Virtual Private Networks) (VPN)이 개발되었습니다. VPN은 전용 회로와 동일한 기능을 제공하면서 두 위치 간에 보안 디지털 통신을 성립하여 기존 LAN (Local Area Networks)으로부터 WAN (Wide Area Network)을 구성하며, 프레임 중계나 ATM과는 사용하는 전송 매체에서 차이가 있습니다. VPN은 전송 계층(transport layer) 데이터그램을 사용하여 IP 상으로 전송하기 때문에 인터넷을 통하여 원하는 목적지까지 안전한 선로를 통하게 됩니다. 대부분의 자유 소프트웨어 VPN은 전송 중인 자료의 보다 안전한 보안을 위해 공개 표준, 공개 소스 암호화 방식을 사용합니다.

일부 기관에서는 보안을 강화시키기 위해 하드웨어 VPN 솔루션을 사용하는 반면, 다른 기업체에서는 소프트웨어나 프로토콜 기반 VPN을 사용합니다. 하드웨어 VPN 솔루션을 제공하는 업체에는 Cisco, Nortel, IBM 및 Checkpoint와 같은 기업이 있습니다. FreeS/Wan이라는 리눅스 용 자유 소프트웨어 기반 VPN 솔루션은 표준 IPsec (Internet Protocol Security) 시스템을 사용합니다. 이러한 VPN 솔루션은 하드웨어나 소프트웨어 기반에 상관없이 한 사무실에서 다른 사무실 간 중간에서 IP를 연결하는 특수 라우터로 작동합니다.

2.3.1. VPN은 어떻게 작동합니까?

클라이언트에서 패킷을 전송시, 패킷은 VPN 라우터나 게이트웨이를 통하여 보내진 후, 인증 헤더 (Authentication Header) (AH)라는 라우팅과 인증에 대한 헤더 정보가 추가됩니다. 데이터가 암호화되면 마지막으로, ESP (Encapsulating Security Payload)가 삽입됩니다. 이는 나중에 암호 해독과 지시 사항을 처리하게 됩니다.

수신 VPN 라우터는 헤더 정보를 떼내어 읽어본 후, 데이터를 해독하여 목적지 (워크스테이션이나 네트워크 상 컴퓨터)로 라우팅합니다. 네트워크 간 연결을 사용하여 지역 네트워크 상 수신 컴퓨터는 암호 해독되어 처리될 준비가 된 패킷을 전송받습니다. 네트워크 간 VPN 연결에서 암호화/암호 해독 과정은 지역 컴퓨터에서 투명하게 진행됩니다.

이러한 강화된 보안 덕분에, 크래커는 패킷을 중간에서 가로챈 경우 그 패킷을 암호 해독해야 내용을 볼 수 있습니다. 또한 침입자가 man-in-the-middle 공격 방식을 이용하여 서버와 클라이언트 사이의 통신을 엿듣기 시도할 경우 인증 세션에 사용되는 최소 한개의 비밀키가 있어야 합니다. 이렇듯 VPN은 여러 계층의 인증과 암호 방식을 사용하기 때문에, 다른 장소에 위치한 원격 시스템을 하나의 인트라넷으로 안전하고 효율적으로 연결할 수 있습니다.

2.3.2. VPN 및 Red Hat Enterprise Linux

Red Hat Enterprise Linux는 사용자에게 WAN을 보안 연결하기 위해 다양한 소프트웨어 솔루션을 제공해 드립니다. IPsec (Internet Protocol Security)은 Red Hat Enterprise Linux가 지원하는 VPN으로서, 본사와 지역 사무실 및 원거리 근무자를 하나로 묶는 인트라넷을 안전하고 효율적으로 구현 가능합니다.

2.3.3. IPsec

Red Hat Enterprise Linux는 인터넷과 같은 공중 네트워크 상에서 보안 터널을 사용하여 원격 호스트와 네트워크를 연결해주는 IPsec을 지원합니다. IPsec은 호스트 간 (한 컴퓨터 워크스테이션에서 다른 워크스테이션으로) 또는 네트워크 간 (한 LAN/WAN에서 다른 LAN/WAN으로) 연결을 사용하여 구현됩니다.

Red Hat Enterprise Linux에서는 시스템을 안전하게 연결하고 상호 인증하기 위해 IETF (Internet Engineering Task Force)가 구현한 프로토콜인 IKE (Internet Key Exchange:인터넷 키 교환)을 사용하여 IPsec을 구현합니다.

2.3.4. IPsec 연결 생성하기

IPsec연결은 두가지 논리적 단계로 나누어 집니다. 1 단계에서 IPsec 컴퓨터는 원격 컴퓨터나 네트워크에 연결을 초기화합니다. 원격 컴퓨터나 네트워크는 연결을 요청한 컴퓨터의 보안 정보를 확인한 후 연결에 사용될 인증 방식을 협상합니다.

Red Hat Enterprise Linux 시스템에서는 IPsec 연결을 위해 pre-shared key(사전 공유 키) 방식의 IPsec 컴퓨터 인증을 사용합니다. 사전 공유 키 방식을 사용하는 IPsec 연결에서는 양 컴퓨터가 동일한 키를 가지고 공유하고 있어야 IPsec 연결 2 단계로 넘어갈 수 있습니다.

IPsec 연결 2 단계에서는 IPsec 컴퓨터 간에 SA (Security Association)가 설정됩니다. 암호화 방식, 비밀 세션키 교환 변수 등과 같은 설정 정보를 담은 SA 데이터베이스가 만들어지며, 원격 컴퓨터와 네트워크 사이에서 실제 IPsec 연결을 관리하는 단계입니다.

Red Hat Enterprise Linux에서 IPsec을 구현하는데 IKE를 사용하여 인터넷 상에서 호스트 간에 키를 공유합니다. racoon 키 관리 데몬이 IKE 키를 배포하고 교환합니다. 이러한 데몬에 관한 보다 자세한 정보는 racoon 메뉴얼 페이지를 참조하시기 바랍니다.

2.3.5. IPsec 설치

IPsec을 구현하기 위해서는 모든 IPsec 호스트(호스트 간 설정을 사용하는 경우) 또는 라우터(네트워크 간 설정을 사용하는 경우)에 ipsec-tools RPM 패키지가 설치되어 있어야 합니다. 이 RPM 패키지에는 IPsec 연결을 설정하는데 필요한 라이브러리, 데몬 및 설정 파일이 포함되어 있습니다. 패키지 내용물은 다음과 같습니다:

  • /sbin/setkey — 커널에서 키 관리와 IPsec의 보안 속성을 조정합니다. 이 실행 파일은 racoon 키 관리 데몬에 의해 조정됩니다. setkey에 대한 보다 자세한 정보는 setkey(8) 메뉴얼 페이지를 참조하시기 바랍니다.

  • /sbin/racoon — IPsec 연결 시스템 사이에서 보안 연계 (SA)와 키 공유를 관리하고 제어하는데 사용되는 키 관리 데몬.

  • /etc/racoon/racoon.confracoon 데몬 설정 파일으로서 연결에 사용된 인증 방법 및 암호화 알고리즘을 포함한 다양한 측면의 IPsec 연결을 설정하는데 사용됩니다. 사용 가능한 모든 지시자 목록을 보시려면 racoon.conf(5) 메뉴얼 페이지를 참조하시기 바랍니다.

Red Hat Enterprise Linux에서 IPsec을 설정하기 위해, Network Administration Tool: 네트워크 관리 도구를 사용하시거나, 수동으로 네트워킹과 IPsec 설정 파일을 수정하실 수 있습니다.

2.3.6. IPsec 호스트 간 설정

IPsec을 호스트 간 연결을 통하여 데스크탑이나 워크스테이션들을 연결하도록 설정 가능합니다. 이러한 유형의 연결은 각 호스트가 연결된 네트워크를 사용하여 양 호스트 사이에 보안 터널을 생성합니다. 호스트 간 연결에 필요한 요건은 각 호스트에 IPsec만 설정하면 됩니다. 호스트에서 IPsec 연결을 생성하기 위해서는 공중 네트워크 (예, 인터넷)와 Red Hat Enterprise Linux에 연결할 전용선만 있으면 됩니다.

2.3.6.1. 호스트 간 설정

호스트간 IPsec 연결은 두 시스템 사이에서 암호화된 연결이어야 하며, 같은 인증키를 사용하고 IPsec을 실행하여야 합니다. IPsec 연결이 활성화되었을 경우, 두 호스트사이의 모든 네트워크 소통은 암호화됩니다.

호스트간 IPsec 연결을 설정하기 위해,각각의 호스트에 사용하는 단계는 다음과 같습니다:

주의

설정하시고 있는 실제 컴퓨터에 다음과 같은 과정을 실행하셔야 합니다. 원격으로 IPsec 연결 설정을 시도하지 마십시오.

  1. 명령 쉘에서, system-config-network를 입력하여 Network Administration Tool: 네트워크 관리 도구를 시작합니다.

  2. IPsec 탭에서, 새로 시작 버튼을 클릭하여 IPsec 설정 마법사를 시작합니다.

  3. 다음 버튼을 클릭하여 호스트 간 IPsec 연결을 설정합니다.

  4. 예를 들어, ipsec0과 같이 연결의 고유 이름을 입력합니다. 필요한 경우, 컴퓨터를 시작할 때 체크 박스를 클릭하여 자동 연결을 활성화합니다. 다음 버튼을 클릭하여 계속 진행합니다.

  5. 연결 유형으로 호스트 간 암호화를 선택한 후, 다음 버튼을 클릭합니다.

  6. 수동 또는 자동으로 사용할 암호화 유형을 선택합니다.

    수동으로 암호화할 것을 선택하신 경우, 암호화 키는 과정의 나중에 제공되어야 합니다. 자동으로 암호화할 것을 선택하신 경우, racoon 데몬이 암호화키를 관리합니다. 자동 암호화를 사용하실 경우, ipsec-tools 패키지가 설치되어 있어야 합니다.

    다음 버튼을 클릭하여 계속 진행합니다.

  7. 원격 호스트의 IP 주소를 입력합니다.

    원격 호스트의 IP 주소를 설정하기 위해, 원격 호스트 상에서 다음 명령을 사용합니다:

    [root@myServer ~] # /sbin/ifconfig <device>
    

    여기서 <device>VPN 연결에 사용할 이더넷 장치를 말합니다.

    시스템에 하나의 이더넷 카드만이 있을 경우, 일반적으로 장치명은 eth0가 됩니다. 다음은 이러한 명령에 관련된 예입니다 (이는 출력 결과의 예에 불과함에 유의합니다):

    eth0      Link encap:Ethernet  HWaddr 00:0C:6E:E8:98:1D
              inet addr:172.16.44.192  Bcast:172.16.45.255  Mask:255.255.254.0
    

    IP 주소는 inet addr: 레이블 다음에 오는 숫자입니다.

    주의

    호스트간 연결의 경우 양쪽 호스트는 공개의 라우트 가능한 주소여야 합니다. 또는 양쪽 호스트가 같은 LAN을 사용할 경우 개인의 라우트 불가능한 주소일 수 있습니다 (예, 10.x.x.x 또는 192.168.x.x 범위에서)

    호스트가 다른 LAN을 사용하거나 또는 한쪽 호스트는 공개 주소를 다른 한쪽 호스트는 개인 주소를 가지고 있을 경우, 2.3.7절. “IPsec 네트워크 간 설정”을 참조하시기 바랍니다.

    다음 버튼을 클릭하여 계속 진행합니다.

  8. 6 단계에서 수동 암호화가 설정되었다면, 사용할 암호화키를 지정하거나 또는 생성 버튼을 클릭하여 새로 생성합니다.

    1. 인증키를 지정하거나 또는 생성 버튼을 클릭하여 새로 생성합니다. 인증키는 숫자와 문자의 조합으로 만들어 질 수 있습니다.

    2. 다음 버튼을 클릭하여 계속 진행합니다.

  9. IPsec — 요약 페이지에서 내용을 확인한 후, 적용 버튼을 클릭합니다.

  10. 파일 => 저장을 클릭하여 설정 사항을 저장합니다.

    변경 사항을 적용하기 위해 네트워크를 다시 시작하셔야 합니다. 다음 명령을 사용하여 네트워크를 다시 시작합니다:

    [root@myServer ~]# service network restart
    
  11. 목록에서 IPsec 연결을 선택한 후 활성화 버튼을 클릭합니다.

  12. 다른 호스트에 전체 과정을 반복합니다. 다른 호스트 상의 8 단계에서 같은 키가 사용되어야 합니다. 그렇지 않으면, IPsec는 작동하지 않게 됩니다.

IPsec 연결을 설정한 후에, 그림 2.3. “IPsec 연결”에서 볼 수 있듯이 이는 IPsec 목록에 나타납니다.

IPsec 연결

IPsec 연결

그림 2.3. IPsec 연결

IPsec 연결이 설정되면 다음의 파일이 생성됩니다:

  • /etc/sysconfig/network-scripts/ifcfg-<nickname>

  • /etc/sysconfig/network-scripts/keys-<nickname>

  • /etc/racoon/<remote-ip>.conf

  • /etc/racoon/psk.txt

자동 암호화가 선택되면, /etc/racoon/racoon.conf 역시 생성됩니다.

인터페이스가 나타나면, <remote-ip>.conf를 포함하기 위해 /etc/racoon/racoon.conf가 수정됩니다.

2.3.6.2. 수동으로 IPsec 호스트 간 설정

연결을 생성하는 첫번째 단계는 각 워크스테이션의 시스템 정보와 네트워크 정보를 모으는 것입니다. 호스트 간 연결을 위해서는 다음과 같은 정보를 수집하셔야 합니다:

  • 각 호스트의 IP 주소

  • 예를 들어, ipsec1과 같은 고유 이름. 이는 IPsec 연결을 식별하고 다른 장치나 연결에서 이를 구별하기 위해 사용됩니다.

  • 고정 암호키 또는 racoon에 의해 자동으로 생성된 암호키

  • 연결을 초기화하고 세션 중 암호키를 교환하는데 사용되는 미리 공유된 인증키.

예를 들어 워크스테이션 A와 워크스테이션 B가 IPsec터널을 통하여 연결하고자 한다고 가정합니다. Key_Value01의 값을 이미 공유된 키로 사용하여 연결하고자 하며, 양 사용자가 racoon 데몬이 자동으로 인증키를 생성하여 각 호스트 간에 공유하는 것에 동의하여 이 연결을 ipsec1으로 이름 붙였다고 가정합니다.

주의

대소문자, 숫자, 구두점을 혼합하여 PSK를 선택하셔야 합니다. 쉽게 추측할 수 있는 PSK는 보안 위험을 초래합니다.

각 호스트에 대해 같은 연결명을 사용하실 필요가 없습니다. 설치에 편하고 의미있는 연결명을 선택하시면 됩니다.

다음은 워크스테이션 B와 호스트 간 IPsec을 연결하기 위해 사용된 워크스테이션 A의 IPsec 설정 파일입니다. 이 예시에서 이 연결을 식별하기 위해 사용된 고유 이름은 ipsec1이므로 결과적으로 파일 이름은 /etc/sysconfig/network-scripts/ifcfg-ipsec1이 됩니다.

DST=X.X.X.X
TYPE=IPSEC
ONBOOT=no
IKE_METHOD=PSK

워크스테이션 A는 X.X.X.X 부분을 워크스테이션 B의 IP 주소로 대체하고, 워크스테이션 B는 X.X.X.X를 워크스테이션 A의 IP 주소로 대체합니다. 이 연결은 부팅시 시작되도록 (ONBOOT=no) 설정되지 않았으며 이미 공유된 키 인증 방식 (IKE_METHOD=PSK)을 사용합니다.

다음은 이미 공유된 키 파일 (/etc/sysconfig/network-scripts/keys-ipsec1)의 내용입니다. 이 파일은 양 워크스테이션이 상대방을 인증하는데 필요합니다. 이 파일의 내용은 양 컴퓨터에서 동일해야 하며 루트 사용자만이 이 파일을 읽거나 수정할 수 있습니다.

IKE_PSK=Key_Value01

중요

keys-ipsec1 파일을 루트 사용자만 읽고 수정할 수 있도록 하시려면, 파일을 만드신 후 다음 명령을 입력하십시오:

[root@myServer ~] # chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

언제든지 인증키를 변경하시려면 양 워크스테이션에서 keys-ipsec1 파일을 수정하시면 됩니다. 양 키가 동일해야만 제대로 연결할 수 있습니다.

다음은 원격 호스트로 1 단계 연결하는데 사용되는 설정 파일의 예입니다. 이 파일의 이름은 X.X.X.X.conf입니다 (여기서 X.X.X.X는 원격 IPsec 호스트의 IP 주소로 대체하십시오). 이 파일은 IPsec 터널이 활성화되면 자동으로 생성되기 때문에 직접 수정하시면 안됩니다.

remote X.X.X.X
{
         exchange_mode aggressive, main;
         my_identifier address;
         proposal {
                 encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

IPsec 연결이 초기화될때 생성된 기본 단계 1 설정 파일에는 Red Hat Enterprise Linux가 IPsec를 구현하는데 사용하는 다음과 같은 문구가 포함됩니다:

remote X.X.X.X

이 줄은 이 설정 파일에서 다음 부분을 IP 주소가 X.X.X.X인 원격 컴퓨터에만 적용하도록 지정합니다.

exchange_mode aggressive

윗 줄은 Red Hat Enterprise Linux의 기본 IPsec 설정으로서 여러 호스트 간에 IPsec 연결을 설정하는 동시에 연결 작업 부하를 낮춰주는 적극적 (aggressive) 인증 모드를 사용합니다.

my_identifier address

컴퓨터 인증시 사용할 식별 방식을 지정합니다. Red Hat Enterprise Linux는 IP 주소를 사용하여 컴퓨터를 식별합니다.

encryption_algorithm 3des

인증시 사용할 암호화 방식을 지정합니다. 3DES (Triple Data Encryption Standard)가 기본으로 사용됩니다.

hash_algorithm sha1;

컴퓨터 간에 1 단계 협상 단계에서 사용할 해시 알고리즘을 지정합니다. 기본값으로 SHA (Secure Hash Algorithm) 버전 1이 사용됩니다.

authentication_method pre_shared_key

컴퓨터 간 협상시 사용할 인증 방식을 지정합니다. Red Hat Enterprise Linux는 인증을 위해 기존 공유 키(pre-shared keys)를 기본으로 사용합니다.

dh_group 2

동적으로 생성된 세션키를 분배하는데 사용할 Diffie-Hellman 그룹 번호를 지정합니다. modp1024 (그룹 2)가 기본값입니다.

2.3.6.2.1. Racoon 설정 파일

모든 IPsec 컴퓨터에서 /etc/racoon/racoon.conf 파일은 include "/etc/racoon/X.X.X.X.conf" 문장을 제외한 모든 다른 부분이 똑같아야 합니다. 이 문장 (및 이 문장이 언급하는 파일)은 IPsec 터널이 활성화된 경우에만 나타납니다. 워크스테이션 A에서 include 문장에 언급된 X.X.X.X는 워크스테이션 B의 IP 주소이며 워크스테이션 B에서는 그 반대입니다. 다음은 IPsec 연결이 활성화되었을때 전형적인 racoon.conf 파일을 보여줍니다.

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
        pfs_group 2;
        lifetime time 1 hour ;
        encryption_algorithm 3des, blowfish 448, rijndael ;
        authentication_algorithm hmac_sha1, hmac_md5 ;
        compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf";

이 기본 racoon.conf 파일에는 IPsec 설정, 기존 공유 키 파일 및 인증서의 지정된 경로가 포함됩니다. sainfo anonymous 항목은 IPsec 컴퓨터 간 2 단계 SA — IPsec 연결 속성 (사용된 암호화 알고리즘 포함) 및 키 교환 방식을 설명합니다. 다음은 2 단계 항목을 정의하는 목록입니다:

sainfo anonymous

IPsec 인증서만 일치한다면 SA가 어느 컴퓨터와도 익명으로 연결을 초기화할 수 있다는 것을 의미합니다.

pfs_group 2

Diffie-Hellman 키 교환 프로토콜을 지정합니다. 이 프로토콜은 IPsec 연결 2 단계에서 IPsec 시스템이 상호 임시 세션키를 분배하는 방식을 결정합니다. 기본적으로 Red Hat Enterprise Linux는 Diffie-Hellman 암호키 교환 그룹의 그룹 2 (modp1024)를 사용하여 IPsec을 구현합니다. 그룹 2는 1024 비트 방식을 사용하기 때문에 침입자가 비밀키를 알아낸 경우에도 이전 IPsec 전송 내용을 암호 해독 불가능합니다.

lifetime time 1 hour

이 변수는 SA의 수명을 시간이나 데이터 바이트 수 단위로 지정합니다. Red Hat Enterprise Linux에서 IPsec 구현시 수명은 한 시간이 기본입니다.

encryption_algorithm 3des, blowfish 448, rijndael

2 단계에서 사용할 암호화 방식을 지정합니다. Red Hat Enterprise Linux는 3DES, 448-bit Blowfish, 및 Rijndael(Advanced Encryption Standard 또는 AES에 사용된 암호방식)을 지원합니다.

authentication_algorithm hmac_sha1, hmac_md5

인증에 사용할 해시 알고리즘을 열거합니다. 지원 가능한 모드는 sha1와 md5 해시 메시지 인증 코드 (HMAC) 입니다.

compression_algorithm deflate

IPCOMP (IP Payload Compression)을 위해 Deflate 압축 알고리즘을 사용하도록 지정합니다. 이 알고리즘을 사용하면 IP 데이터그램을 보다 빠르게 압축 전송할 수 있습니다.

연결을 시작하려면 각 호스트에서 다음 명령을 실행하시면 됩니다:

[root@myServer ~]# /sbin/ifup <nickname>

여기서 <nickname>은 IPsec 연결을 위해 지정하신 이름입니다.

IPsec 연결을 검사하시려면 tcpdump 유틸리티를 실행하여 호스트 간에 전송되는 네트워크 패킷이 IPsec을 사용하여 암호화되었는지 확인하시기 바랍니다. 패킷은 AH 헤더를 포함해야 하며 ESP 패킷으로 보여져야 합니다. ESP는 패킷이 암호화되었다는 것을 의미합니다. 예:

[root@myServer ~]# tcpdump -n -i eth0 host <targetSystem>

IP 172.16.45.107 
> 172.16.44.192: AH(spi=0x0954ccb6,seq=0xbb): ESP(spi=0x0c9f2164,seq=0xbb)

2.3.7. IPsec 네트워크 간 설정

IPsec은 네트워크 간 연결을 통하여 원격 네트워크에 전체 네트워크 (예, LAN이나 WAN)를 연결하도록 설정 가능합니다. 네트워크 간 연결을 위해서는 LAN에 있는한 시스템에서 원격 LAN에 있는 다른 시스템으로 보내지는 정보를 투명하게 처리하고 라우팅할 수 있도록 연결된 각 네트워크에 IPsec 라우터를 설정하셔야 합니다. 그림 2.4. “네트워크 간 IPsec 터널을 통한 연결”에서는 네트워크 간 IPsec 터널을 통한 연결을 보여줍니다.

네트워크 간 IPsec 터널을 통한 연결

네트워크 간 IPsec 터널을 통한 연결

그림 2.4. 네트워크 간 IPsec 터널을 통한 연결

도표에서는 인터넷으로 분리된 별개의 두 LAN을 보여줍니다. 이 LAN은 인터넷을 통해 보안 터널을 사용하여 연결을 인증하고 초기화하는데 IPsec 라우터를 사용합니다. 이러한 두 LAN 사이에서 전송 중인 패킷을 가로채어 암호를 해독하기 위해서는 brute-force (암호 알고리즘에 사용할 수 있는 모든 키를 전부 조사하는 방법)을 사용해야 합니다. IPsec 패킷의 처리, 암호화/암호 해독 및 라우팅 과정은 전적으로 IPsec 라우터에 의해 처리되므로 192.168.1.0/24 IP 상 컴퓨터에서 192.168.2.0/24 컴퓨터 간에 주고받는 통신 과정은 그 컴퓨터에서는 전혀 알 수 없습니다.

네트워크 간 연결에 필요한 정보는 다음과 같습니다:

  • 외부에서 접근 가능한 전용 IPsec 라우터의 IP 주소

  • IPsec 라우터에서 처리하는 LAN/WAN의 네트워크 주소 범위 (예, 192.168.1.0/24 또는 10.0.1.0/24)

  • 네트워크로 연결된 시스템에서 인터넷으로 데이터를 라우팅하는 게이트웨이 장치의 IP 주소

  • 예를 들어, ipsec1과 같은 고유 이름. 이는 IPsec 연결을 식별하고 다른 장치나 연결에서 이를 구별하기 위해 사용됩니다.

  • 고정 암호키 또는 racoon에 의해 자동으로 생성된 암호키

  • 연결을 초기화하고 세션 중 암호키를 교환하는데 사용되는 미리 공유된 인증키.

2.3.7.1. 네트워크 간 (VPN) 설정

네트워크 간 IPsec 연결에서는 사설 서브넷에 대한 네트워크 소통을 라우트하여 각각의 네트워크에 하나씩 두개의 IPsec 라우터를 사용합니다.

예를 들어, 그림 2.5. “네트워크 간 IPsec”에서 볼 수 있듯이, 192.168.1.0/24 사설 네트워크가 192.168.2.0/24 사설 네트워크로 네트워크 소통을 할 경우, 패킷은 gateway0를 통해 ipsec0로 이동하며, 인터넷을 통해 ipsec1, gateway1, 192.168.2.0/24 서브넷으로 이동합니다.

IPsec 라우터에는 공개적으로 주소를 지정할 수 있는 IP 주소와 사설 네트워크와 연결된 다른 이더넷 장치가 있어야 합니다. 암호화된 연결이 있는 다른 IPsec 라우터를 통해 소통하려할 경우, IPsec 라우터만을 통해 소통이 이루어집니다.

네트워크 간 IPsec

네트워크 간 IPsec

그림 2.5. 네트워크 간 IPsec

각 IP 라우터와 인터넷 간의 방화벽 및 각 IPsec 라우터와 서브넷 게이트웨이 간의 인트라넷 방화벽을 포함하는 네트워크 설정 대체 옵션. 서브넷의 IPsec 라우터와 게이트웨이는 두개의 이더넷 장치를 가진 하나의 시스템이 될 수 있습니다: 하나는 공개 IP 주소를 가지고 IPsec 라우터로 작동하며; 다른 하나는 사설 IP 주소를 가지고 사설 서브넷에 대한 게이트웨이로 작동합니다. 각각의 IPsec 라우터는 사설 네트워크 또는 공개 게이트웨이에 대해 게이트웨이를 사용하여 패킷을 다른 IPsec 라우터로 전송합니다.

다음과 같은 과정을 실행하여 네트워크 간 IPsec 연결을 설정합니다:

  1. 명령 쉘에서, system-config-network를 입력하여 Network Administration Tool: 네트워크 관리 도구를 시작합니다.

  2. IPsec 탭에서, 새로 시작 버튼을 클릭하여 IPsec 설정 마법사를 시작합니다.

  3. 다음 버튼을 클릭하여 네트워크 간 IPsec연결을 설정합니다.

  4. 예를 들어, ipsec0와 같이 연결 고유 별명 (nickname)을 입력합니다. 필요한 경우, 체크 박스를 선택하여 컴퓨터가 시작할 때 자동으로 연결되게 합니다. 다음 버튼을 클릭하여 계속 진행합니다.

  5. 연결 유형으로 네트워크 간 암호화 (VPN)를 선택하고, 다음 버튼을 클릭합니다.

  6. 수동 또는 자동으로 사용할 암호화 유형을 선택합니다.

    수동으로 암호화할 것을 선택하신 경우, 암호화 키는 과정의 나중에 제공되어야 합니다. 자동으로 암호화할 것을 선택하신 경우, racoon 데몬이 암호화키를 관리합니다. 자동 암호화를 사용하실 경우, ipsec-tools 패키지가 설치되어 있어야 합니다.

    다음 버튼을 클릭하여 계속 진행합니다.

  7. 지역 네트워크 페이지에서, 다음의 정보를 입력합니다:

    • 지역 네트워크 주소 — 사설 네트워크에 연결된 IPsec 라우터에 있는 장치의 IP 주소.

    • 지역 서브넷 마스크 — 지역 네트워크 IP 주소의 서브넷 마스크.

    • 지역 네트워크 게이트웨이 — 사설 서브넷의 게이트웨이.

    다음 버튼을 클릭하여 계속 진행합니다.

    지역 네트워크 정보 (Local Network Information)

    지역 네트워크 정보 (Local Network Information)

    그림 2.6. 지역 네트워크 정보 (Local Network Information)

  8. 원격 네트워크 페이지에서, 다음의 정보를 입력합니다:

    • 원격 IP 주소다른 사설 네트워크에 대한 IPsec 라우터에 공개적으로 주소 지정이 가능한 IP 주소. 이 예시에서, ipsec0는 ipsec1의 공개적으로 주소 지정이 가능한 IP 주소를 입력하며, ipsec1는 반대로 적용합니다.

    • 원격 네트워크 주소다른IPsec 라우터 뒤에 있는 사설 서브넷의 네트워크 주소. 예를 들어, ipsec1을 설정하는 경우 192.168.1.0을 입력하고, ipsec0 설정하는 경우 192.168.2.0을 입력합니다.

    • 원격 서브넷 마스크 — 원격 IP 주소의 서브넷 마스크.

    • 원격 네트워크 게이트웨이 — 원격 네트워크 주소에 대한 게이트웨이의 IP 주소.

    • 6 단계에서 암호화를 수동으로 할 것이 선택되었을 경우, 사용할 암호화키를 지정하고 생성 버튼을 클릭하여 키를 생성합니다.

      인증키를 지정하거나 또는 생성 버튼을 클릭하여 키를 생성합니다. 이러한 키는 숫자와 문자의 조합으로 만들어 질 수 있습니다.

    다음 버튼을 클릭하여 계속 진행합니다.

    원격 네트워크 정보 (Remote Network Information)

    원격 네트워크 정보 (Remote Network Information)

    그림 2.7. 원격 네트워크 정보 (Remote Network Information)

  9. IPsec — 요약 페이지에서 내용을 확인한 후, 적용 버튼을 클릭합니다.

  10. 파일 => 저장을 선택하여 설정 사항을 저장.

  11. 목록에서 IPsec 연결을 선택한 후, 활성화 버튼을 클릭하여 연결을 활성화함.

  12. IP forwarding 활성화:

    1. /etc/sysctl.conf파일을 수정하고 net.ipv4.ip_forward의 값을 1로 설정합니다.

    2. 변경 사항이 적용되도록 다음 명령을 실행합니다:

      [root@myServer ~]# /sbin/sysctl -p /etc/sysctl.conf
      

IPsec 연결을 활성화하기 위한 네트워크 스크립트는 자동으로 네트워크 라우터를 생성하여 필요한 경우 IPsec 라우터를 통해 패킷을 전송합니다.

2.3.7.2. 수동으로 IPsec 네트워크 간 설정

예를 들어 LANA (lana.example.com)와 LAN B (lanb.example.com)가 IPsec 터널을 통하여 서로 연결하고자 한다고 가정합니다. LAN A의 네트워크 주소는 192.168.1.0/24 범위에 속하고 LAN B의 네트워크 주소는 192.168.2.0/24 범위를 사용한다고 합시다. LAN A의 게이트웨이 IP 주소는 192.168.1.254 이며 LAN B의 게이트위에 IP 주소는 192.168.2.254 입니다. IPsec 라우터는 각각의 LAN에서 분리되어 두개의 네트워크 장치를 사용합니다: eth0는 인터넷에 접속하는 외부에서 접근 가능한 정적 IP 주소에 할당되었으며, 반면 eth1은 한 네트워크 노드에서 원격 네트워크 노드로 LAN 패킷을 처리하고 전송하는 라우팅 지점으로 사용됩니다.

각 네트워크 간 IPsec 연결은 r3dh4tl1nux을 이미 공유된 키로 사용하며 A와 B의 관리자가 racoon 데몬이 자동으로 인증키를 생성하고 각 IPsec 라우터 간에 인증키를 공유하도록 동의했다고 가정합니다. LAN A의 관리자는 IPsec 연결을 ipsec0이라 이름 붙인 반면 LANB의 관리자는 IPsec 연결을 ipsec1이라고 이름 붙였습니다.

다음 예시는 LAN A에서 네트워크 간 IPsec 연결에 사용된 ifcfg 파일의 내용을 보여줍니다. 이 예시에서 이 연결을 식별하기 위해 사용된 고유 이름은 ipsec0입니다, 따라서 결과적으로 파일 이름은 /etc/sysconfig/network-scripts/ifcfg-ipsec0이 됩니다.

TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

다음의 목록은 이 파일의 내용을 설명합니다:

TYPE=IPSEC

연결 유형을 지정합니다.

ONBOOT=yes

부팅시 초기화해야 하는 연결을 지정합니다.

IKE_METHOD=PSK

기존 공유 키 인증 방식을 사용하는 연결을 지정합니다.

SRCGW=192.168.1.254

소스 게이트웨이의 IP 주소. LAN A는 LAN A 게이트웨이를 LAN B는 LAN B 게이트웨이를 지정합니다.

DSTGW=192.168.2.254

수신지 게이트웨이의 IP 주소. LAN A는 LAN B 게이트웨이로 LAN B는 LAN A 게이트웨이로 지정합니다.

SRCNET=192.168.1.0/24

IPsec 연결에 대한 소스 네트워크를 지정합니다, 이 예시에서는 네트워크 범위가 LAN A로 되어 있습니다.

DSTNET=192.168.2.0/24

IPsec 연결에 대한 수신지 네트워크를 지정합니다, 이 예시에서는 네트워크 범위가 LAN B로 되어 있습니다.

DST=X.X.X.X

외부에서 접근 가능한 LAN B의 IP 주소.

다음은 /etc/sysconfig/network-scripts/keys-ipsecX 기존 공유 키 파일 (여기서 XLAN A의 경우 0이며 LAN B는 1 입니다)의 내용으로서 이 파일은 양 네트워크가 상대방을 인증하는데 사용됩니다. 이 파일의 내용은 두 네트워크에서 동일해야 하며 루트 사용자만이 이 파일을 읽거나 작성할 수 있습니다.

IKE_PSK=r3dh4tl1nux

중요

keys-ipsecX 파일을 루트 사용자만 읽고 수정할 수 있도록 설정하시려면, 파일을 생성 후 다음 명령을 입력합니다:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

언제든지 인증키를 변경하려면 양 IPsec 라우터에서 keys-ipsecX 파일을 수정합니다. 반드시 양 키가 같아야 제대로 연결됩니다.

다음은 IPsec 연결에 사용된 /etc/racoon/racoon.conf 설정 파일입니다. 파일 마지막 부분의 include 부분은 자동으로 생성되며 IPsec 터널이 실행된 경우에만 나타납니다.

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.
path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
  
sainfo anonymous
{
        pfs_group 2;
        lifetime time 1 hour ;
        encryption_algorithm 3des, blowfish 448, rijndael ;
        authentication_algorithm hmac_sha1, hmac_md5 ;
        compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

다음은 원격 네트워크로 연결하는데 사용되는 설정 파일입니다. 파일의 이름은 X.X.X.X.conf이며 여기서 X.X.X.X를 원격 IPsec 라우터의 IP 주소로 대체합니다. 이 파일은 IPsec 터널이 활성화되면 자동으로 생성되기 때문에 직접 수정하시면 안됩니다.

remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

IPsec 연결을 시작하기 전에 커널에서 IP fowarding 기능을 활성화합니다. IP forwarding 기능을 활성화하려면 다음 명령을 실행합니다:

  1. /etc/sysctl.conf파일을 수정하고 net.ipv4.ip_forward의 값을 1로 설정합니다.

  2. 변경 사항이 적용되도록 다음 명령을 실행합니다:

    [root@myServer ~] # sysctl -p /etc/sysctl.conf
    

IPsec 연결을 시작하려면 각 라우터에서 다음 명령을 실행합니다:

[root@myServer ~] # /sbin/ifup ipsec0

LAN A와 LAN B가 서로 통신할 수 있도록 연결이 활성화됩니다. IPsec 연결에서 ifup을 실행하여 호출된 초기화 스크립트에 의해 라우트가 자동으로 생성됩니다. 네트워크 상 라우트 목록을 보시려면, 다음 명령을 실행합니다:

[root@myServer ~] # /sbin/ip route list

IPsec 연결을 테스트하시려면 tcpdump 유틸리티를 외부에서 라우팅가능한 장치 (이 예시에서는 eth0)에서 실행하여 호스트 간 (네트워크 간)에 전송되는 네트워크 패킷이 IPsec을 사용하여 암호화되었는지 확인하시기 바랍니다. 예를 들어 LAN A의 IPsec 연결을 확인해보시려면 다음 명령을 입력합니다:

[root@myServer ~] # tcpdump -n -i eth0 host lana.example.com

패킷은 AH 헤더를 포함해야 하며 ESP 패킷으로 보여져야 하니다. ESP는 패킷이 암호화되었다는 것을 의미합니다. 예를 들면 (백슬래쉬는 한 줄이 계속 된다는 것을 의미합니다):

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
        lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
        (ipip-proto-4)

2.3.8. IPsec 연결 시작하기 및 중지하기

부팅시 IPsec 연결이 활성화되도록 설정되지 않은 경우, 명령행에서 이를 제어하실 수 있습니다.

연결을 시작하려면 호스트 간 IPsec의 각각의 호스트에서나 또는 네트워크 간 IPsec의 각각의 IPsec 라운터에서 다음 명령을 실행합니다:

[root@myServer ~] # /sbin/ifup <nickname>

여기서 <nickname>ipsec0와 같이 이전에 설정된 별명을 말합니다.

다음 명령을 사용하여 명령을 중지합니다:

[root@myServer ~] # /sbin/ifdown <nickname>

2.4. IPTables

Red Hat Enterprise Linux와 함께 네트워크 패킷 필터링 (packet filtering)에 대한 고급 도구 모음이 포함되어 있습니다 — 커널안에서 패킷을 입력, 이동, 네트워크 스텍을 종료하는 것과 같이 네트워크 패킷을 제어하는 순서. 커널 2.4 이전 버전은 패킷 필터링에 대해 ipchains에 의존하며 필터링 과정의 각각의 단계에서 패킷에 적용되는 규칙 목록을 사용합니다. 커널 2.4버전에서는 iptables (넷필터(netfilter)라고도 부름)를 소개하고 있으며, 이는 ipchains와 비슷하지만 범위을 확장하여 네트워크 패킷 필터링을 할 수 있는 제어 기능을 갖고 있습니다.

이 장에서는 기본적인 패킷 필터링을 중점적으로 다루고, ipchainsiptables의 다른점에 대해 알아보며, iptables 명령을 가지고 사용 가능한 다양한 옵션과 시스템 재부팅에서 필터링 규칙이 어떻게 보존되는지에 대해 설명합니다.

iptables 규칙과 이러한 규칙을 바탕으로 방화벽을 설정하는 방법에 대한 지시사항은 2.4.7절. “추가 자료”를 참조하시기 바랍니다.

경고

커널 2.4 버전과 그 이후 버전에서 기본 방화벽 메카니즘은 iptables이지만, ipchains이 이미 실행되고 있을 경우, iptables는 사용될 수 없습니다. ipchains가 부팅할 때에 나타나면, 커널은 오류를 발생하며 iptables를 시작할 수 없게 됩니다.

ipchains의 기능은 이러한 오류에 의해 영향을 받지 않습니다.

2.4.1. 패킷 필터링 (Packet Filtering)

Linux 커널은 패킷을 필터하기 위해 Netfilter 기능을 사용하며, 다른 패킷이 정지해 있는 동안 패킷의 일부분이 시스템을 통과하거나 전달받는 것을 허용합니다. 이러한 기능은 Linux 커널에 내장되어 있으며, 다음과 같이 세가지의 내장된 테이블 또는 규칙 목록을 가지고 있습니다:

  • filter — 네트워크 패킷을 다루기 위한 기본 테이블.

  • nat — 새로운 연결을 생성하는 패킷을 변경하기 위해 사용되며 네트워크 주소 변환 (Network Address Translation) (NAT)을 위해 사용됨.

  • mangle — 특정 유형의 패킷 변경을 위해 사용됨.

각각의 테이블에는 내장된 chains 그룹이 있으며, 이는 netfilter에 의한 패킷에서 실행되는 작업에 해당합니다.

filter 테이블에 대한 내장된 chains은 다음과 같습니다:

  • INPUT — 호스트를 대상으로 하는 네트워크 패킷에 적용합니다.

  • OUTPUT — 로컬에서 생성된 네트워크 패킷에 적용합니다.

  • FORWARD — 호스트를 통해 라우트된 네트워크 패킷에 적용합니다.

nat 테이블에 해당하는 내장된 chains은 다음과 같습니다:

  • PREROUTING — 네트워크 패킷이 도착하면 이를 변경합니다.

  • OUTPUT — 패킷이 보내어지기 전에 로컬에서 생성된 네트워크 패킷을 변경합니다.

  • POSTROUTING — 패킷이 보내어지기 전에 네트워크 패킷을 변경합니다.

mangle 테이블에 해당하는 내장된 chains은 다음과 같습니다:

  • INPUT — 호스트를 대상으로 하는 네트워크 패킷을 변경합니다.

  • OUTPUT — 패킷이 보내어지기 전에 로컬에서 생성된 네트워크 패킷을 변경합니다.

  • FORWARD — 호스트를 통하여 라우트된 네트워크 패킷을 변경합니다.

  • PREROUTING — 패킷이 라우트되기 전에 들어오는 네트워크 패킷을 변경합니다.

  • POSTROUTING — 패킷이 보내어지기 전에 네트워크 패킷을 변경합니다.

Linux 시스템에서 받거나 보내진 모든 네트워크 패킷은 최소 하나의 테이블에 적용되지만, 패킷은 chain의 마지막에 나타나기 전에 각각의 테이블안에 있는 여러 규칙에 적용될 수 도 있습니다. 이러한 규칙의 구조와 목적은 다양하나, 이는 주로 특정 IP 주소에서 들어오거나 IP 주소로 나가는 패킷을 확인하거나 또는 특정 프로토콜과 네트워크 서비스를 사용할 때 주소를 설정합니다.

알림

기본값으로 방화벽 규칙이 /etc/sysconfig/iptables 또는 /etc/sysconfig/ip6tables 파일에 저장되었습니다.

iptables 서비스는 Linux 시스템이 부팅할 때 DNS 관련 서비스 이전에 시작합니다. 이는 방화벽 규칙이 숫자로된 IP 주소 (예:192.168.0.1)만을 참조할 수 있다는 것을 의미합니다. 도메인 명 (예: host.example.com)은 이러한 규칙에서 오류를 발생합니다.

수신지에 상관없이, 하나의 테이블에서 패킷이 특정한 규칙에 일치할 때, 대상(target) 또는 실행 명령이 이에 적용됩니다. 규칙이 일치 패킷에 대해 ACCEPT 대상을 지정하였을 경우, 패킷은 다른 규칙 확인을 생략하고 수신지로 이동합니다. 규칙이 DROP 대상을 지정하였을 경우, 패킷은 시스템으로의 접근을 거부하고 패킷을 보낸 호스트로 아무것도 전송하지 않습니다. 규칙이 QUEUE 대상을 지정하였을 경우, 패킷은 사용자 공간으로 이동합니다. 규칙이 옵션으로 REJECT 대상을 지정하였을 경우, 패킷은 취소되지만, 오류 패킷은 패킷의 발신자에게로 보내어 집니다.

모든 chain은 ACCEPT, DROP, REJECT, 또는 QUEUE에 기본 정책을 가지고 있습니다. chain에 있는 규칙 중 어느 것도 패킷에 적용되지 않을 경우, 패킷은 기본 정책에 따라 다루어 집니다.

iptables 명령은 이러한 테이블을 설정하며, 필요한 경우 새로운 테이블을 설정하기도 합니다.

2.4.2. IPTables과 IPChains의 다른점

ipchainsiptables는 특정 규칙이나 규칙 모음에 일치하는 가에 따라 패킷을 필터하기 위해 Linux 커널안에서 작동하는 규칙의 chains을 사용합니다. 하지만, iptables는 관리자가 시스템에 지나친 복잡성을 구축하지 않고 제어하게 하는 패킷을 필터링하는 확장가능한 방법을 제공합니다.

다음과 같이 ipchainsiptables의 다른점을 확인해 보시기 바랍니다:

iptables를 사용하여, 필터된 각각의 패킷은 여러 chain 데신 하나의 chain에서의 규칙을 사용하여 실행됩니다.

예를 들어 ipchains를 사용한 시스템으로 들어오는 FORWARD 패킷은 수신지에 도달하기 위해 INPUT, FORWARD, OUTPUT chain을 통과하게 됩니다. 하지만, iptables는 패킷의 수신지가 로컬 시스템일 경우 패킷을 INPUT chain으로만 보내며, 로컬 시스템이 패킷을 생성했을 경우 패킷을 OUTPUT chain으로만 보냅니다. 따라서 실제적으로 패킷을 다루는 chain 안에서 특정 패킷을 감지하도록 규칙을 고안해야 합니다.

거부 (DENY) 대상이 취소(DROP) 대상으로 변경되었습니다.

ipchains에서, chain에 있는 규칙과 일치하는 패킷은 거부 (DENY) 대상이 됩니다. 이러한 대상은 iptables에서 취소 (DROP) 대상으로 변경되어야 합니다.

규칙에서 옵션을 정할 때 순서가 중요합니다.

ipchains에서 규칙 옵션의 순서는 중요하지 않습니다.

iptables 명령은 엄격한 구문을 가집니다. iptables 명령은 발생지 포트 또는 수신지 포트 이전에 프로토콜 (ICMP, TCP, 또는 UDP)을 지정할 것을 요구합니다.

방화벽 규칙에서 네트워크 인터페이스는 올바른 chain과 연관되어야 합니다.

예를들어, 들어오는 인터페이스는 (-i 옵션) INPUT 또는 FORWARD chain에서만 사용될 수 있습니다. 이와 비슷하게, 나가는 인터페이스는 (-o 옵션) FORWARD 또는 OUTPUT chain에서만 사용될 수 있습니다.

다시 말해, INPUT chain과 들어오는 인터페이스는 함께 작동하며, OUTPUT chain과 나가는 인터페이스는 함께 작동합니다. FORWARD chain은 들어오고 나가는 인터페이스 모두와 함께 작동합니다.

OUTPUT chain은 더이상 들어오는 인터페이스에 의해 사용되지 않으며, INPUT chain은 나가는 인터페이스를 통해 이동하는 패킷에 의해 보여지지 않습니다.

이는 변경 사항에 대한 종합적인 목록이 아닙니다. 보다 자세한 정보는 2.4.7절. “추가 자료”에서 참조하시기 바랍니다.

2.4.3. IPTables에 대한 명령 옵션

패킷을 필터링하기 위한 규칙은 iptables 명령을 사용하여 생성됩니다. 주로 다음과 같은 패킷 내용이 기준으로서 사용됩니다.

  • 패킷 유형 — 명령을 필터하는 패킷의 유형을 지정합니다.

  • 패킷 발생지/수신지 — 패킷의 발생지 또는 수신지에 기반하여 어떤 패킷이 명령을 필터할 지를 지정합니다.

  • 대상 — 위의 기준과 일치하여 어떤 작업을 패킷에 실행할 지를 지정합니다.

이러한 패킷의 내용을 다루고 있는 특정 옵션에 관한 보다 자세한 정보는 2.4.3.4절. “IPTables 일치 옵션”2.4.3.5절. “대상 옵션”에서 참조하시기 바랍니다.

특정 iptables 규칙과 함께 사용되는 옵션은 사용 가능한 규칙에 대한 모든 규칙의 목적 및 조건에 기반하여 논리적으로 그룹지어져야만 합니다. 이 장의 나머지 부분에서는 iptables 명령에 해당하는 일반적으로 사용되는 옵션에 대해 설명합니다.

2.4.3.1. IPTables 명령 옵션의 구조

여러 iptables 명령은 다음과 같은 구조를 가지고 있습니다:

 iptables [-t <table-name>] <command><chain-name> \ <parameter-1><option-1> \ <parameter-n><option-n>

<table-name> — 어떤 테이블에 규칙을 적용할 지를 지정합니다. 지정하지 않으신 경우, filter 테이블이 사용됩니다.

<command> — 규칙 추가 또는 삭제와 같은 실행할 작업을 지정합니다.

<chain-name> —수정, 생성, 삭제할 chain을 지정합니다.

<parameter>-<option> 쌍 — 규칙에 일치하는 패킷을 실행하는 방법을 지정하는 매개 변수 및 관련된 옵션입니다.

iptables 명령의 길이 및 복잡성은 목적에 따라 현저하게 변경될 수 있습니다.

예를 들어, chain에서 규칙을 삭제하기 위한 명령의 길이가 짧을 수 도 있습니다:

iptables -D <chain-name> <line-number>

반면, 여러 특정 매개변수와 옵션을 사용하는 특정 서브넷에서 패킷을 필터링하는 규칙을 추가하는 명령은 다소 길어질 수 있습니다. iptables 명령을 구축할 때, 몇몇 매개 변수와 옵션은 유효한 규칙을 구축하기 위해 추가 매개 변수 및 옵션을 요구한다는 점을 기억해두시기 바랍니다. 이는 더 많은 매개변수를 요구하는 추가 매개 변수와 함께 캐스캐이딩(cascading) 효과를 창출할 수 있습니다. 다른 옵션을 요구하는 모든 매개변수 및 옵션을 만족시킬때 까지, 규칙은 유효하지 않게 됩니다.

iptables -h를 입력하여 iptables 명령 구조의 종합적인 목록을 봅니다.

2.4.3.2. 명령 옵션

명령 옵션은 특정 작업을 실행하기 위해 iptables를 사용합니다. 하나의 명령 옵션에 하나의 iptables 명령만이 허용됩니다. 도움말 명령을 제외하고 모든 명령은 대문자로 쓰여져 있습니다.

iptables 명령은 다음과 같습니다:

  • -A — 특정 chain의 마지막에 규칙을 추가합니다. 아래에 설명된 -I 옵션과는 달리, 이는 정수 인자를 갖지 않으며, 항상 특정 chain의 마지막에 규칙을 추가합니다.

  • -C — 사용자 지정 chain에 특정 규칙을 추가하기 전에 이를 확인합니다. 이러한 명령은 추가 매개 변수와 옵션을 요구하여 복잡한 iptables 규칙을 구성하게 할 수 있습니다.

  • -D <integer> | <rule> — (chain에서 다섯번째 규칙에 해당하는 5와 같이) 숫자나 규칙 명세 사항으로 된 특정 chain에 있는 규칙을 삭제합니다. 규칙 명세 사항은 기존 규칙과 정확하게 일치해야 합니다.

  • -E — 사용자 정의된 chain의 이름을 변경합니다. 사용자 정의된 chain은 기본값이 아닌 기존의 모든 chain입니다. (사용자 정의된 chain의 생성에 관한 자세한 정보는 아래의 -N 옵션을 참조하시기 바랍니다.) 이는 표면적인 변경 사항으로 테이블의 구조에 아무런 영향을 미치지 않습니다.

    알림

    기본 chain 중 하나의 이름을 변경하시려 할 경우, 시스템은 Match not found 오류를 보고하여, 기본 chain의 이름을 변경하실 수 없게 됩니다.

  • -F — 선택한 chain을 삭제합니다, 이는 실제적으로 chain에 있는 모든 규칙을 삭제하게 됩니다. 어떤 chain도 지정되어 있지 않을 경우,이 명령은 모든 chain에 있는 모든 규칙을 삭제합니다.

  • -h — 명령 구조 목록과 명령 매개 변수 및 옵션의 요약 설명을 제공합니다.

  • -I [<integer>] — 사용자 정의된 정수 인자로 지정된 지점의 특정 chain에 있는 규칙을 삽입합니다. 아무 인자도 지정되지 않았을 경우, 규칙은 chain의 맨 위에 삽입됩니다.

    주의

    위에서 언급된것 처럼, chain에 있는 규칙의 순서는 어떤 규칙이 어떤 패킷에 적용되는냐에 따라 결정됩니다. 이는 -A 또는 -I 옵션을 사용하여 규칙을 추가할 때 중요합니다.

    이는 특히 정수 인자와 함께 -I 옵션을 사용하여 규칙을 추가할 때 중요합니다. chain에 규칙을 추가할 때 기존의 숫자를 지정하신 경우, iptables 명령은 기존의 규칙 이전에 (또는 위에) 새로운 규칙을 추가합니다.

  • -L — 명령 이후에 지정된 chain에 있는 모든 규칙의 목록을 만듭니다. 기본 filter 테이블의 모든 chain에 있는 모든 규칙의 목록을 만들기 위해, chain이나 테이블을 지정하지 마십시오. 그렇지 않으면, 특정 테이블의 특정 chain에 있는 규칙의 목록을 만드는데 다음의 구문을 사용해야 합니다.

     iptables -L <chain-name> -t <table-name>
    

    규칙 번호와 보다 상세하게 규칙을 설명하는 -L 명령 옵션에 해당하는 추가 옵션은 2.4.3.6절. “옵션 목록”에 설명되어 있습니다.

  • -N — 사용자 정의된 이름과 함께 새로운 chain을 생성합니다. 고유한 chain 명이 아닐 경우 오류 메세지가 나타납니다.

  • -P — 특정 chain에 대해 기본 정책을 설정하여, 패킷이 규칙에 일치하지 않고 chain을 관통하게 되면, 허용 (ACCEPT) 또는 취소 (DROP)와 같은 특정 목표 규칙을 보내게 됩니다.

  • -R — 특정 chain에서 규칙을 대체합니다. 규칙의 번호는 chain 명 뒤에 반드시 명시되어야 합니다. chain에 있는 첫번째 규칙은 규칙 번호 일번에 해당하게 됩니다.

  • -X — 사용자 정의된 chain을 삭제합니다. 내장된 chain을 삭제하실 수 는 없습니다.

  • -Z — 바이트를 설정하고 테이블에 대한 모든 chain에 있는 패킷 카운터를 0까지 설정합니다.

2.4.3.3. IPTables 매개 변수 옵션

특정 chain 안에서 규칙의 추가, 삭제, 삽입 또는 대체에 사용되는 특정 iptables 명령은 패킷 필터링 규칙을 구성하기 위해 다양한 매개 변수를 필요로 합니다.

  • -c — 특정 규칙에 대해 카운터를 재설정합니다. 이러한 매개 변수는 어떤 카운터를 재설정할 지를 지정하기 위해 PKTSBYTES 옵션을 허용합니다.

  • -d — 수신지의 호스트명, IP 주소, 또는 규칙에 일치하는 패킷의 네트워크를 설정합니다. 네트워크에 일치할 때, 다음의 IP 주소/넷마스크 형식이 지원됩니다:

    • N.N.N.N/M.M.M.MN.N.N.N는 IP 주소 영역이며 M.M.M.M는 넷마스크에 해당합니다.

    • N.N.N.N/MN.N.N.N는 IP 주소 영역이며 M는 비트마스크(bitmask)에 해당합니다.

  • -f — 이러한 규칙은 분리된 패킷에만 적용됩니다.

    분리되지 않은 패킷에 일치하는 것을 지정하기 위해 이러한 매개 변수 뒤에 느낌표 기호 (!) 옵션을 사용합니다.

    알림

    분리된 패킷이 IP 프로토콜의 표준이 될지라도 분리된 패킷과 분리되지 않은 패킷을 구별하는 것이 바람직합니다.

    IP 패킷이 다른 프레임 크기를 사용하여 네트워크를 이동할 수 있도록 근본적으로 고안되었으나, 최근 잘못된 패킷을 사용하여 DoS 공격을 위해 단편화가 보다 많이 사용되고 있습니다. IPv6가 전적으로 단편화를 허용하지 않게 하는 것은 좋지 않습니다.

  • -ieth0 또는 ppp0와 같이 들어오는 네트워크 인터페이스를 설정합니다. iptables 명령을 가지고, 이러한 매개 변수 옵션은 natmangle 테이블과 함께 filter 테이블과 PREROUTING chain을 사용할 때 INPUT과 FORWARD chain을 사용할 수 도 있습니다.

    이러한 매개 변수는 다음과 같은 특정 옵션도 지원합니다:

    • 느낌표 기호 (!) — 지시 사항을 바꾸어, 의미있는 특정 인터페이스를 이러한 규칙에서 제외합니다.

    • 플러스 기호 (+) — 특정 문자열에 일치하는 인터페이스를 일치시키기 위해 사용되는 와일드카드 문자. 예를 들어, 매개 변수 -i eth+는 이러한 규칙을 이더넷 인터페이스에 적용시킬 수 있지만, ppp0와 같은 다른 인터페이스는 여기서 제외됩니다.

    -i 매개 변수가 사용되었지만 어떤 인터페이스도 지정되지 않았을 경우, 모든 인터페이스는 이러한 규칙의 영향을 받게 됩니다.

  • -j — 패킷이 특정 규칙에 일치할 때 지정된 대상으로 이동합니다.

    기준이 되는 대상은 ACCEPT, DROP, QUEUE, RETURN입니다.

    확장된 옵션은 Red Hat Enterprise Linux iptables RPM 패키지를 사용하여 기본값으로 읽어진 모듈을 통해 사용하실 수 있습니다. 이러한 모듈에 있는 유효한 대상에는 LOG, MARK, REJECT, 등이 포함됩니다. 이러한 대상에 대한 보다 자세한 정보는 iptables 메뉴얼 페이지에서 참조하시기 바랍니다.

    이러한 옵션은 특정 규칙을 현재 chain의 외부에 있는 사용자 정의된 chain에 일치하는 패킷에 지정하는 데 사용되며 그 결과 다른 규칙을 패킷에 적용시킬 수 있습니다.

    어떤 대상도 지정되지 않았을 경우, 패킷은 아무런 작업을 실행하지 않고 이전 규칙으로 이동합니다. 하지만, 이러한 규칙에 대한 카운터는 한개로 증가합니다.

  • -o — 규칙에 대하여 나가는 네트워크 인터페이스를 설정합니다. 이러한 옵션은 filter 테이블에 있는 OUTPUT 및 FORWARD chain과 natmangle 테이블에 있는 POSTROUTING chain에 대해서만 유효합니다. 이러한 매개 변수는 들어오는 네트워크 인터페이스 매개 변수 (-i)와 같은 옵션을 허용합니다.

  • -p <protocol> — 규칙에 영향을 받는 IP 프로토콜을 설정합니다. 이는 icmp, tcp, udp, 또는 all이 될 수 있고, 또는 이러한 것들 중 하나를 나타내거나 다른 프로토콜을 나타내는 숫자로된 값이 될 수 도 있습니다. /etc/protocols 파일에 있는 프로토콜 목록을 사용하셔도 됩니다.

    "all" 프로토콜은 규칙이 지원되는 모든 프로토콜에 적용됨을 의미합니다. 이러한 규칙에 프로토콜 목록이 없을 경우, "all"이 기본값이 됩니다.

  • -s — 수신지 (-d) 매개 변수와 같은 구문을 사용하여 특정 패킷에 대한 소스를 설정합니다.

2.4.3.4. IPTables 일치 옵션

다른 네트워크 프로토콜은 프로토콜을 사용하여 특정 패킷이 일치하도록 설정할 수 있는 특수화된 일치 옵션을 제공합니다. 하지만, 프로토콜은 iptables 명령에 먼저 지정되어야 합니다. 예를 들어, -p <protocol-name>은 특수화된 프로토콜에 해당하는 옵션을 활성화합니다. 프로토콜명을 사용하는 데신 프로토콜 ID를 사용하실 수 있음에 유의하시기 바랍니다. 같은 효과를 갖는 다음의 예를 참조하시기 바랍니다:

 iptables -A INPUT -p icmp --icmp-type any -j ACCEPT  iptables -A INPUT -p 5813 --icmp-type any -j ACCEPT 

서비스 정의는 /etc/services 파일에 있습니다. 가독성을 위해, 포트 번호를 사용하는 데신 서비스명을 사용하실 것을 권장합니다.

중요

허가없이 편집하는 것을 방지하기 위해 /etc/services 파일을 보호합니다. 이 파일을 편집하는 것이 가능하게 될 경우, 침입자는 사용자가 연결을 끊어야 하는 사용자의 컴퓨터에 있는 포트를 활성화할 수 있습니다. 이 파일의 보안을 위해 root 계정으로 다음의 명령을 입력하시기 바랍니다:

 [root@myServer ~]# chown root.root /etc/services [root@myServer ~]# chmod 0644 /etc/services [root@myServer ~]# chattr +i /etc/services 

파일의 이름을 변경하거나, 삭제 또는 링크로 연결하여 이를 방지할 수 있습니다.

2.4.3.4.1. TCP 프로토콜

이러한 일치 옵션은 TCP 프로토콜 (-p tcp)을 위해 사용가능합니다:

  • --dport — 패킷을 위해 수신지 포트를 설정합니다.

    이러한 옵션을 설정하기 위해, www 또는 smtp와 같은 네트워크 서비스명; 포트 번호; 또는 포트 번호의 범위를 사용합니다.

    포트 번호의 범위를 지정하기 위해, 콜론을 사용하여 번호를 구별합니다(:). 예: -p tcp --dport 3000:3200. 사용할 수 있는 유효한 최대 범위는 0:65535입니다.

    네트워크 서비스 혹은 포트를 사용하지 않는 모든 패킷을 일치시키기 위해 --dport 옵션 뒤에 느낌표 기호 (!)를 사용합니다.

    네트워크 서비스명과 별칭 및 사용하는 포트 번호를 검색하기 위해, /etc/services 파일을 확인합니다.

    --destination-port 일치 옵션은 --dport와 의미가 같습니다.

  • --sport--dport와 같은 옵션을 사용하여 패킷의 소스 포트를 설정합니다. --source-port 일치 옵션은 --sport와 의미가 같습니다.

  • --syn — 일반적으로 SYN 패킷이라고 불리우는, 통신을 초기화하기 위해 고안된 모든 TCP 패킷에 적용합니다. 데이터 페이로드(payload)를 전송하는 패킷에는 적용되지 않습니다.

    SYN이 아닌 모든 패킷에 일치시키기 위해 --syn 옵션 뒤에 느낌표 기호 (!)를 사용합니다.

  • --tcp-flags <tested flag list> <set flag list> — 특정 비트 (플래그) 모음을 갖고 있는 TCP 패킷이 규칙에 일치하게 합니다.

    --tcp-flags 일치 옵션은 두개의 매개 변수를 허용합니다. 첫 번째 매개 변수는 마스크로 패킷에서 검사하기 위해 콤마로 구분되는 플래그 목록입니다. 두번째 매개 변수는 규칙을 일치시키시 위해 설정되야 하는 콤마로 구분되는 플래그 목록입니다.

    가능한 플래그는 다음과 같습니다:

    • ACK

    • FIN

    • PSH

    • RST

    • SYN

    • URG

    • ALL

    • NONE

    예를 들어, 다음과 같은 명세 사항을 포함하고 있는 iptables 규칙은 SYN 플래그 모음을 갖고 있는 TCP 패킷에 일치하며 ACK 및 FIN 플래그는 설정되지 않았습니다:

    --tcp-flags ACK,FIN,SYN SYN

    일치 옵션의 효과를 바꾸기 위해 --tcp-flags 뒤에 느낌표 부호 (!)를 사용합니다.

  • --tcp-option — 특정 패킷 안에서 설정할 수 있는 TCP-특정 옵션과 일치시키려 합니다. 이러한 일치 옵션은 느낌표 부호 (!)를 사용하여 바꿀수 도 있습니다.

2.4.3.4.2. UDP 프로토콜

이러한 일치 옵션은 UDP 프로토콜 (-p udp)에 대해 사용가능 합니다:

  • --dport — 서비스명, 포트 번호, 또는 포트 번호의 영역을 사용하여, UDP 패킷의 수신지 포트를 지정합니다. --destination-port 일치 옵션은 --dport와 의미가 같습니다.

  • --sport — 서비스명, 포트 번호, 또는 포트 번호의 영역을 사용하여, UDP 패킷의 소스 포트를 지정합니다. --source-port 일치 옵션은 --sport와 의미가 같습니다.

--dport--sport 옵션으로 포트 번호의 영역을 지정하고 콜론 (:)을 사용하여 두 번호를 구별합니다. 예: -p tcp --dport 3000:3200. 허용된 유효한 최대 영역은 0:65535입니다.

2.4.3.4.3. ICMP 프로토콜

다음의 일치 옵션은 ICMP (Internet Control Message Protocol) (-p icmp)에 대해 사용 가능합니다:

  • --icmp-type — 규칙과 일치하는 ICMP 유형의 이름이나 번호를 설정합니다. 사용가능한 ICMP 이름 목록은 iptables -p icmp -h 명령을 입력하여 검색하실 수 있습니다.

2.4.3.4.4. 추가 일치 옵션 모듈

추가 일치 옵션은 iptables 명령으로 불러온 모듈을 통해 사용하실 수 있습니다.

일치 옵션 모듈을 사용하기 위해, -m <module-name>을 사용하여 이름지어진 모듈을 읽어옵니다, 여기서 <module-name>은 모듈의 이름으로 대체합니다.

여러 모듈은 기본값으로 사용 가능합니다. 추가 기능을 제공하기 위해 모듈을 생성하실 수 있습니다.

다음은 가장 일반적으로 사용되는 모듈의 부분적인 목록입니다:

  • limit 모듈 — 얼마나 많은 패킷을 특정 규칙에 일치하게 할지에 제한을 둡니다.

    LOG 대상과 함께 사용할 때, limit 모듈은 여러 일치하는 패킷을 반복되는 메세지가 있는 시스템 로그로 채우거나 시스템 리소스를 사용하지 못하게 합니다.

    LOG 대상에 대한 보다 자세한 정보는 2.4.3.5절. “대상 옵션”에서 참조하시기 바랍니다.

    limit 모듈은 다음과 같은 옵션을 활성화합니다:

    • --limit<value>/<period> 쌍으로 지정하여 특정 기간 동안에 규칙의 최대 일치 수를 설정합니다. 예를 들어, --limit 5/hour 옵션을 사용하여 한 시간당 다섯개의 규칙이 일치하게 합니다.

      기간은 초, 분, 시, 일로 명시될 수 있습니다.

      번호 및 시간 편집기가 사용되지 않을 경우, 3/hour의 기본값이 사용될 것입니다.

    • --limit-burst — 한번에 규칙에 일치하는 패킷의 수에 제한을 둡니다.

      이러한 옵션은 정수로 지정되었으며 --limit 옵션과 함께 사용하셔야 합니다.

      아무런 값이 지정되지 않은 경우, 기본값은 (5)로 간주됩니다.

  • state 모듈 — 상태 일치를 활성화합니다.

    state 모듈은 다음과 같은 옵션을 활성화합니다:

    • --state — 패킷을 다음의 연결 상태와 일치시킵니다:

      • ESTABLISHED — 일치 패킷은 기존 연결에 있는 다른 패킷과 관련되어 있습니다. 클라이언트와 서버 사이의 연결을 유지하시기를 원하실 경우, 이를 허용하셔야 합니다.

      • INVALID — 일치 패킷은 알려진 연결에 묶어질 수 없습니다.

      • NEW — 일치 패킷은 새로운 연결을 생성하거나 또는 이전에 볼 수 없었던 양방향 연결의 일부분이 될 수 있습니다. 서비스에 새로운 연결을 허용하시려면 이를 허용하셔야 합니다.

      • RELATED — 일치 패킷은 기존 연결과 관련하여 새로운 연결을 시작합니다. 이에 대한 예로 FTP가 있으며, 이는 소통량 제어 (포트 21)를 위해 하나의 연결을 사용하며, 데이터 전송 (포트 20)과 분리된 연결을 사용합니다.

      이러한 연결 상태는 -m state --state INVALID,NEW와 같이 콤마로 구분하여 서로 함께 사용될 수 있습니다.

  • mac 모듈 — 하드웨어 MAC 주소 일치를 활성화합니다.

    mac 모듈은 다음의 옵션을 활성화합니다:

    • --mac-source — 패킷을 보낸 네트워크 인터페이스 카드의 MAC 주소에 일치시킵니다. 규칙에서 MAC 주소를 제외시키기 위해, --mac-source 일치 옵션 뒤에 느낌표 기호 (!)를 입력합니다.

모듈에서 사용가능한 일치 옵션에 대한 보다 많은 정보는 iptables 메뉴얼 페이지에서 참조하시기 바랍니다.

2.4.3.5. 대상 옵션

패킷이 특정 규칙과 일치할 때, 규칙은 패킷을 알맞은 작업을 결정하게 하는 여러 다른 대상에 지정합니다. 각각의 chain은 기본 대상을 가지고 있으며, 이는 chain에서 어떤 규칙도 패킷에 일치하지 않거나 또는 패킷에 일치하는 어떤 규칙도 대상을 지정할 수 없는 경우입니다.

다음은 기준이 되는 대상입니다:

  • <user-defined-chain> — 테이블안에서 사용자 정의된 chain. 유일한 사용자 정의된 chain 명이어야 합니다. 이러한 대상은 지정된 chain에 패킷을 전달합니다.

  • ACCEPT — 패킷의 수신지 또는 다른 chain을 통과하는 패킷을 허용합니다.

  • DROP — 요청에 응답하지 않고 패킷을 취소합니다. 패킷을 보낸 시스템은 이러한 실패를 통보하지 않습니다.

  • QUEUE — 패킷은 사용자 공간 프로그램으로 처리되기 위해 대기합니다.

  • RETURN — 현재 chain에 있는 규칙에 대해 패킷을 확인하는 것을 중지합니다. RETURN 대상과 함께 패킷이 다른 chain에서 불려진 chain에 있는 규칙에 일치할 경우, 패킷은 확인이 중지된 곳에서 규칙을 조사하기 위해 첫 번째 chain으로 복귀합니다. RETURN 규칙이 내장된 chain에서 사용되고 패킷을 이전 chain으로 이동시킬 수 없을 경우, 현재 chain의 기본 대상이 사용됩니다.

또한, 다른 대상을 지정하게 하는 확장 모듈이 사용 가능합니다. 이러한 확장 모듈은 대상 모듈 또는 일치 옵션 모듈이라고 불리우며, 특정 테이블과 상황에만 적용됩니다. 일치 옵션 모듈에 관한 보다 자세한 정보는 2.4.3.4.4절. “추가 일치 옵션 모듈”에서 참조하시기 바랍니다.

여러 확장된 대상 모듈이 있으며, 대부분 특정 테이블이나 상황에만 적용됩니다. Red Hat Enterprise Linux에서 기본값으로 포함된 가장 많이 사용되는 대상 모듈에는 다음과 같은 것이 있습니다:

  • LOG — 이러한 규칙에 일치하는 모든 패킷을 기록합니다. 패킷이 커널에 의해 기록되므로, /etc/syslog.conf 파일은 이러한 로그 항목이 기록되는 장소를 결정합니다. 이는 기본값으로 /var/log/messages 파일에 위치하게 됩니다.

    기록하는 방법을 지정하기 위해 LOG 대상 뒤에 추가 옵션이 사용될 수 있습니다.

    • --log-level — 기록하는 작업에 대한 우선 순위를 설정합니다. 우선 순위 목록에 대한 정보는 syslog.conf 메뉴얼 페이지에서 참조하시기 바랍니다.

    • --log-ip-options — IP 패킷의 헤더에 설정된 모든 옵션을 기록합니다.

    • --log-prefix — 로그 행이 기록되기 전에 최대 29개로된 문자열을 만듭니다. 이는 syslog 필터의 기록을 위해 패킷 기록과 함께 사용하는 것이 유용합니다.

      알림

      이러한 옵션과 관련하여, log-prefix 값에 공백을 추가하셔야 합니다.

    • --log-tcp-options — TCP 패킷의 헤더에 설정된 모든 옵션을 기록합니다.

    • --log-tcp-sequence — 로그에 있는 패킷에 해당하는 TCP 순서 번호를 기록합니다.

  • REJECT — 오류 패킷을 원격 시스템에 되돌려 보내고 패킷을 취소합니다.

    REJECT 대상은 --reject-with <type>을 허용하며 (<type>은 거부 유형으로 대체함) 오류 패킷과 함께 복귀되기 위한 보다 자세한 정보를 제공합니다. 메세지 port-unreachable은 다른 옵션이 사용되지 않을 경우 주어지는 기본 오류 유형입니다. <type>의 전체 옵션 목록에 대한 정보는 iptables 메뉴얼 페이지를 참조하시기 바랍니다.

nat 테이블을 사용하는 IP 매스커레이딩이나 또는 mangle 테이블을 사용하는 패킷 변경에 유용한 여러 기능을 포함하는 대상 확장기능은 iptables 메뉴얼 페이지에서 확인하실 수 있습니다.

2.4.3.6. 옵션 목록

기본 목록에서 iptables -L [<chain-name>] 명령은 기본 필터 테이블의 현재 chain에 대한 기본적인 개요를 제공합니다. 추가 옵션에서는 보다 많은 정보를 제공합니다:

  • -v — 각각의 chain에서 실행되는 패킷과 바이트의 수, 각각의 규칙과 일치하는 패킷과 바이트의 수, 그리고 어떤 인터페이스가 특정 규칙에 적용되는가와 같은 상세한 출력을 보여줍니다.

  • -x — 패킷과 바이트 숫자를 정확한 값으로 확장합니다. 복잡한 시스템에서는 특정 chain이나 규칙에 의해 실행되는 패킷과 바이트의 수는 Kilobytes,Megabytes (Megabytes) 또는 Gigabytes로 단축됩니다. 이러한 옵션은 전체 숫자가 나타나도록 강제합니다.

  • -n — 기본 호스트명 및 네트워크 서비스 포맷이 아닌 숫자로된 포맷에서 IP 주소와 포트 번호를 보여줍니다.

  • --line-numbers — chain에 있는 숫자로된 순서 옆의 각각의 chain에 있는 규칙 목록을 만듭니다. 이러한 옵션은 chain에 있는 특정 규칙을 삭제하거나 또는 chain안에서 규칙을 삽입하기 위한 위치를 지정할 때에 유용합니다.

  • -t <table-name> — 테이블 명을 지정합니다. 이를 생략하실 경우, 필터 테이블에 기본값이 적용됩니다.

다음의 예는 여러 옵션의 사용을 보여줍니다. -x 옵션을 포함하여 나타나는 바이트 표시에 있어서 다른점에 주의하시기 바랍니다.

 [root@myserver ~]# iptables -L OUTPUT -v -n -x Chain OUTPUT (policy ACCEPT 64005 packets, 6445791 bytes) pkts bytes target prot opt in out source destination 1593 133812 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 [root@myserver ~]#iptables -L OUTPUT -v -n Chain OUTPUT (policy ACCEPT 64783 packets, 6492K bytes) pkts bytes target prot opt in out source destination 1819 153K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 [root@myserver ~]# 

2.4.4. IPTables 규칙 저장하기

iptables 명령과 함께 생성된 규칙은 메모리에 저장되어 있습니다. iptables 규칙 모음을 저장하기 전에 시스템을 재시작하실 경우, 모든 규칙이 삭제됩니다. 시스템 재부팅을 통한 넷필터 규칙은 저장되어야 합니다. 넷필터 규칙을 저장하기 위해 root로 다음의 명령을 입력하시기 바랍니다:

 /sbin/service iptables save 

이는 iptables init 스크립트를 실행하고, /sbin/iptables-save 프로그램을 실행하며 현재 iptables 설정을 /etc/sysconfig/iptables에 기록합니다. 기존의 /etc/sysconfig/iptables 파일은 /etc/sysconfig/iptables.save로 저장됩니다.

다음번에 시스템이 부팅할 때, iptables init 스크립트는 /sbin/iptables-restore 명령을 사용하여 /etc/sysconfig/iptables에 저장된 규칙을 재적용합니다.

/etc/sysconfig/iptables 파일에 커밋하기 전에 새로운 iptables 규칙을 테스트하는 것이 좋지만, iptables 규칙을 이 파일의 다른 시스템의 버전에 있는 파일로 복사하게 될 수 있습니다. 이는 iptables 규칙 모음을 여러 컴퓨터에 배포하는 지름길을 제공합니다.

배포, 백업, 또는 기타 다른 목적을 위해 iptables 규칙을 분리된 파일에 저장하실 수 있습니다. iptables 규칙을 저장하기 위해, root로 다음의 명령을 입력하시기 바랍니다:

 [root@myserver ~]# iptables-save > <filename><filename>은 규칙집합(ruleset)에 대한 사용자 정의명으로 대체합니다.

중요

/etc/sysconfig/iptables 파일을 다른 컴퓨터로 배포할 경우, 새로운 규칙을 실행하기 위해 /sbin/service iptables restart을 입력하시기 바랍니다.

알림

iptables 기능을 구성하는 테이블과 chain을 조작하기 위해 사용되는 iptables명령 (/sbin/iptables)와 iptables 서비스 자체를 활성화 및 비활성화하는데 사용되는 iptables서비스 (/sbin/iptables service) 사이의 다른점에 주의하시기 바랍니다.

2.4.5. IPTables 제어 스크립트

Red Hat Enterprise Linux에서 iptables 제어하는 두가지 기본적인 방법이 있습니다:

  • /sbin/service iptables <option> — initscript를 사용하여 iptables의 다양한 기능을 조작하기 위해 사용됨. 다음의 옵션이 사용 가능합니다:

    • start — 방화벽이 설정되어 있을 경우 (즉, /etc/sysconfig/iptables가 존재할 경우), 실행되는 모든 iptables는 완전히 정지되며 /sbin/iptables-restore 명령을 사용하기 시작합니다. 이러한 옵션은 ipchains 커널 모듈을 읽어오지 않았을 때에만 작동합니다. 이러한 모듈을 읽어왔는지를 확인하시려면, root로 다음의 명령을 입력하시기 바랍니다:

       [root@MyServer ~]# lsmod | grep ipchains 
      

      이러한 명령으로 아무런 출력 결과가 나타나지 않으면, 이는 모듈이 읽어지지 않았음을 의미합니다. 필요하신 경우, 모듈을 삭제하기 위해 /sbin/rmmod 명령을 사용하시기 바랍니다.

    • stop — 방화벽이 실행되고 있을 경우, 메모리에 있는 방화벽 규칙은 삭제되며, 모든 iptables 모듈 및 도움 프로그램이 제거됩니다.

      /etc/sysconfig/iptables-config 설정 파일에서 IPTABLES_SAVE_ON_STOP 지시문이 기본값에서 yes로 변경된 경우, 현재 규칙은 /etc/sysconfig/iptables에 저장되며 기존의 규칙은 /etc/sysconfig/iptables.save 파일로 이동합니다.

      iptables-config 파일에 대한 보다 자세한 정보는 2.4.5.1절. “IPTables 제어 스크립트 설정 파일”에서 참조하시기 바랍니다.

    • restart — 방화벽이 실행되고 있는 경우, 메모리에 있는 방화벽 규칙은 삭제되며, 방화벽이 /etc/sysconfig/iptables에 설정되어 있을 경우 이를 다시 시작하게 됩니다. 이러한 옵션은 ipchains 커널 모듈을 읽어오지 않았을 경우에만 작동합니다.

      /etc/sysconfig/iptables-config 설정 파일에서 IPTABLES_SAVE_ON_RESTART 지시문이 기본값에서 yes로 변경된 경우, 현재 규칙은 /etc/sysconfig/iptables에 저장되며 기존의 규칙은 /etc/sysconfig/iptables.save 파일로 이동합니다.

      iptables-config 파일에 대한 보다 자세한 정보는 2.4.5.1절. “IPTables 제어 스크립트 설정 파일”에서 참조하시기 바랍니다.

    • status — 방화벽의 상태를 보여주며 모든 활성 규칙 목록을 만듭니다.

      이러한 옵션에 대한 기본값 설정에서는 각 규칙에 있는 IP 주소를 보여줍니다. 도메인과 호스트명 정보를 나타내기 위해, /etc/sysconfig/iptables-config 파일을 편집하고 IPTABLES_STATUS_NUMERIC의 값을 no로 변경합니다. iptables-config 파일에 대한 보다 자세한 정보는 2.4.5.1절. “IPTables 제어 스크립트 설정 파일”에서 참조하시기 바랍니다.

    • panic — 모든 방화벽 규칙을 삭제합니다. 모든 설정 테이블에 대한 정책은 DROP에 설정됩니다.

      이러한 옵션은 서버가 절충될 수 있을 경우 유용합니다. 물리적으로 네트워크로 연결을 해제하거나 또는 시스템을 중지시키지 않고, 모든 네트워크 소통을 중지시키기 위해 이러한 옵션을 사용하실 수 있지만 컴퓨터 진단과 포렌식스를 위해 이를 준비상태로 두시는 것이 좋습니다.

    • saveiptables-save 명령을 사용하여 방화벽 규칙을 /etc/sysconfig/iptables에 저장합니다. 보다 자세한 정보는 2.4.4절. “IPTables 규칙 저장하기”에서 참조하시기 바랍니다.

힌트

IPv6에 해당하는 넷필터를 제어하기 위한 같은 initscript 명령을 사용하기 위해, 이 부분에 있는 목록의 /sbin/service 명령에서 iptables 대신 ip6tables를 사용합니다. IPv6 및 넷필터에 관한 보다 자세한 정보는 2.4.6절. “IPTables 및 IPv6”에서 참조하시기 바랍니다.

2.4.5.1. IPTables 제어 스크립트 설정 파일

iptables initscripts의 동작은 /etc/sysconfig/iptables-config 설정 파일에 의해 제어됩니다. 다음은 이러한 파일에 들어 있는 지시문 목록입니다:

  • IPTABLES_MODULES — 방화벽이 활성화 상태일 때, 불러오려는 추가 iptables 모듈의 목록을 공백으로 구분하여 지정합니다. 이에는 연결 추적 및 NAT 도움말이 포함될 수 있습니다.

  • IPTABLES_MODULES_UNLOAD — 재시작 및 정지 상태에서 모듈을 읽어오지 않습니다. 이러한 지시문은 다음과 같은 값을 허용합니다:

    • yes — 기본 값. 방화벽 재시작 또는 정지에 대한 올바른 상태를 실행하기 위해 이러한 옵션이 설정되어야 합니다.

    • no — 넷필터 모듈을 제거하는 데 문제가 있을 경우에만 이러한 옵션을 설정해야 합니다.

  • IPTABLES_SAVE_ON_STOP — 방화벽이 중지되었을 때 현재 방화벽 규칙을 /etc/sysconfig/iptables에 저장합니다. 이러한 지시문은 다음과 같은 규칙을 허용합니다:

    • yes — 방화벽이 중지되었을 때 기존의 규칙을 /etc/sysconfig/iptables에 저장하고, 이전 버전을 /etc/sysconfig/iptables.save 파일로 이동시킵니다.

    • no — 기본값. 방화벽이 중지되었을 때 기존 규칙을 저장하지 않습니다.

  • IPTABLES_SAVE_ON_RESTART — 방화벽을 재시작할 때 현재 방화벽 규칙을 저장합니다. 이러한 지시문은 다음과 같은 값을 허용합니다:

    • yes — 방화벽을 재시작할 때, 기존의 규칙을 /etc/sysconfig/iptables에 저장하고, 이전 버전을 /etc/sysconfig/iptables.save 파일로 이동시킵니다.

    • no — 기본값. 방화벽을 재시작할 때 기존 규칙을 저장하지 않습니다.

  • IPTABLES_SAVE_COUNTER — 모든 chain 및 규칙에 있는 모든 패킷과 바이트를 저장하거나 복구합니다. 이러한 지시문은 다음과 같은 값을 허용합니다:

    • yes — 카운터 값을 저장합니다.

    • no — 기본값. 카운터 값을 저장하지 않습니다.

  • IPTABLES_STATUS_NUMERIC — 도메인 또는 호스트명을 대신하여 숫자로된 포맷에서 IP 주소를 출력합니다. 이러한 지시문은 다음과 같은 값을 허용합니다:

    • yes — 기본값. 출력 상태안에서 IP 주소만을 복귀하게 합니다.

    • no — 출력 상태 안에서 도메인 또는 호스트명을 복귀하게 합니다.

2.4.6. IPTables 및 IPv6

iptables-ipv6 패키지가 설치되었을 경우, Red Hat Enterprise Linux에 있는 넷필터는 차세대 IPv6 인터넷 프로토콜을 거를수 있습니다. IPv6 넷필터를 조작하기 위해 사용되는 명령은 ip6tables입니다.

이 명령에 대한 대부분의 지시문은 iptables에서 사용된 것과 동일하지만, nat 테이블은 아직 지원되지 않습니다. 즉, 이는 매스커레이딩(masquerading) 및 포트 포워딩과 같은 IPv6 네트워크 주소 번역 작업을 아직 실행할 수 없음을 의미합니다.

ip6tables에 대한 규칙은 /etc/sysconfig/ip6tables 파일에 저장되어 있습니다. ip6tables initscripts에 의해 저장된 기존 규칙은 /etc/sysconfig/ip6tables.save 파일에 저장되어 있습니다.

ip6tables init 스크립트에 대한 설정 옵션은 /etc/sysconfig/ip6tables-config에 저장되어 있으며, 각각의 지시문에 해당하는 이름은 iptables 부분에 따라 다릅니다.

예, iptables-config 지시문 IPTABLES_MODULES: ip6tables-config 파일과 같은 것은 IP6TABLES_MODULES 입니다.

2.4.7. 추가 자료

iptables과 함께 패킷 필터링에 관한 추가 정보는 다음 소스에서 참조하시기 바랍니다.

2.4.7.1. 설치된 문서

  • man iptablesiptables에 대한 설명 및 대상, 옵션, 일치 확장에 대한 종합적인 목록이 포함되어 있습니다.

2.4.7.2. 유용한 웹사이트

  • http://www.netfilter.org/ — 넷필터(netfilter)/iptables 프로젝트의 홈. iptables에 관한 정보는 물론, 특정 문제를 다루고 있는 FAQ 및 Linux IP 방화벽 관리자인 Rusty Russell에 의해 쓰여진 도움말 등이 들어있습니다. 사이트에 있는 HOWTO 문서에서는 기본적인 네트워킹 개념, 커널 패킷 필터링, NAT 설정과 같은 주제를 다루고 있습니다.

  • http://www.linuxnewbie.org/nhf/Security/IPtables_Basics.html — Linux 커널을 통해 패킷을 이동하는 방법에 대한 소개와 함께 기본 iptables 명령을 구축하는 방법에 대한 소개.