본문 바로가기

Linux/보안

네트워크 서비스 보안 - TCP_Wrapper


TCP_Wrapper

- Xinetd  데몬에 의해 수행되는 서비스들의 접근제어 프로그램
- 리눅스 시스템에 기본적으로 설치되어 있다.
- libwrap.a 라이브러리를 포함하여 컴파일된 서비스들도 제한이 가능하다.


TCP_Wrapper 관련 설정파일
- /etc/hosts.allow : 접근을 허용하고자 하는 클라이언트 리스트를 등록한다.
- /etc/hosts.deny : 접근을 거부하고자 하는 클라이언트 리스트를 등록한다.


TCP_Wrapper 형식
[Daemon_name] : [Client_list] [Options]

Daemon_name : 접근을 제어할 데몬명을 입력한다.
Client_list : 접근 제어규칙을 설정할 클라이언트를 입력한다.
Options : 부가적인 옵셕을 지정한다.

Wildcards
ALL : 모든 서비스 또는 모든 호스트를 나타낸다.
LOCAL : 로컬 호스트를 나타낸다.
A EXCEPT B : 리스트 A 에서 B를 제외한 모든 A를 나타낸다.



TCP_Wrapper가 적용되는 서비스 데몬 확인 방법

 
[root@server3 ~]# strings -f /usr/sbin/sshd | grep hosts_access
/usr/sbin/sshd: hosts_access
[root@server3 ~]# strings -f /usr/sbin/vsftpd | grep hosts_access
/usr/sbin/vsftpd: hosts_access
[root@server3 ~]# strings -f /usr/sbin/xinetd | grep hosts_access

/usr/sbin/xinetd: hosts_access
[root@server3 ~]# strings -f /sbin/portmap | grep hosts_access
/sbin/portmap: hosts_access_verbose
- nfs 의 경우 아래와 같이 strings를 해보면 tcp_wrapper 서비스로 제한이 안되지만
nfs는 portmap 데몬이 먼저 실행되어야 하므로 portmap을 제한하면 nfs 서비스도 제한할 수 있다.


[root@server3 ~]# strings -f /usr/sbin/httpd | grep hosts_access
[root@server3 ~]# strings -f /usr/include/nfs | grep hosts_access
- nfs 는 tcp_wrapper 에 적용되지 않는 서비스 데몬이다.




TCP_Wrapper 설정 방법

 
- 기본적으로 allow > deny 순으로 적용이 된다. 그러므로 모든 설정을 거부한 다음 필요한 부분만 허용해 주는 것이 좋다.

[root@server3 ~]# vi /etc/hosts.deny
sshd:10.10.0.0/255.255.0.0
or
sshd:10.10.0.0/16
or
sshd:ALL
or
vsftp:ALL
or
portmap:ALL - nfs 서비스를 위한 portmap 서비스 제한
or
in.telnetd:ALL  - telnet 서비스

[root@server3 ~]# vi /etc/hosts.allow
sshd:10.10.33.2
or
sshd:10.10.0.0/255.255.0.0
or
sshd:10.10.0.0/16
or
vsftp:10.10.0.0/255.255.0.0
or
portmap:10.10.0.0/255.255.0.0
or
in.telnetd:10.10.0.0/255.255.0.0
or
sshd:10.10.0.0/255.255.0.0 EXCEPT 10.10.33.2 10.10.33.3 - 10.10.33.2, 10.10.33.3 을 제외한 모든 10.10.0.0 대역을 거부한다.




TCP_Wrapper 를 이용한 Xinetd 서비스 접근 제어
- xinetd 서비스도 tcp_wrapper 를 통해 서비스를 제한할 수 있지만 /etc/xinetd.d/서비스명 의 옵션을 통해서도 접근을 제어할 수 있다.

 
[root@server2 ~]# cd /etc/xinetd.d
[root@server2 xinetd.d]# ls
chargen-dgram   daytime-stream  echo-stream   klogin       tcpmux-server
chargen-stream  discard-dgram   eklogin       krb5-telnet  telnet
cvs             discard-stream  ekrb5-telnet  kshell       time-dgram
daytime-dgram   echo-dgram      gssftp        rsync        time-stream
[root@server2 xinetd.d]# vi telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no
      only_from       = 10.10.33.2  - 10.10.33.2 만 telnet 접속을 허용한다.
      no_access       = 10.10.33.2  - 10.10.33.2 만 telnet 접속을 거부한다.
      access_times    = 09:00-18:00 - 09시부터 18시까지만 telnet접속을 허용한다.
}

- 참고
only_from, no_access가 둘다 있을 경우에는 no_access가 우선시 된다.

(/etc/hosts.deny, /etc/hosts.allow에는 telnet 과 관련된 설정은 안되어 있는 경우로 telnet의 설정만으로 IP를 차단 또는 허용할 수 있다.)

[root@server2 xinetd.d]# service xinetd restart

[root@server3 ~]# telnet 10.10.33.2
- 10.10.33.2 로 telnet 접근을 시도해 보지만 거부당한다.
Trying 10.10.33.2...
Connected to 10.10.33.2 (10.10.33.2).
Escape character is '^]'.
Connection closed by foreign host.

- 참고
no_access = 10.10.33.2 라고 해도 10.10.33.2 라는 IP를 가진 컴퓨터에서 IP를 바꿔서 접속을 시도하면 뚫리게 되어 보안에 약하다. (즉, IP 스푸핑에 약하다.)




'Linux > 보안' 카테고리의 다른 글

보안 체킹 프로그램 - sxid  (0) 2009.02.03
네트워크 서비스 보안 - ssh  (0) 2009.01.30
네트워크 서비스 보안 - tcpdump  (0) 2009.01.30
사용자 보안 - PAM  (0) 2009.01.29
사용자 보안 - 루트권한 제한(sudo)  (0) 2009.01.29
사용자 보안 - 패스워드 크랙  (0) 2009.01.29