소개
UFW (uncomplicated firewall)은 Ubuntu 배포판에 기본으로 포함된 iptables
위에서 실행되는 방화벽 구성 도구입니다. 이는 명령 줄을 통해 일반적인 방화벽 사용 사례를 구성하기 위한 간소화된 인터페이스를 제공합니다.
이 치트 시트 형식의 가이드는 포트, 네트워크 인터페이스 및 소스 IP 주소별로 서비스를 허용하고 차단하는 일반적인 UFW 사용 사례 및 명령의 빠른 참조를 제공합니다.
이 가이드 사용 방법
- 이 치트 시트 형식의 가이드는 독립된 명령 줄 스니펫으로 제공됩니다.
- 수행하려는 작업과 관련된 섹션으로 이동하십시오.
- 이 가이드의 명령어에서 강조된 텍스트를 볼 때, 이 텍스트는 귀하의 네트워크에서의 IP 주소를 참조해야 함을 염두에 두십시오.
현재 UFW 규칙 세트를 확인할 수 있다는 것을 기억하십시오. sudo ufw status
또는 sudo ufw status verbose
를 사용하여.
GitHub에서 앱을 사용하여 프론트엔드 응용 프로그램을 배포하려면 DigitalOcean App Platform을 사용하십시오. DigitalOcean이 앱을 확장하는 데 집중하세요.
UFW 상태 확인
ufw
가 활성화되었는지 확인하려면 다음을 실행하세요:
OutputStatus: inactive
출력에서 방화벽이 활성화되었는지 여부를 확인할 수 있습니다.
UFW 활성화
ufw status
를 실행했을 때 Status: inactive
메시지가 표시되면 방화벽이 아직 시스템에서 활성화되지 않은 것입니다. 이를 활성화하려면 명령을 실행해야 합니다.
기본적으로, 활성화된 경우 UFW는 서버의 모든 포트에 대한 외부 액세스를 차단합니다. 실제로는 SSH를 통해 서버에 연결되어 있고 ufw
를 SSH 포트를 허용하기 전에 활성화하는 경우 연결이 끊어집니다. 이 경우 방화벽을 활성화하기 전에 SSH 액세스를 활성화하는 방법에 대한 섹션을 따르십시오.
시스템에서 UFW를 활성화하려면 다음을 실행하세요:
다음과 같은 출력이 표시됩니다:
OutputFirewall is active and enabled on system startup
현재 차단된 것 또는 허용된 것을 확인하려면 다음과 같이 ufw status
를 실행할 때 verbose
매개변수를 사용할 수 있습니다:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
UFW 비활성화
어떤 이유로든 UFW를 비활성화해야 하는 경우 다음 명령을 사용할 수 있습니다:
이 명령은 시스템에서 방화벽 서비스를 완전히 비활성화합니다.
IP 주소 차단
특정 IP 주소에서 시작되는 모든 네트워크 연결을 차단하려면 다음 명령을 실행하고 강조된 IP 주소를 차단하려는 IP 주소로 바꿉니다:
OutputRule added
이 예에서 from 203.0.113.100
은 “203.0.113.100”의 출처 IP 주소를 지정합니다.
지금 sudo ufw status
를 실행하면 지정된 IP 주소가 거부되어 있는 것을 볼 수 있습니다:
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
지정된 IP 주소로 들어오는 모든 연결 또는 나가는 모든 연결이 차단됩니다.
서브넷 차단
전체 서브넷을 차단해야 하는 경우 예제 서브넷 주소를 from
매개변수로 사용하여 ufw deny
명령을 실행할 수 있습니다. 이는 예제 서브넷 203.0.113.0/24
의 모든 IP 주소를 차단할 것입니다:
OutputRule added
네트워크 인터페이스로 들어오는 연결 차단
특정 IP 주소에서 특정 네트워크 인터페이스로 들어오는 연결을 차단하려면 다음 명령을 실행하십시오. 강조된 IP 주소를 차단하려는 IP 주소로 바꿉니다:
OutputRule added
in
매개변수는 규칙을 ufw
에게 들어오는 연결에만 적용하도록 지시하고 on eth0
매개변수는 규칙을 eth0
인터페이스에만 적용하도록 지정합니다. 이것은 시스템에 여러 네트워크 인터페이스(가상 포함)가 있는 경우 외부 액세스를 일부 인터페이스에 차단해야 하는 경우에 유용할 수 있습니다.
IP 주소 허용
특정 IP 주소에서 시작하는 모든 네트워크 연결을 허용하려면 다음 명령을 실행하십시오. 강조된 IP 주소를 허용하려는 IP 주소로 바꿉니다:
OutputRule added
이제 sudo ufw status
를 실행하면 방금 추가한 IP 주소 옆에 ALLOW
단어가 표시되는 다음과 유사한 출력이 표시됩니다.
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
호스트에 대한 해당 서브넷 마스크를 제공하여 전체 하위네트워크에서 연결을 허용할 수도 있습니다. 203.0.113.0/24
와 같습니다.
네트워크 인터페이스로 들어오는 연결 허용
특정 IP 주소에서 특정 네트워크 인터페이스로의 수신 연결을 허용하려면 다음 명령을 실행하고 강조된 IP 주소를 허용하려는 IP 주소로 바꿉니다:
OutputRule added
in
매개변수는 규칙을 ufw
에게 오직 들어오는 연결에만 적용하도록 지시하고, on eth0
매개변수는 규칙이 eth0
인터페이스에만 적용되도록 지정합니다.
지금 sudo ufw status
를 실행하면 다음과 유사한 출력이 표시됩니다:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
UFW 규칙 삭제
이전에 UFW에서 설정한 규칙을 삭제하려면 ufw delete
를 사용한 다음 규칙(allow
또는 deny
)과 대상 사양을 지정합니다. 다음 예제는 이전에 IP 주소 203.0.113.101
에서 모든 연결을 허용하도록 설정한 규칙을 삭제합니다:
OutputRule deleted
삭제할 규칙을 지정하는 또 다른 방법은 규칙 ID를 제공하는 것입니다. 이 정보는 다음 명령을 사용하여 얻을 수 있습니다:
OutputStatus: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
출력에서 두 개의 활성 규칙이 있음을 확인할 수 있습니다. 강조된 값을 가진 첫 번째 규칙은 IP 주소 203.0.113.100
에서 오는 모든 연결을 거부합니다. 두 번째 규칙은 IP 주소 203.0.113.102
에서 들어오는 eth0
인터페이스의 연결을 허용합니다.
기본적으로 UFW는 명시적으로 허용되지 않는 한 모든 외부 액세스를 차단하므로 첫 번째 규칙은 중복되므로 제거할 수 있습니다. ID별로 규칙을 삭제하려면 다음을 실행하십시오:
작업을 확인하고 제거하려는 규칙이 올바른지 확인하려면 ID를 제공하십시오.
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
규칙을 다시 나열하려면 sudo ufw status
를 사용하여 제거된 규칙을 볼 수 있습니다.
사용 가능한 응용 프로그램 프로필 목록
설치시 네트워크 통신에 의존하는 응용 프로그램은 일반적으로 외부 주소로부터의 연결을 허용할 수 있는 UFW 프로필을 설정합니다. 이는 종종 ufw allow from
을 실행하는 것과 동일하며, 서비스가 사용하는 특정 포트 번호를 추상화하고 사용자 친화적인 명칭을 제공하여 서비스를 참조할 수 있도록 하는 장점이 있습니다.
현재 사용 가능한 프로필을 나열하려면 다음을 실행하십시오:
웹 서버 또는 다른 네트워크 종속 소프트웨어와 같은 서비스를 설치하고 UFW에서 프로필을 제공하지 않은 경우, 먼저 해당 서비스가 활성화되었는지 확인하십시오. 원격 서버의 경우 OpenSSH가 일반적으로 사용 가능합니다:
OutputAvailable applications:
OpenSSH
애플리케이션 프로필 활성화
UFW 애플리케이션 프로필을 활성화하려면 sudo ufw app list
명령을 사용하여 얻을 수 있는 활성화하려는 애플리케이션 프로필의 이름을 따라 ufw allow
를 실행하십시오. 다음 예제에서는 기본 SSH 포트에서 수신되는 모든 SSH 연결을 허용하는 OpenSSH 프로필을 활성화합니다.
OutputRule added
Rule added (v6)
다중 단어로 구성된 프로필 이름은 Nginx HTTPS
와 같이 따옴표로 묶어야 합니다.
애플리케이션 프로필 비활성화
UFW 내에서 이전에 설정한 애플리케이션 프로필을 비활성화하려면 해당 규칙을 제거해야 합니다. 예를 들어, sudo ufw status
에서 다음과 같은 출력을 고려해보십시오:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
이 출력은 현재 Nginx Full
애플리케이션 프로필이 활성화되어 있으며, HTTP 및 HTTPS를 통한 웹 서버로의 모든 연결을 허용함을 나타냅니다. 웹 서버로부터 HTTPS 요청만 허용하려면 이 경우 가장 제한적인 규칙인 Nginx HTTPS
를 먼저 활성화하고 현재 활성화된 Nginx Full
규칙을 비활성화해야 합니다:
기억하세요. sudo ufw app list
명령을 사용하여 사용 가능한 모든 애플리케이션 프로필을 나열할 수 있습니다.
SSH 허용
원격 서버를 다룰 때 SSH 포트가 연결에 열려 있어야 서버에 원격으로 로그인할 수 있습니다.
다음 명령은 OpenSSH UFW 애플리케이션 프로필을 활성화하고 서버의 기본 SSH 포트로의 모든 연결을 허용합니다:
OutputRule added
Rule added (v6)
사용자 친화적이지 않지만 대안 구문은 기본적으로 22
로 설정된 SSH 서비스의 정확한 포트 번호를 지정하는 것입니다:
OutputRule added
Rule added (v6)
특정 IP 주소 또는 서브넷에서 들어오는 SSH 허용
특정 IP 주소 또는 서브넷에서 들어오는 연결을 허용하려면 연결의 소스를 정의하는 from
지시문을 포함해야 합니다. 이를 위해서는 목적지 주소를 to
매개변수로 지정해야 합니다. 이 규칙을 SSH에만 제한하려면 proto
(프로토콜)를 tcp
로 제한한 다음 port
매개변수를 사용하여 기본 SSH 포트인 22
로 설정합니다.
다음 명령어는 IP 주소 203.0.113.103
에서 오는 SSH 연결만 허용합니다:
OutputRule added
네트워크 전체에서 오는 SSH 연결을 허용하려면 from
매개변수로 서브넷 주소를 사용할 수도 있습니다:
OutputRule added
특정 IP 주소 또는 서브넷에서 들어오는 Rsync 허용
Rsync 프로그램은 포트 873
에서 실행되며, 파일을 한 컴퓨터에서 다른 컴퓨터로 전송하는 데 사용될 수 있습니다.
특정 IP 주소 또는 서브넷에서 들어오는 rsync
연결을 허용하려면 from
매개변수를 사용하여 소스 IP 주소를 지정하고, 목적지 포트 873
를 설정하는 port
매개변수를 사용합니다.
다음 명령어는 IP 주소 203.0.113.103
에서 오는 Rsync 연결만 허용합니다:
OutputRule added
서버로 rsync
를 할 수 있도록 전체 203.0.113.0/24
서브넷을 허용하려면 다음을 실행하세요:
OutputRule added
Nginx HTTP / HTTPS 허용
설치 후 Nginx 웹 서버는 서버 내에서 몇 가지 다른 UFW 프로필을 설정합니다. Nginx를 설치하고 서비스로 활성화한 후 다음 명령을 실행하여 사용 가능한 프로필을 식별합니다:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
HTTP 및 HTTPS 트래픽을 모두 활성화하려면 Nginx Full
을 선택하십시오. 그렇지 않으면 오직 HTTP를 허용하려면 Nginx HTTP
를 선택하거나, 오직 HTTPS를 허용하려면 Nginx HTTPS
를 선택하십시오.
다음 명령은 서버에서 HTTP 및 HTTPS 트래픽을 모두 허용합니다(포트 80
및 443
):
OutputRule added
Rule added (v6)
Apache HTTP / HTTPS 허용
설치 후 Apache 웹 서버는 서버 내에서 몇 가지 다른 UFW 프로필을 설정합니다. Apache를 설치하고 서비스로 활성화한 후 다음 명령을 실행하여 사용 가능한 프로필을 식별합니다:
Output Apache
Apache Full
Apache Secure
HTTP 및 HTTPS 트래픽을 모두 활성화하려면 Apache Full
을 선택하십시오. 그렇지 않으면 HTTP의 경우 Apache
를 선택하거나, HTTPS의 경우 Apache Secure
를 선택하십시오.
다음 명령은 서버에서 HTTP 및 HTTPS 트래픽을 모두 허용합니다(포트 80
및 443
):
OutputRule added
Rule added (v6)
모든 수신 HTTP 허용(포트 80
)
웹 서버, 예를 들어 Apache와 Nginx는 일반적으로 HTTP 요청을 포트 80
에서 수신 대기합니다. 들어오는 트래픽의 기본 정책이 거부 또는 차단으로 설정되어 있다면, 포트 80
에서 외부 액세스를 허용하는 UFW 규칙을 생성해야 합니다. 이 명령에는 포트 번호 또는 서비스 이름(http
)을 매개변수로 사용할 수 있습니다.
모든 들어오는 HTTP(포트 80
) 연결을 허용하려면 다음을 실행하십시오:
OutputRule added
Rule added (v6)
HTTP 서비스의 포트 번호를 지정하는 대체 구문도 있습니다:
OutputRule added
Rule added (v6)
모든 들어오는 HTTPS(포트 443
) 연결 허용
HTTPS는 일반적으로 포트 443
에서 실행됩니다. 들어오는 트래픽의 기본 정책이 거부 또는 차단으로 설정되어 있다면, 포트 443
에서 외부 액세스를 허용하는 UFW 규칙을 생성해야 합니다. 이 명령에는 포트 번호 또는 서비스 이름(https
)을 매개변수로 사용할 수 있습니다.
모든 들어오는 HTTPS(포트 443
) 연결을 허용하려면 다음을 실행하십시오:
OutputRule added
Rule added (v6)
HTTPS 서비스의 포트 번호를 지정하는 대체 구문도 있습니다:
OutputRule added
Rule added (v6)
모든 들어오는 HTTP 및 HTTPS 허용
HTTP 및 HTTPS 트래픽을 모두 허용하려면 두 포트를 허용하는 단일 규칙을 생성할 수 있습니다. 이 사용법에는 이 경우에는 tcp
로 설정해야 하는 proto
매개변수로 프로토콜을 정의해야 합니다.
모든 HTTP 및 HTTPS(포트 80
및 443
) 연결을 허용하려면 다음을 실행하십시오:
OutputRule added
Rule added (v6)
특정 IP 주소 또는 서브넷에서 MySQL 연결 허용
MySQL은 클라이언트 연결을 포트 3306
에서 수신 대기합니다. MySQL 데이터베이스 서버가 원격 서버의 클라이언트에 의해 사용되는 경우 해당 액세스를 허용하려면 UFW 규칙을 생성해야 합니다.
특정 IP 주소 또는 서브넷에서 MySQL 연결을 허용하려면 소스 IP 주소를 지정하기 위해 from
매개변수를 사용하고 대상 포트 3306
을 설정하기 위해 port
매개변수를 사용하십시오.
다음 명령은 IP 주소 203.0.113.103
가 서버의 MySQL 포트에 연결할 수 있도록 허용합니다:
OutputRule added
전체 203.0.113.0/24
서브넷이 MySQL 서버에 연결할 수 있도록 허용하려면 다음을 실행하십시오:
OutputRule added
특정 IP 주소 또는 서브넷에서 PostgreSQL 연결 허용
PostgreSQL은 클라이언트 연결을 포트 5432
에서 수신합니다. 원격 서버의 클라이언트가 PostgreSQL 데이터베이스 서버를 사용하는 경우 해당 트래픽을 허용해야 합니다.
특정 IP 주소 또는 서브넷에서 들어오는 PostgreSQL 연결을 허용하려면 소스를 from
매개변수로 지정하고 포트를 5432
로 설정하세요:
OutputRule added
전체 203.0.113.0/24
서브넷이 PostgreSQL 서버에 연결할 수 있도록 허용하려면 다음을 실행하세요:
OutputRule added
나가는 SMTP 메일 차단
Sendmail 및 Postfix와 같은 메일 서버는 일반적으로 SMTP 트래픽에 포트 25
를 사용합니다. 서버가 나가는 메일을 보내면 안 되는 경우 해당 종류의 트래픽을 차단하려고 할 수 있습니다. 나가는 SMTP 연결을 차단하려면 다음을 실행하세요:
OutputRule added
Rule added (v6)
이 명령은 방화벽을 설정하여 포트 25
에서 나가는 모든 트래픽을 차단합니다. 다른 포트 번호에서 나가는 연결을 거부해야 하는 경우 이 명령을 반복하여 25
를 차단하려는 포트 번호로 바꿀 수 있습니다.
결론
UFW는 적절히 구성되었을 때 서버의 보안을 크게 향상시킬 수 있는 강력한 도구입니다. 이 참조 가이드는 Ubuntu에서 방화벽을 구성하는 데 자주 사용되는 일부 일반적인 UFW 규칙을 다룹니다.
이 안내서의 대부분 명령은 소스 IP 주소 및/또는 대상 포트와 같은 매개변수를 변경하여 다양한 사용 사례와 시나리오에 맞게 조정할 수 있습니다. 각 명령 매개변수와 사용 가능한 수정자에 대한 자세한 정보는 UFW 매뉴얼을 확인하기 위해 man
유틸리티를 사용할 수 있습니다:
Ubuntu 문서의 공식 UFW 페이지는 고급 사용 사례와 예제에 대한 참조 자료로 사용할 수 있는 또 다른 자원입니다.
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands