/etc/hosts.deny 작성법
안녕하세요. 오늘은 리눅스의 접근제한 보안 파일인 hosts.deny와 hosts.allow 사용 방법에 대해 알아보도록 하겠습니다. 리눅스에서는 편리를 위한 서비스로서 빠질 수 없는 게 있습니다. 바로 ssh입니다. 원격 연결을 통해 호스트의 쉘을 접근하거나 특정 서비스를 시작/중지하거나 할 때 사용합니다. ssh는 sshd 데몬 서비스와 ssh 클라이언트로 구성되어 있습니다. 하지만 보안을 위해서는 인가된 관리자가 아니라면 이러한 원격 서비스로 내 컴퓨터에 접근하는 일이 없어야겠죠?
이럴 때 사용하는 방법이 iptables, hosts.deny 등 여러 정책 파일들이 있습니다.
우리는 우선 hosts.deny를 통해 접근제한 하는 방법에 대해 알아보도록 하겠습니다.
hosts.deny 편집으로 특정 IP 주소를 차단하는 예제
우선 hosts.deny 파일 편집을 통해 특정 클라이언트를 차단하는 방법에 대해 알아보겠습니다. 우선 vim, nano 등과 같은 명령으로 해당 파일을 편집합니다.
sshd: ALL
ALL: 192.168.0.100
위 예제는 sshd(22) 서비스에 "192.168.0.100" IP 주소를 가진 클라이언트가 요청을 하면 차단하겠다는 의미입니다. 여기서 sshd: ALL 문구를 잘 확인해야 합니다. "ALL"이라는 이름을 가진 정책을 사용하겠다는 의미이고 이 정책은 하단에 나타납니다. 그리고 우린 이 정책으로 IP주소를 지정하였습니다.
즉, "192.168.0.100" 으로 들어오는 접근은 차단하라입니다.
만약 "192.168.0"으로 시작하는 IP 주소를 차단하고 싶다면 정책란에 "192.168.0."과 같이 마지막 부분을 '.'으로 끝내면됩니다.
hosts.deny 편집으로 특정 프로세스에 접근 차단 예제
sshd: ALL
위와 같이 "ALL" 정책 왼쪽에 자리한 항목에는 프로세스명 또는 포트 등과 같은 대상이 들어갑니다. 위의 예제는 "sshd" 프로세스에 접근을 차단하겠다는 의미입니다.
hosts.deny 편집으로 특정 포트에 접근 차단 예제
ALL: ALL EXCEPT 127.0.0.1 : 80
위 예제를 살펴보도록 하겠습니다.
우선 제일 왼쪽 "ALL"은 모든 서비스를 의미합니다. 이후 "ALL"은 위 예제에서 확인한 IP 주소 등과 같은 제한 대상을 의미합니다. 여기서 특이한 점은 바로 "EXCEPT"입니다. 이 구문 오른쪽에 나오는 아이피 주소만 특별히 허용하겠다는 의미입니다.
마지막의 "80"은 80 포트에 대한 접근을 제한하겠다는 의미입니다.
전체 접근 차단 후 hosts.allow 편집으로 일부 접근 허용 예제
/etc/hosts.deny 파일:
ALL: ALL
/etc/hosts.allow 파일:
sshd: 192.168.0.100
위 예제는 hosts.deny 파일이 우선순위가 높음을 이용하여 우선적으로 전체 접근을 차단합니다.
이후 hosts.allow 파일에 특별히 허용할 IP 주소를 작성하여 예외 허용하도록 합니다.
일반적으로 deny파일을 통해 예외를 설정하기보다는 전체 차단을 수행하고 allow 파일을 통해 예외 허용하는 패턴을 많이 사용합니다.
hosts.deny에서 접근 기록 로그 작성 방법 예제
ALL: ALL: spawn /bin/echo "접근 차단 - 접속 주소 %a" >> /var/log/access.log
위 예제는 hosts.deny 파일을 사용하여 접근을 차단하고 있는 경우, 특정 클라이언트가 접속을 요청하면 접근 기록을 남기는 예제입니다.
위에서 "% a"는 접근하려던 IP 주소가 치환되어 로그에 작성됩니다.
이런 방법을 통해 나쁜 목적으로 우리 서버에 접근하는 클라이언트들을 확인할 수 있습니다.
오늘은 이렇게 리눅스에서 기본 제공되는 hosts.deny, hosts.allow 파일을 편집하여 클라이언트 접근을 제한하는 방법에 대해 알아보았습니다.