tcp_wrappers의 설정

|
Security

2004/02/16 17:34
http://blog.naver.com/deepinheart/20000904743

<tcp_wrappers의 설정>


1. hosts.allow 파일의 생성


이제는 각 서비스 별로 서비스를 열고 닫을 호스트를 정해준다. 이는 hosts.allow hosts.deny를 수정하면 된다. 파일을 수정하는 방법은 다음과 같다.






shell> vi hosts.allow


/etc/inetd.conf에서 현재 시스템에서 작동 중인 인터넷 서비스를 확인하고 그 데 몬의 이름을 확인한다. 시스템에서 사용하지 않은 데몬이 있을 경우는 hosts.allow 파일에 # 를 붙인다.그리고, 각 데몬의 이름을 /etc/inetd.conf에서 확인하여 정확히 바꾸어 준다. 다음은 서비스별로 deny 할 호스트를 지정한다. 기본적으로 ALL 로서 allow하고, deny 할 호스트를 EXPECT 다음에 지정한다. 이 때, DNS name보다는 ip address를 사용하기 권장한다.


예)


rlogind: ALL \
EXCEPT 147.46.67. \
147.46.10.10 \
147.46.82.242 \
147.46.80.220


다음은 hosts.allow의 예제이니 참고하시기 바랍니다.


(예1) gaya라는 시스템을 제외하고 hannam.ac.kr도메인안에 있는 모든 시스템들이 모든 서비 스(telnet,ftp, rlogin등등)사용할 수 있도록 설정.






ALL: .hannam.ac.kr EXCEPT gaya.hannam.ac.kr


(예2) 143.248.21.25 시스템에서 요청하는 모든 서비스를 제공하도록 설정.






ALL: 143.248.21.25


(예3) 143.248.10.23, 143.248.30.33에서 요청하는 모든 서비스를 제공하도록 설정.






ALL: 143.248.10.23, 143.248.30.33


혹은


ALL: 143.248.10.23
ALL: 143.248.30.33


(예4) 서브넷 143.248.70.X의 모든 시스템들의 접근 허용 설정






ALL: 143.248.70.


hosts.allow의 수정이 끝나면, hosts.deny를 수정하는데, hosts.allow에서 EXCEPT 통해 지정했으므로 다음과 같이 설정한다.


 


2. hosts.deny 파일의 생성






shell> vi hosts.deny


 






ALL: ALL


hosts.deny파일은 tcp wrapper 가 설치되어있는 호스트에 hosts.allow에 설정되어있는 시스템을 제외하고는 거부하도록 위와 같이 설정하시면 됩니다.


3. hosts.allow와 hosts.deny의 수정이 끝났으면 /etc 디렉토리에 복사






shell> cp hosts.allow /etc
shell> cp hosts.deny /etc


4. safe_finger의 복사


safe_finger는 deny 된 host 접근을 Log하기 위한 shell script이다. 파일은 /usr/local/bin에 복사하도록한다. 그리고 실행 가능하도록 권한을 수정한다.






shell> cp safe_finger /usr/local/bin
shell> chmod a+x /usr/local/bin/safe_finger


5. inetd.conf의 수정






shell> cp /etc/inetd.conf /etc/indetd.conf.org                    # /etc/inetd.conf 백업
shell> vi /etc/inetd.conf                                                             # /etc/inetd.conf 수정


Wrapper를 통한 서비스만을 수정하는데, 원래의 설정을 그대로 복사한 후, #기호를 붙이고 /usr/sbin/ftpd 등의 각 서비스를 /usr/sbin/tcpd -디렉토리는 해당 디렉토리-로 바꾼다. 그리고, 마지막에 그 전에 있던 서비스를 기입한다. 아래 예를 잘 참고하자.






##############
#TCP Wrapper
#
#ftp stream tcp nowait root /usr/sbin/ftpd ftpd


#telnet stream tcp nowait root /usr/sbin/telnetd telnetd
#shell stream tcp nowait root /usr/sbin/rshd rshd
#login stream tcp nowait root /usr/sbin/rlogind rlogind
#exec stream tcp nowait root /usr/sbin/rexecd rexecd
#


ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/ftpd
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/telnetd
shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/rshd
login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/rlogind
exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/rexecd


.. <이하생략>





6. tcpdchk를 이용한 configuration 확인






shell> tcpdchk


이 때 에러가 나오면 해당 configuration를 수정한다.


7. tcpdmatch를 통해 configuration확인


설정이 제대로 되었으면 tcpdmatch 를 통해 설정한 호스트에서 들어 왔을 때 deny 되는지 allow 되는지 여부를 확인한다.






usage: tcpdmatch [-d] [-i inet_conf] daemon[@host] [user@]host


           -d: use allow/deny files in current directory
            -i: location of inetd.conf file


 






[root@gaya /root]# tcpdmatch ftpd bomun
warning: ftpd: no such process name in /etc/inetd.conf
warning: bomun: hostname alias
warning: (official name: bomun.kaist.ac.kr)
client:   hostname bomun.kaist.ac.kr
client:   address  143.248.1.102
server:   process  ftpd
matched:  /etc/hosts.deny line 9
access:   denied
[root@gaya /root]#






[root@gaya /root]# tcpdmatch telnetd yskim.kaist.ac.kr
warning: telnetd: no such process name in /etc/inetd.conf
client:   hostname yskim.kaist.ac.kr
client:   address  143.248.1.24
server:   process  telnetd
matched:  /etc/hosts.allow line 9
access:   granted
[root@gaya /root]#


 


8. inetd의 재시동


여기까지 이상이 없이 되었으면 이제는 inetd를 재시동하여 wrapper가 작동하도록 한다. 우선 ps 명령으로 pid를 찾아낸다.






shell> ps -eaf | grep inetd


        root 152 1 0 8월 08 ? 2:18 /usr/sbin/inetd -s


(주의!!) PID는 시스템마다 다르므로 필히 확인하십시요.


그리고 HUP를 통해 작동시킨다.






shell> kill -HUP 152




9. 설치재확인


실험실내의 deny된 다른 호스트에서 접근 했을 때, deny가 되는지 확인한다.






shell> telnet taeback.kaist.ac.kr
Trying 143.248.210.5…
Connected to taeback.kaist.ac.kr.
Escape character is ‘^]’.
Connection closed by foreign host.

답글 남기기