리눅스
subject tcp_wrapper 에 대하여
author 미랑 date 2003-11-17 hit 140 HIT
Security HOWTO 중에서 네트워크 보안글중 tcp_wrapper에 대한 내용을 씁니다. 보안 헛점을 좀더 줄일 수 있다고 봅니다. 간단히 이야기 하면, /etc/inetd.conf 와 /etc/services 파일을 막아 놓으므로써 보안 등급(?)을 올릴 수 있다는 내요입니다.

시스템 서비스와 tcp_wrapper

어떤 서비스를 제공할 필요가 있는가를 선별하는 것은 네트워크에 리눅스 시스템을 올려놓기 전부터 해야 할 일이다. 제공할 필요가 없는 서비스를 아예 해체해버리면 걱정거리가 하나 줄고, 공격자가 개구멍을 찾을 대상을 하나 줄여 버리는 것이 되는 것이므로.

리눅스 시스템에서 서비스를 꺼버리는 방법은 많이 있다. /etc/inetd.conf 파일을 보면 inetd가 현재 어떤 서비스를 제공하고 있는지 알아볼 수 있다. 필요 없는 서비스는 모두 주석문 (remark) 처리를 해서 막아버리고 ((#을 줄의 가장 앞에 쓴다), inetd 프로세스에 SIGHUP 신호를 보내도록 조정하라. [25. SIGHUP]

아울러 /etc/services 파일에서도 서비스를 주석문 처리를 하거나 삭제할 수 있다. 이것은 지역 사용자들도 또한 서비스를 못쓰게 된다는 뜻이다 (예로서, 만약 여러분이 ftp를 삭제해 난 후, 이 기계에서부터 원격 사이트로 ftp를 사용하려 하면 "unknown service" 메시지가 나오면서 안 받아줄 것이다) 보안성이 늘어나는 것은 아니므로 꼭 서비스를 없애 버릴 가치는 없다. 만약 지역사용자가 -- 여러분이 주석문 처리를 해서 꺼버린 -- ftp를 쓰고 싶어한다면, 그는 간단히 자신의 클라이언트를 사용하면서 공용 ftp 포트를 써서 여전히 일을 할 수 있을 것이다.

켜놓는 것이 좋을 서비스들은:

ftp
telnet (혹은 ssh)
pop-3 이나 imap 등의 메일
identd
등이 있다.

어떤 패키지를 쓸 일이 없으리라는 것을 알고 있다면, 그 패키지를 완전히 삭제할 수도 있다. 레드 햇 배포본에서는 rpm -e 명령으로 한 패키지 전체를 지울 수 있다. 데비안에서는 dpkg로 같은 작업을 할 수 있을 것이다.

덧붙여서, (rlogin이 쓰는) login과 (rcp가 쓰는) shell 그리고 (rsh가 쓰는) exec를 /etc/inetd.conf에서 시작되는 것을 막는 것을 포함해서, /rsh/r;pgin/rcp 도구를 꺼버리는 것이 정말로 필요하다. 이들 프로토콜은 극단적으로 보안이 허술하며 (insecure), 예전부터 침탈 (exploit)의 근원이 되어왔다.

/etc/rc.d/rcN.d를 봐서 -- 여기서 N은 여러분 시스템의 런 레벨이며 -- 디렉토리에서 실행되는 서버들 가운데 불필요한 것들이 있는가 확인하라. /etc/rc.d/rcN.d안에 있는 파일들은 실제는 /etc/rc.d/init.d 디렉토리로 심볼릭 링크 되어 있다. init.d에 있는 파일들의 이름을 바꿔버리면, /etc/rc.d/rcN.d 안의 모든 심볼릭 링크를 꺼버리는 효과를 가져온다. 만약 특정 런 레벨에 맞추어서 서비스를 꺼주고 싶으면, 이에 상응하는 파일을 대문자 (Upper-case)에서 소문자 (Lower-case)로 이름을 바꿔주면 된다. 다음의 경우는 대문자 S를 소문자 s로 바꾼 것이다.


root# cd /etc/rc6.d
root# mv S45dhcpd s45dhcpd
BSD 형식의 rc 파일들을 갖고 있다면 /etc/rc*을 검사해서 필요 없는 풀그림들을 볼 수 있다.

대부분의 리눅스 배포본에는 모든 TCP 서비스들을 "보호해주는(wrapping)" 티시피 랩퍼 (tcp wrapper)가 들어있다. tcp_wrapper (tcpd)는 실제 서버를 실행 할 수 있는 것이 아니고, 대신 inetd가 불러오는 방법으로 실행된다. 그러면 tcpd는 서비스를 요청하는 호스트를 검사해서, 서버를 실행시키거나 그 호스트로부터의 접근을 거부한다. tcpd를 이용해서 tcp 서비스로의 접근을 제한할 수 있는 것이다. /etc/hosts.allow 파일을 만들고, 여러분 컴퓨터의 서비스에 접근할 필요가 있는 호스트들만을 추가하도록 한다.

여러분이 집에서 모뎀을 쓰는 다이얼-업 사용자라면, 필자는 "모든" 서비스에 대한 접근을 거부하도록 조정하기를 권장한다. tcpd는 서비스에 접근하려다가 실패한 시도들을 기록하므로, 공격을 받고 있다는 것을 경고해 줄 수도 있다. TCP를 기반으로 하는 새로운 서비스를 추가로 설치하게 되면, 반드시 tcp wrapper가 이 서비스를 추가 감시하도록 다시 구성하는 것이 좋다. 예를 들면, 가정의 모뎀 사용자 (dial-up)는 외부인이 자신의 기계에 연결하는 것을 막으면서도, 메일을 받도록 인터넷에 네트워크 연결을 할 수가 있다. 이렇게 만들려면 /etc/hosts.allow에 다음을 추가한다.

ALL: 127.

물론 /etc/hosts.deny에도

ALL: ALL

이렇게 해 놓으면 외부에서 들어오는 연결은 막으면서도, 내부에서 인터넷으로 나가는 연결은 할 수 있게 된다.

염두에 둘 것은 tcp_wrapper는 inetd와, 선정된 소수의 다른 것들에서부터 실행되는 서비스들만 보호한다는 것이다. 여러분이 쓰는 기계에는 다른 서비스들도 돌아가고 있는 것일 수 있다는 것을 생각해 두자. 여러분 기계에서 돌아가는 모든 서비스를 보려면 netstat -ta를 쓰면 된다.
목록보기
9  vi 에서 탭사이즈 조정하기  2003-11-17 144
8  find 로 찾은 화일 지우기  2003-11-17 144
7  ping 으로 목적지 운영체제 알기  2003-11-17 204
6  시스템 로그파일들..  2003-12-22 160
5  계정 사용자 동시 접속 제한  2003-11-17 149
 tcp_wrapper 에 대하여  2003-11-17 140
3  Samba 속도 향상 시키기  2003-11-17 158
2  자료 백업용 쉘 스크립트 소스  2003-11-17 136
1  Apache Server 정보 숨기기  2003-11-17 252
1 2 3 4 5