UFW 개요

UFW(Uncomplicated Firewall)는 Ubuntu 및 다양한 리눅스 배포판에서 자주 사용되는 방화벽 설정 도구이다. UFW는 방화벽 규칙 설정을 간편하게 만들어 사용자가 복잡한 iptables 명령어 대신 직관적인 명령어를 사용할 수 있게 해준다. UFW는 기본적으로 규칙을 추가하고 제거하는 방법을 제공하며, OpenSSH 같은 서비스의 포트 접근을 제어하는 데 유용하다.

UFW는 기본적으로 허용된 포트만 외부 접근이 가능하도록 설정할 수 있으며, OpenSSH를 통한 SSH 접속을 허용하는 규칙을 추가하여 안전하게 서버 관리가 가능한다.

UFW 설치 및 활성화

먼저 UFW가 설치되어 있지 않은 경우, 패키지 관리자를 사용하여 설치한다. Ubuntu에서 UFW 설치는 다음과 같이 진행한다:

sudo apt-get install ufw

설치 후 UFW를 활성화하려면 다음 명령어를 입력한다:

sudo ufw enable

UFW는 기본적으로 아웃바운드 트래픽을 허용하고 인바운드 트래픽을 차단하는 방식으로 동작한다. 따라서, OpenSSH 서비스를 위해 필요한 포트를 허용하는 규칙을 추가해야 한다.

OpenSSH 포트 허용

기본적으로 OpenSSH는 TCP 22번 포트를 사용하여 SSH 접속을 처리한다. 이를 UFW에 허용 규칙으로 추가하려면 다음과 같이 명령어를 입력한다:

sudo ufw allow ssh

혹은 TCP 22번 포트를 명시적으로 지정하려면 다음 명령을 사용한다:

sudo ufw allow 22/tcp

이 명령어를 실행하면 OpenSSH가 사용하는 포트 22번을 통해 외부에서 SSH 접속이 가능해진다.

UFW 상태 확인

OpenSSH 포트를 허용한 후, 현재 UFW 규칙과 방화벽 상태를 확인하려면 다음 명령어를 사용할 수 있다:

sudo ufw status

이 명령을 실행하면 방화벽이 활성화되어 있는지, 그리고 현재 허용된 서비스와 포트 목록이 표시된다. 예를 들어, SSH 포트가 허용된 상태에서는 다음과 같은 출력이 나올 수 있다:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

여기서 "ALLOW"는 SSH 포트로의 접속을 허용한다는 의미이며, "Anywhere"는 모든 IP 주소에서 해당 포트로의 접근이 가능함을 의미한다.

특정 IP에만 SSH 허용

만약 모든 IP에서의 SSH 접속을 허용하는 것이 아닌, 특정 IP에서만 접속을 허용하고자 한다면 UFW 규칙을 제한할 수 있다. 이를 위해서는 SSH 접속을 허용할 IP 주소를 명시해야 한다.

예를 들어, 192.168.1.100 IP 주소에서만 SSH 접속을 허용하려면 다음 명령어를 사용한다:

sudo ufw allow from 192.168.1.100 to any port 22

이렇게 하면 특정 IP 주소만 SSH 포트에 접속할 수 있게 된다.

OpenSSH 포트 변경 시 UFW 설정

보안상 이유로 SSH 포트를 기본 포트인 22번이 아닌 다른 포트로 변경하고자 할 수 있다. SSH 포트를 변경하면 UFW 규칙에도 해당 포트를 허용해야 한다.

예를 들어, SSH 포트를 2222로 변경하려면 /etc/ssh/sshd_config 파일에서 다음 항목을 수정한다:

Port 2222

변경 후, UFW에 새 포트를 허용하는 명령어를 추가한다:

sudo ufw allow 2222/tcp

변경 사항을 적용한 후 SSH 데몬을 재시작한다:

sudo systemctl restart ssh

이제 SSH 접속은 포트 2222에서 가능해지며, 방화벽에서도 해당 포트를 허용한 상태가 된다.

특정 IP 대역에만 SSH 접근 허용

보안을 강화하기 위해 OpenSSH를 통해 특정 IP 대역에서만 SSH 접근을 허용할 수 있다. 예를 들어, 회사 내부 네트워크에서만 SSH 접속을 허용하고 싶다면, UFW에 다음 규칙을 추가할 수 있다:

sudo ufw allow from 192.168.1.0/24 to any port 22

이 명령어는 192.168.1.0/24 대역의 IP 주소에서만 OpenSSH를 통해 서버에 접근할 수 있도록 설정한다. 이 외부 네트워크에서의 접근을 차단할 수 있는 방법은 회사의 보안 정책에 따라 유연하게 변경 가능한다.

OpenSSH 포트 변경

보안을 강화하는 방법 중 하나는 OpenSSH에서 사용하는 기본 포트 22번을 다른 포트로 변경하는 것이다. 이 변경을 위해서는 OpenSSH 설정 파일에서 포트를 변경해야 한다.

sudo nano /etc/ssh/sshd_config

설정 파일에서 Port 22 라인을 찾아 원하는 포트 번호로 변경한다. 예를 들어, 포트를 2222번으로 변경하려면 다음과 같이 수정한다:

Port 2222

이 후 OpenSSH 서비스를 재시작한다:

sudo systemctl restart sshd

이제 UFW에서 새로 설정한 포트를 허용해야 한다:

sudo ufw allow 2222/tcp

이 명령어는 새로 설정한 2222번 포트를 통해 SSH 접속이 가능하게 해준다. 동시에 기존 22번 포트를 차단하여 공격을 예방할 수 있다:

sudo ufw delete allow 22/tcp

UFW 상태 확인

현재 UFW의 설정 상태를 확인하려면 다음 명령어를 사용할 수 있다:

sudo ufw status

이 명령어는 UFW에 설정된 모든 규칙을 나열하며, 각 서비스와 포트에 대한 허용/차단 상태를 보여준다. 예시 출력은 다음과 같다:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
2222/tcp                   ALLOW       Anywhere

이와 같이 현재 허용된 포트가 표시되며, OpenSSH를 위해 설정된 규칙을 확인할 수 있다.

비밀번호 기반 인증 비활성화

SSH 접근 보안을 더욱 강화하려면 비밀번호 기반 인증을 비활성화하고 공개키 기반 인증을 사용하는 것이 좋다. OpenSSH 설정 파일에서 다음과 같이 변경한다:

sudo nano /etc/ssh/sshd_config

설정 파일에서 PasswordAuthentication 옵션을 no로 설정한다:

PasswordAuthentication no

이 설정을 통해 비밀번호로 SSH 접속을 시도하는 공격을 차단할 수 있으며, 공개키 기반 인증만 허용하게 된다. 설정을 적용하려면 OpenSSH 서비스를 재시작한다:

sudo systemctl restart sshd

비밀번호 인증 비활성화 후 UFW 설정

비밀번호 인증을 비활성화한 후, UFW에서 OpenSSH를 위해 설정된 포트를 점검하고 접근을 허용해야 한다. 공개키 인증을 사용하는 서버에 적절한 접근 제어를 설정하는 것이 중요하다. 다음과 같이 설정할 수 있다:

sudo ufw allow 2222/tcp from 192.168.1.0/24

이 명령어는 192.168.1.0/24 네트워크 대역에서만 SSH 접속을 허용하며, 비밀번호 인증을 차단한 상태에서 추가적인 보안 계층을 제공한다.