기업체 시스템을 담당하는 관리자에게는 사용자의 관리 허가 액세스를 조정하는 것이 중요하지만 어느 네트워크 서비스가 활성화되었는지 확인하는 것도 리눅스 시스템을 설치하여 사용하는 사용자에게는 매우 중요합니다.
Red Hat Enterprise Linux에서 많은 서비스는 네트워크 서버로 작동합니다. 만일 네트워크 서비스가 시스템에서 실행 중이라면, 데몬이라고 부르는 서버 응용 프로그램은 한 개 이상의 네트워크 포트를 청취합니다. 이러한 서버는 잠재적으로 침입을 당할 수 있는 약점이 됩니다.
네트워크 서비스는 리눅스 시스템에 많은 위험을 주며, 주요 문제점은 다음과 같습니다:
버퍼 초과 공격 — 번호가 1에서 1023 사이인 포트에 연결하는 서비스는 루트 사용자로 실행되어야 합니다. 만일 침입자가 이 프로그램에 버퍼 초과 공격을 가하여 데몬을 실행 중인 사용자인 것처럼 시스템에 침입할 수 있습니다. 크래커는 이용 가능한 초과 버퍼가 존재하는 것을 알고 있기 때문에, 취약한 시스템을 찾아내기 위해 자동화된 도구를 사용하여 일단 침입에 성공하면 자동 루트킷(rootkit)을 사용하여 시스템 관리자용 권한을 유지합니다.
서비스 거부 공격 (DoS) — 수많은 요청을 한 서비스에 집중하여 보내는 서비스 거부 공격을 사용하여 시스템이 각 요청을 기록하고 응답하기 위한 작업 과부하로 멈추는 상태가 발생합니다.
스크립트 취약성 공격 — 만일 웹 서버와 같이 서버가 스크립트를 사용하여 서버쪽 작업을 실행한다면, 크래커는 잘못 작성된 스크립트에 공격을 가할 수 있습니다. 이러한 스크립트 취약성 공격으로 인해 버퍼 초과 현상이 발생하거나 침입자는 시스템 상 파일을 변경할 수 있게 됩니다.
네트워크 상 공격을 방지하기 위해서는 사용되지 않은 서비스를 모두 정지시켜야 합니다.
보안을 강화하기 위해서 Red Hat Enterprise Linux에 설치된 대부분의 네트워크 서비스는 꺼져있도록 기본 설정되었습니다. 그러나 주목할 만한 예외가 있습니다:
cupsd — Red Hat Enterprise Linux의 기본 인쇄 서버.
lpd — 대체 인쇄 서버.
portmap — NFS, NIS 및 다른 RPC 프로토콜에 사용되는 필수 요소.
xinetd — vsftpd, telnet, 및 (Nautilus 파일 관리자를 사용하는데 필요한) sgi-fam과 같은 종속 서버의 호스트에 연결을 제어하는 수퍼 서버.
sendmail — Sendmail 메일 전송 에이전트는 활성화되도록 기본 설정되었지만 localhost에서 들어오는 연결만 청취합니다.
sshd — Telnet의 보안 대체인 OpenSSH 서버.
이 서비스들을 계속 실행되도록 둘것인지를 결정하실 때는 당연한 상식을 가지고 생각하시는 것이 좋습니다. 예를 들어 만일 프린터를 사용하지 않으신다면 cupsd가 계속 실행되도록 둘 필요가 없습니다. portmap의 경우도 마찬가지입니다. NFS 볼륨을 마운트하거나 NIS (ypbind 서비스)를 사용하지 않는 경우에는 portmap을 비활성화하셔야 합니다.
Red Hat Enterprise Linux에는 서비스를 켜고 끌 수 있는 3가지 프로그램:서비스 설정 도구 (redhat-config-services), ntsysv, chkconfig이 포함되어 있습니다. 이 도구 사용법에 대한 정보를 원하신다면 Red Hat Enterprise Linux 시스템 관리 가이드에서 서비스로의 접근 통제 장을 참조하시기 바랍니다.
만일 특정 서비스의 용도를 잘 모르시겠다면 그림 4-3에서 보여지듯이 서비스 설정 도구에서 서비스에 대한 설명을 찾으실 수 있습니다. 조금이나마 도움이 될 것입니다.
부팅시 시작되는 네트워크 서비스를 확인하는 것만으로는 충분하지 않습니다. 훌륭한 시스템 관리자라면 열려진 포트와 청취 중인 포트도 확인하셔야 합니다. 5.8 절에서 이 주제에 대한 보다 자세한 정보를 찾으실 수 있습니다.
모든 네트워크 서비스는 잠재적으로 안전하지 않습니다. 따라서 사용되지 않는 서비스를 끄는 것이 매우 중요합니다. 서비스를 사용한 보안 침입이 계속적으로 발견되고 패치되고 있어 네트워크 서비스와 관련된 패키지를 업데이트하는 작업에 매우 어렵습니다. 이 주제에 대한 자세한 정보는 3 장을 참조하시기 바랍니다.
일부 네트워크 프로토콜은 다른 프로토콜에 비해 더욱 비안전적입니다. 다음과 같은 특성을 지닌 서비스가 그러합니다:
네트워크 상에서 사용자명과 암호를 암호화되지 않은 상태에서 전달 — Telnet과 FTP와 같이 이전 프로토콜들은 인증 세션을 암호화하지 않으므로 가능한 사용하지 않으시는 것이 좋습니다.
네트워크 상에서 기밀 데이터를 암호화되지 않은 상태에서 전달 — 많은 프로토콜이 데이터를 네트워크 상에서 암호화되지 않은 상태로 전달합니다. 이러한 프로토콜에는 Telnet, FTP, HTTP, SMTP가 있습니다. NFS 및 SMB와 같은 많은 네트워크 파일 시스템 또한 네트워크 상에서 암호화되지 않은 정보를 전달합니다. 이러한 프로토콜을 사용하실 때는 어떠한 유형의 데이터를 전송하실지 사용자가 책임지고 결정하셔야 합니다.
또한 netdump과 같은 원격 메모리 덤프 서비스도 네트워크 상에서 암호화되지 않은 메모리 내용을 전달합니다. 메모리 덤프에는 암호 및 심지어는 데이터베이스 항목과 기타 기밀 정보가 포함되어 있을 가능성도 있어 매우 위험합니다.
finger 및 rwhod와 같은 서비스는 시스템 사용자에 대한 정보를 보여줍니다.
다음은 원래부터 안전하지 않은 서비스의 예입니다:
rlogin
rsh
telnet
vsftpd
모든 원격 로그인과 쉘 프로그램 (rlogin, rsh, telnet) 대신 SSH를 사용하시는 것이 좋습니다. (sshd에 대한 자세한 정보는 4.7 절을 참조하시기 바랍니다).
FTP는 원격 쉘 만큼 시스템 보안에 위험하지는 않습니다. 그러나 문제가 발생하지 않도록 신중하게 FTP 서버를 설정하고 감시하셔야 합니다. FTP 서버를 보안 강화하는 방법은 5.6 절을 참조하시기 바랍니다.
다음과 같은 서비스는 신중하게 방화벽과 함께 구현되어야 합니다:
finger
identd
netdump
netdump-server
nfs
portmap
rwhod
sendmail
smb (Samba)
yppasswdd
ypserv
ypxfrd
네트워크 서비스를 보안 설정하는 방법에 대한 보다 자세한 정보는 5 장에서 찾으실 수 있습니다.
다음 부분에서는 간단한 방화벽을 설정하는데 사용되는 도구에 대하여 설명해 보겠습니다.