[보안] 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
원하는 답이 나왔다면 정상이겠지요. ^^
열심히 공부해 보도록 하세요. 아주 재밌습니다.
참 레드헷에는 기본적으로 설치가 되있습니다.