본문으로 바로가기

TCP Wrappers ( TCP 서비스 필터링 )

category Security/Linux Server 2017. 12. 21. 20:39

- tcp_wrapper

/usr/sbin/tcpd 데몬에 의해 TCP 서비스를 제어하는 역할을 한다.


/etc/hosts.allow와 /etc/hosts.deny 파일을 가지고 설정한다. 


- Rule 적용 순서

/etc/hosts.allow -> /etc/hosts.deny -> Allow


hosts.allow 에 적힌 내용 허용 -> hosts.deny에 적힌 내용 거부 -> 나머지 다 허용


(권장) 이 파일에 설정할 때 시스템이름이나 도메인 이름을 사용하지 말고 IP주소를 사용할 것을 권장합니다.

(권장) 또한, /etc/hosts.deny 파일에는 deny ALL로 설정한 후 접속을 허용할 주소만 /etc/hosts.allow 파일에 기록할 것을 권장한다.


(주의) 2개의 설정파일(/etc/hosts.allow, /etc/hosts.deny)에 정의를 할 때 저장하는 즉시 유효하므로 작성시에 주의하여야 합니다. (서비스를 restart 하는 방법이 아니므로 주의해야 한다.)

(주의) 서비스 차단시 portmap(111) 서비스는 다른 서비스들(EX: NFS, NIS)과 상관이 있으므로 주의해서 차단할 것을 권장한다.


- 규칙

파일 작성시 문법 규칙


deamon_list :  client list [: shell_command]


deamon_list : 한 개 이상의 데몬 프로세스 혹은 에약어

client_list    : 한 개 이상의 호스트 이름, 주소, 패턴 혹은 예약어 


예약어

 ALL         : 모든 서비스 또는 모든 호스트를 나타냄

 LOCAL       : 같은 네트워크에 있는 모든 호스트

 KNOWN       : 이름이 KNOWN 호스트, 혹은 이름 또는 주소를 알고 있는 호스트

 UNKNOWN     : 이름이 UNKNWON 호스트, 혹은 이름이나 주소를 모르는 호스트

 PARANOID    : 호스트이름이 주소와 일치되지 않는 호스트(정방향/역방향 검색이 일치하지 않는 모든 호스트)

 B EXCEPT A  : 목록 B에서 A를 제외한 모든 B


패턴 형식

':' 의 위치에 유념하고 ALL과 ' : '은 공백이 있어야 한다. 


Shell Command


명령

spawn  : 현재 수행중인 프로세스의 자식프로세스(Child Process)로 수행

twist  : 현재 수행중인 프로세스의 이미지 교체 후 수행         

(프로세스의 이미지가 교체되므로 규칙의 마지막 옵션으로 사용해야 한다.


확장 옵션

%a (%A): 클라이언트(서버)의 주소

%c     : 클라이언트의 정보(EX: user01@example.com)

%n (%N): 클라이언트의 이름

%d     : 서비스 데몬의 이름

%h (%H): 클라이언트(서버) 이름 또는 주소

%p     : 데몬 프로세스 ID

%s     : 서버 정보

%u     : 클라이언트 사용자 이름    


- tcpd 데몬에 의해 제어되는 서비스 확인 방법


# which xinetd 

/usr/sbin/xinetd

# ldd /usr/sbin/xinetd | grep libwrap         -> 결과가 있으면 제어 가능

# strings /usr/sbin/xinetd | grep hosts        -> 결과가 있으면 제어 가능


- 참고

hosts.deny 파일에 

ALL: ALL 이라고 절대 적지 않는다. 


어떤 데몬이 제어 되고 있는지 알 수 없기 때문에 문제가 발생 할 수 있다.