[LINUX] 리눅스에서 TCP Wrapper 사용하기(접근제어-ACL설정)
리눅스에서 TCP Wrapper를 이용하면 간단하게 FTP, Telnet, SSH 및 xinetd 기반의 서비스에 대해 접근제어(ACL)설정이 가능합니다.
최근 버전의 리눅스에서는 TCP Wrapper 사용을 위해 특별한 설치 없이 /etc/hosts.allow, /etc/hosts.deny
파일의 설정만으로 특정 아이피 또는 대역에 대해 접근제어를 허가, 거부 할 수 있습니다.
먼저 어떤 서비스들이 TCP Wrapper에 의해 제어가 되는지 확인 해보겠습니다.
1. TCP Wrapper에 의해 제어가 되는 서비스 확인 방법
# which xinetd -> 파일 실행경로 확인 /usr/sbin/xinetd
# ldd /usr/sbin/xinetd -> 링크된 라이브러리 정보 확인 linux-vdso.so.1 => (0x00007fff9655b000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fea08094000) libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fea07e89000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fea07c6f000) ……………………………………………………………………………………
# which sshd > 파일 실행경로 확인 /usr/sbin/sshd
# ldd /usr/sbin/sshd -> 링크된 라이브러리 정보 확인 linux-vdso.so.1 => (0x00007fff107fe000) libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x00007f131c423000) libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f131c218000) libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f131bff1000) libpam.so.0 => /lib64/libpam.so.0 (0x00007f131bde2000) …………………………………………………………………………………… |
which 명령은 실행되는 파일의 경로명을 보여주며, ldd명령은 프로그램이나 라이브러리들이 요구하는 공유라이브러리의 의존성을 출력하여 보여준다
위에서 보듯이 xinetd 기반의 서비스와 와 sshd 서비스가 TCP Wrapper에 의해 제어되는 이유는 libwrap이 링크되어 있기 때문입니다.
2 기본구문
TCP래퍼 사용을 위해서는 hosts.deny, hosts.allow 파일에 설정시 " : " 로 구분하여 값을 입력 하게 됩니다.
[서비스명] : [호스트] 형태로 입력하게 됩니다.
ex) ALL : ALL -> 모든서비스 : 모든아이피 허가 또는 거부 하겠다.
ex) sshd : ALL -> sshd 서비스에 대해서 모든 아이피에 대해 허가 또는 거부 하겠다.
ex) in.telnetd : LOCAL -> 텔넷 서비스에 대해서 /etc/hosts 파일 내에 있는 호스트에 대해서만 허가 하겠다.
ex) in.telnetd : 192.168.0.* -> 텔넷 서비스에 대해서 192.168.0.* 대역에 대해서만 허가, 거부 하겠다.
ex) in.telnetd : *.test.com -> 텔넷 서비스에 대해서 *.test.com 도메인에 속한 호스트에 대해서만 허가, 거부 하겠다.
3 설정하기
1) /etc/hosts.deny 설정
: 실제 접근제어사용을 위해 hosts.deny 파일에 ALL : ALL TCP래퍼로 제어되는 모든 서비스에 대해 모든 아이피에 대해 차단 정책을 적용합니다.
# vi /etc/hosts.deny ALL : ALL |
2) /etc/hosts.allow 설정
: 접근을 허용할 아이피에 대해 허가리스트에 추가합니다.
/etc/hosts 파일에 등록된 호스트 들은 모든 서비스에 대해 허가하고, sshd에 대해서는 추가적으로
192.168.0.1, 192.168.0.2 아이피에 대해 허가를 합니다.
# vi /etc/hosts.allow ALL : LOCAL sshd : 192.168.0.4,192.168.0.5 |
3) /etc/hosts 파일에 호스트 추가
# vi /etc/hosts server1 192.168.0.1 server2 192.168.0.2 server3 192.168.0.3 |
위와 같이 설정할 경우 192.168.0.1 ~3 의 아이피의 경우 해당 서버의 모든 서비스에 접근이 가능 하며 192.168.0.4,5 아이피는 sshd서비스로만 접근이 가능합니다. 그 이외의 아이피에서는 TCP래퍼가 제어하는 모든 서비스로 해당 서버에 접근이 불가능 합니다.