최근 개인 및 소규모 기업 등이 웹사이트, 게임 서버 등 다양한 서비스를 직접 운영하는 사례가 증가하고 있습니다. 이로 인해 서버 구축부터 관리까지 전반적인 지식이 필요해졌는데, 그 중 가장 중요한 부분 중 하나가 바로 시스템 보안입니다. 시스템이 외부 공격으로부터 안전하지 않다면 서비스 자체가 위험에 빠질 수밖에 없기 때문인데요.
이를 위해 다양한 방화벽 도구들이 존재하지만 Linux 시스템에서는 방화벽을 좀 더 쉽게 설정을 간단하게 관리할 수 있도록 하는 인터페이스 도구인 ufw(링크 업데이트 예정)를 제공하고 있습니다. 이는 iptables(링크 업데이트 예정)를 기반으로 하며, 사용자 친화적인 명령어와 구성 파일을 제공하여 보안 설정을 용이하게 합니다.
UFW는 대부분의 Linux 배포판에 기본적으로 설치되어 있어 별도의 설치 없이 곧바로 사용이 가능하고 사용 방법 또한 어렵지 않지만 본 글에서는 UFW를 시작하려는 사용자들을 위해 기본 명령어와 사용 방법에 대해 다루고자 합니다. 서버 관리 경험이 부족한 분들도 UFW를 활용한다면 비교적 쉽게 시스템 보안을 강화할 수 있을 것입니다.
튜토리얼 환경: Ubuntu 24.04
ufw 설치
일반적으로 최신 버전의 Ubuntu와 같은 Linux 배포판에는 ufw가 기본적으로 설치되어 있을 수 있습니다. 이는 시스템 보안을 강화하고 사용자가 쉽게 방화벽 설정을 구성할 수 있도록 하는 데 도움이 되지만 만약 설치가 되어 있지 않다면 다음과 같이 ufw를 직접 설치할 수 있습니다.
주의: ufw를 사용하여 방화벽 설정을 변경할 때는 시스템의 보안에 영향을 미칠 수 있으므로, 변경 전에 충분한 검토가 필요하며, 일반 사용자는 방화벽 설정을 변경할 수 없어 시스템 관리자 권한을 가지고 있어합니다.
Ubuntu와 같은 Debian 계열 배포판에서 패키지 관리를 위한 도구인 apt
패키지 관리자의 패키지 목록을 최신 상태로 업데이트하는 것이 좋습니다. 패키지관리 더 알아보기
sudo apt update
업데이트 후 다음 명령을 명령 줄에 작성 후 Enter 키로 실행합니다. 설치 초반 위와 같이 설치 용량 등에 관한 동의를 요구하게 되는데 계속 설치를 진행한다면 y
를 입력합니다.
sudo apt install ufw
기본 정책 설정
기본 정책 설정은 들어오는 연결을 거부하고 나가는 연결을 허용하는 방식으로 시스템의 네트워크 트래픽을 관리합니다. 이는 시스템 보안을 강화하고 외부와의 통신을 효과적으로 제어함으로써 시스템의 안정성을 유지하고 실수로 중요 트래픽을 차단할 확률이 줄어들게 됩니다.
들어오는 연결 거부
기본적으로 보안 취약성을 최소화하기 위해 시스템에 대한 외부 네트워크의 접근을 제한하는 것이 좋습니다.
다음 명령을 실행하면 들어오는 연결이 모두 거부됩니다. 이로 인해 시스템은 네트워크 상에서 응답하지 않고 외부 요청을 무시합니다. 이후 필요한 서비스나 애플리케이션에 대해서는 개별적으로 접근을 허용하는 규칙을 추가해야 할 수 있습니다. 추가로,
라는 메시지가 나오는데, 이는 규칙을 변경한 후에 사용자가 필요에 따라 기존의 규칙을 업데이트할 필요가 있음을 나타냅니다.
sudo ufw default deny incoming
나가는 연결 허용
나가는 연결 허용은 시스템에서 외부로 나가는 네트워크 연결을 허용하는 정책입니다. 시스템이 외부 리소스에 접근하고 필요한 서비스를 사용할 수 있도록 시스템에서 발생하는 모든 트래픽이 외부로 전송되어 다른 시스템과 통신할 수 있도록 허용합니다.
다음 명령어를 실행하면 UFW 방화벽에서 기본적으로 모든 외부로 나가는 트래픽을 허용하게 됩니다. 서버에서 외부 업데이트 서버에 접속하거나, 외부 API를 호출하는 등의 경우에 사용됩니다.
sudo ufw default allow outgoing
규칙 추가
ufw를 사용하여 방화벽 규칙을 추가하는 방법은 다음과 같습니다. 아래 예시에서는 몇 가지 실제 예시를 보여줍니다.
특정 포트 또는 서비스 허용
특정 포트 또는 서비스 포트에 대한 연결을 허용하는 방법은 다음과 같습니다.
다음과 같이 allow
라고 명령하면 SSH 포트(포트 번호 22)에 대한 연결을 허용하는 것으로 TCP 프로토콜을 사용하는 포트 22로 들어오는 모든 연결을 허용합니다. 포트 더 알아보기
sudo ufw allow 22/tcp
ufw를 사용하여 포트를 열거나 서비스를 허용하는 데에는 여러 가지 방법이 있습니다. 포트 번호를 직접 지정하여 열거나, 해당 포트를 사용하는 서비스의 이름을 사용할 수 있습니다. 예를 들어, 22/tcp는 SSH 서비스를 위한 포트 번호이고, openssh는 SSH 서비스의 이름입니다. 따라서 둘 다 동일한 역할을 수행합니다
sudo ufw allow openssh
특정 IP 주소 차단
특정 IP 주소에서의 모든 연결을 차단하는 방법은 다음과 같습니다.
다음과 같이 deny
로 명령하면 IP 주소가 192.168.1.100인 호스트에서의 모든 연결을 거부하는 것으로 이는 특정 호스트로부터의 액세스를 차단하여 보안을 강화하는 것입니다.
sudo ufw deny from 192.168.1.100
특정 포트 범위 허용
특정 포트 범위에 대한 연결을 허용하는 방법은 다음과 같습니다.
다음과 같이 명령하면 포트 번호 3000부터 4000까지의 포트 범위에 대한 연결을 허용합니다. 이는 특정 범위의 포트를 열어서 서비스나 애플리케이션에 대한 접근을 허용하는 것입니다.
sudo ufw allow 3000:4000/tcp
방화벽 활성화
규칙을 추가하더라도 기본적으로 비활성화된 상태이기 때문에 설정한 정책들이 적용되지 않기 때문에 활성화를 해야 합니다.
다음 명령을 작성하고 실행하면 방화벽이 활성화되고 현재 설정된 규칙이 적용됩니다. 즉, 방화벽이 시작됩니다. 이 명령을 실행하면 기본적으로 설정된 정책이 적용되며, 설정한 규칙이 활성화됩니다.
sudo ufw enable
상태 확인
ufw의 현재 상태를 확인할 수도 있습니다.
현재 방화벽의 활성화 여부, 설정된 규칙, 허용 및 거부된 포트 등에 대한 자세한 정보를 제공받고 싶다면 다음과 같이 명령 후 실행합니다. verbose
플래그는 더 많은 세부 정보를 표시하도록 지시하는 것입니다. 이는 방화벽의 상태를 더 자세히 확인하고 분석할 때 유용합니다.
sudo ufw status verbose
참고: 반환되는 결과값이 Status: inactive
라고 표시되는 경우 ufw가 현재 비활성화되어 있다는 것을 의미하니 앞선 활성화 명령을 수행합니다.