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 |