[보안] tcp_wrappers 설치 (inetd/xinetd)

소스로 배포되는것으로 알고 있는데?

README 파일을 충분히 읽으시기 바랍니다.

컴파일 부분에 대한 것은 생략하기로 하고…

컴파일이 완료 되면

tcpd, tcpdchk, tcpdmatch, try-from, safe_finger 라는 실행

파일이 생기는데 이것을 /usr/sbin 으로 카피 해주세요.

그리고 tcpd.h 헤더 파일은 /usr/include 로

libwrap.a 는 /usr/lib 로

그외 맨 페이지들은 뒤의 번호를 보고 /usr/man/man.x 로 적절히

카피 하시구요.

그리고 할일은 /etc/inetd.conf 를 수정하는것입니다.

inetd.conf 를 보면 (기본적으로 tcp_wrappers 가 없다면)

ftp     stream  tcp     nowait  root    in.ftpd -l -a

telnet  stream  tcp     nowait  root    in.telnetd

이런식으로 되어 있을겁니다. 이것을 이렇게 수정해주셔야 합니다.

ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a

telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

이렇게 함으로써 지정한 포트로 (포트에 관한 설정은

/etc/service 입니다) 오는 요청에 대해 inetd 슈퍼 데몬이

/etc/service 를 참조하여 (telnet 의 경우에) in.telnetd 를

실행하게 되는데 그 이전에 /usr/sbin/tcpd 를 거쳐가게 됨으로써

tcpd 에서 이것이 허가된 접속인지 아닌지를 가려내고

in.telnetd 를 실행 또는 거부를 합니다. 또한 로그를 남기게 되지요.

그렇다면 접속의 허가와 거부는 어떻게 설정을 하는걸까요?

만약 rlogin 을 막고 싶다면… 이건 tcp_wrappers 를 이용하기

보다는 inetd 슈퍼 데몬 자체에서 사용을 하지 않게 하는게

좋겠지요.

#login  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind

이런식으로 /etc/inetd.conf 에 주석 처리를 하고

kill -HUP <inetd pid> 해서 리로드 시키면 rlogin 은 아예

접속이 안되지요. 그런데 222.222.222.222 라는 호스트로부터의

rlogin 접속 요청은 허가 하고 싶다면? 이때 tcp_wrappers 를

사용할수 있습니다. inetd.conf 에서 주석을 없애구

/etc/hosts.allow 에 이러한 내용을 추가 해 줍니다.

in.rlogind : 222.222.222.222

그리고 나머지 호스트로부터의 접속을 모두 차단해야 하니까

/etc/hosts.deny 에 이런식으로 적을수 있겠죠

in.rlogind : ALL

우선 tcpd 는 hosts.allow 의 내용을 보고 열것을 연후에

hosts.deny 에 적용된것을 다 막아 버립니다. hosts.allow 에

의해 열린것을 제외 하구요. ^^

그외에도 hosts.allow 를 이용해서 많은 방법을 사용할수 있습니다.

예를 하나 들자면…

in.fingerd : ALL : twist (/usr/sbin/safe-all @%h)

finger 요청이 들어오면 /usr/sbin/safe-all 파일을 실행합니다.

%h 는 요청이 들어온 호스트 이름이구요.. ^^

( <- 이 인간은 저기에 무서운 스크립이 걸려 있습니다.

행여나 윈95 나 NT 에서는 finger 때리지 마시기 바랍니다)

가장 좋은 방법은 man hosts.allow, man hosts.deny 를 해보는

것이겠지요. ^^

아 그리고 tcp_wrappers 의 부속 프로그램인 tcpdchk 와

tcpdmatch 는 각각 hosts.allow 혹은 hosts.deny 의 내용이

맞는가 틀린가를 검사하고, tcpdmatch 를 이용해서 간단하게

실험을 해볼수 있습니다.

tcpdchk -v 를 하면 hosts.* 파일의 설정에 대한 자체적인

체크를 하게 되는데 이곳에서 에러가 난다면 먼가 설정을 잘못

한것이겠지요.

그리고 tcpdmatch 를 이용해서 정확한지 확인할수 있습니다.

222.222.222.222 호스트에 대해 in.telnetd 를 허가 했다면

이런식으로 제데로 동작하는지 확인할수 있습니다.

tcpdmatch in.telnetd xxxx@222.222.222.222

client:   address  222.222.222.222

client:   username xxxx

server:   process  in.telnetd

matched:  /etc/hosts.allow line 8

option:   allow

access:   granted

원하는 답이 나왔다면 정상이겠지요. ^^

열심히 공부해 보도록 하세요. 아주 재밌습니다.

참 레드헷에는 기본적으로 설치가 되있습니다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.