우분투를 포함한 리눅스 서버를 운영하면서 대부분 SSH를 설정해 원격에서 접속하거나 유지보수를 하게된다.
하지만 SSH를 열어두면 Brute-Force공격이 시도때도 없이 들어온다...
특히 중국쪽에서 SSH포트를 열면 한 10분도 안돼서 접속시도가 들어온다... 전체 아이피를 스캔하는 봇을 돌리는 것도 만만치 않을건데.. masscan와 비슷한 원리의 봇을 사용하는 듯하다..
우분투에서는 특정 IP만 SSH 접속이 가능하게 하려면 크게 2가지 방법이 있다.
첫번째는 /etc/hosts 파일을 이용하는 방법(TCP Wrapper) 과
두번째는 ufw같은 방화벽 유틸을 사용하는 것이다.
이번 포스트에서 다룰 방법은 전자다. 왜나하면 후자의 방법에 비해 훨씬 간단하고 기본적으로 설치된 소프트웨어를 사용해서 안정성있기 때문이다.
/etc/hosts.allow , deny파일을 통해 IP를 차단하는 것을 TCP Wrapper이라고 하는데
ssh뿐만 아니라 리눅스에서 돌아가는 모든 데몬에 대해서 설정이 가능하며 특징은 다음과 같다.
1. 별도의 패키지 설치가 필요없이 기본적으로 내장되 있다.
2. 기본적으로 TCP연결을 허용한다음 허용된 IP에 대해서만 response를 보낸다. ufw는 TCP ACK패킷 자체를 전송하지 않지만 TCP Wrapper는 TCP ACK패킷을 전송한다는 점에서 차이가 있다.
1. TCP Wrapper SSH 차단 방법
$ sudo vi /etc/hosts.deny
/etc폴더내 파일은 기본적으로 수정시 root 권한이 필요하므로 sudo를 통해 명령어를 실행한다.
우선 기본적으로 ssh 데몬(sshd)의 접근을 차단해주기 위해 다음과 같은 행을 추가한다.
sshd: ALL
**참고로 TCP Wrapper의 Priorty는 다음과 같다.
1. hosts.deny
2. hosts.allow
즉 차단 정책이 우선이므로 기본적으로 차단을 진행하는데 만약 IP가 allow에 존재한다면 예외적으로 접근을 허용하는 방식이다. 일반적인 방화벽 소프트웨어나 시스템과 다를 바 없다.
그다음 허용할 IP를 설정하기 위해 /etc/hosts.allow 파일을 수정한다.
$ sudo vi /etc/hosts.allow
그다음 허용할 IP를 설정하기 위해 다음과 같은 행을 추가한다.
sshd: IP주소
에를 들어 1.1.1.1를 추가하고자 한다면
sshd: 1.1.1.1
아주 간단하다, 그리고 IP가 여러개라면 ,(콤마)로 구별하거나 sshd: 행을 여러번 사용해도 된다.
만약에 IP대역을 입력하고 싶다면 CIDR형태로 입력해도 되고 뒷 부분을 그냥 쓰지 않고 .만 써도된다. 예시를 보여주자면 다음과 같다.
#1.1.1.1/24대역의 IP를 허용하고 싶을 때
sshd: 1.1.1.
또는
sshd: 1.1.1.1/24
#2.2.2.2/16 대역의 IP를 허용하고 싶을 때
sshd: 2.2.
또는
sshd: 2.2.2.2/16
이처럼 CIDR로 써도되고 .으로 표시해도된다. 다만 추가하고자 하는 IP대역의 CIDR이 /24나 /16, /8이 아닌 /25,/27과 같은 형식이라면 .으로 표기하기는 어렵고 CIDR로 표기하면된다.
hosts.allow, hosts.deny 파일 수정을 마쳤으면 ssh데몬을 재시작한다.
$ sudo service sshd restart
그럼 정상적으로 특정IP만 ssh를 접속 가능하도록 허용하게 만드는데 성공한 것이다.
'서버운영' 카테고리의 다른 글
[Migrated From anhyunjun.com] 홈서버 운영 1년후기 (0) | 2024.05.25 |
---|