웹사이트 검색

Ubuntu 18.04에서 UFW로 방화벽을 설정하는 방법


소개

UFW(Uncomplicated Firewall)는 방화벽 구성 프로세스를 단순화하기 위한 iptables에 대한 인터페이스입니다. iptables는 견고하고 유연한 도구이지만 초보자가 이를 사용하여 방화벽을 적절하게 구성하는 방법을 배우는 것은 어려울 수 있습니다. 네트워크 보안을 시작하려고 하는데 어떤 도구를 사용해야 할지 잘 모르겠다면 UFW가 올바른 선택일 수 있습니다.

이 튜토리얼은 Ubuntu 18.04에서 UFW로 방화벽을 설정하는 방법을 보여줍니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자가 있는 Ubuntu 18.04 서버 1개. Ubuntu 18.04 자습서로 초기 서버 설정의 1~3단계에 따라 설정할 수 있습니다.

UFW는 Ubuntu에 기본적으로 설치됩니다. 어떤 이유로 제거된 경우 sudo apt install ufw로 설치할 수 있습니다.

1단계 - IPv6가 활성화되어 있는지 확인

최신 버전의 Ubuntu에서는 IPv6이 기본적으로 활성화되어 있습니다. 실제로 이것은 서버에 추가된 대부분의 방화벽 규칙이 IPv4 및 IPv6 버전을 모두 포함한다는 것을 의미하며 후자는 UFW의 상태 명령 출력 내에서 v6로 식별됩니다. IPv6이 활성화되었는지 확인하려면 /etc/default/ufw에서 UFW 구성 파일을 확인할 수 있습니다. nano 또는 자주 사용하는 명령줄 편집기를 사용하여 이 파일을 엽니다.

  1. sudo nano /etc/default/ufw

그런 다음 IPV6 값이 yes로 설정되어 있는지 확인합니다. 다음과 같아야 합니다.

IPV6=yes

파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X를 입력한 다음 YENTER를 입력하면 됩니다. 확인하다.

이 가이드의 이후 단계에서 UFW를 활성화하면 IPv4 및 IPv6 방화벽 규칙을 모두 작성하도록 구성됩니다.

2단계 - 기본 정책 설정

UFW를 이제 막 시작했다면 좋은 첫 번째 단계는 기본 방화벽 정책을 확인하는 것입니다. 이러한 규칙은 다른 규칙과 명시적으로 일치하지 않는 트래픽을 처리하는 방법을 제어합니다.

기본적으로 UFW는 모든 수신 연결을 거부하고 모든 발신 연결을 허용하도록 설정됩니다. 즉, 서버에 도달하려는 사람은 연결할 수 없지만 서버 내의 모든 응용 프로그램은 외부 세계에 도달할 수 있습니다. 특정 서비스 및 포트를 허용하는 추가 규칙은 이 일반 정책에 대한 예외로 포함됩니다.

이 튜토리얼의 나머지 부분을 따라할 수 있도록 이제 들어오고 나가는 트래픽에 대한 UFW 기본 정책을 설정합니다.

기본 UFW 수신 정책을 거부로 설정하려면 다음을 실행하십시오.

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

기본 UFW 발신 정책을 허용으로 설정하려면 다음을 실행합니다.

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

이러한 명령은 들어오는 연결을 거부하고 나가는 연결을 허용하도록 기본값을 설정합니다. 개인용 컴퓨터에는 이러한 방화벽 기본값만으로도 충분할 수 있지만 일반적으로 서버는 외부 사용자로부터 들어오는 요청에 응답해야 합니다. 다음에 살펴볼 것입니다.

3단계 - SSH 연결 허용

지금 UFW 방화벽을 활성화하면 들어오는 모든 연결이 거부됩니다. 즉, 서버가 이러한 유형의 요청에 응답하도록 하려면 합법적인 수신 연결(예: SSH 또는 HTTP 연결)을 명시적으로 허용하는 규칙을 만들어야 합니다. 클라우드 서버를 사용하는 경우 서버에 연결하고 서버를 관리할 수 있도록 들어오는 SSH 연결을 허용하고 싶을 것입니다.

OpenSSH UFW 애플리케이션 프로필 허용

설치 시 네트워크 연결에 의존하는 대부분의 응용 프로그램은 UFW 내에 응용 프로그램 프로필을 등록하여 사용자가 서비스에 대한 외부 액세스를 신속하게 허용하거나 거부할 수 있습니다. 다음을 사용하여 현재 UFW에 등록된 프로필을 확인할 수 있습니다.

  1. sudo ufw app list
Output
Available applications: OpenSSH

OpenSSH 애플리케이션 프로필을 활성화하려면 다음을 실행합니다.

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

그러면 SSH 데몬이 기본적으로 수신 대기하는 포트인 포트 22에서 모든 연결을 허용하는 방화벽 규칙이 생성됩니다.

서비스 이름으로 SSH 허용

들어오는 SSH 연결을 허용하도록 UFW를 구성하는 또 다른 방법은 해당 서비스 이름: ssh를 참조하는 것입니다.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW는 /etc/services 파일을 기반으로 서비스가 사용하는 포트와 프로토콜을 알고 있습니다.

포트 번호로 SSH 허용

또는 애플리케이션 프로필이나 서비스 이름 대신 포트를 지정하여 동등한 규칙을 작성할 수 있습니다. 예를 들어 이 명령은 이전 예제와 동일하게 작동합니다.

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

다른 포트를 사용하도록 SSH 데몬을 구성한 경우 적절한 포트를 지정해야 합니다. 예를 들어 SSH 서버가 포트 2222에서 수신 대기 중인 경우 이 명령을 사용하여 해당 포트에서 연결을 허용할 수 있습니다.

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

들어오는 SSH 연결을 허용하도록 방화벽이 구성되었으므로 이제 방화벽을 활성화할 수 있습니다.

4단계 - UFW 활성화

이제 SSH 연결을 허용하도록 방화벽을 구성해야 합니다. 방화벽이 비활성화된 경우에도 지금까지 추가된 규칙을 확인하려면 다음을 사용할 수 있습니다.

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

들어오는 SSH 연결을 허용하는 규칙이 있는지 확인한 후 다음을 사용하여 방화벽을 활성화할 수 있습니다.

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

명령이 기존 SSH 연결을 방해할 수 있다는 경고가 표시됩니다. SSH 연결을 허용하는 방화벽 규칙을 이미 설정했으므로 계속해도 괜찮습니다. 프롬프트에 y로 응답하고 ENTER를 누르십시오.

이제 방화벽이 활성화되었습니다. sudo ufw status verbose 명령을 실행하여 설정된 규칙을 확인합니다. 이 튜토리얼의 나머지 부분에서는 다른 종류의 연결을 허용하거나 거부하는 것과 같이 UFW를 더 자세히 사용하는 방법을 다룹니다.

5단계 - 다른 연결 허용

이 시점에서 서버가 응답해야 하는 다른 모든 연결을 허용해야 합니다. 허용해야 하는 연결은 특정 요구 사항에 따라 다릅니다. 애플리케이션 프로필, 서비스 이름 또는 포트를 기반으로 연결을 허용하는 규칙을 작성하는 방법을 이미 알고 있습니다. 포트 22에서 SSH에 대해 이미 이 작업을 수행했습니다. 다음을 위해 이 작업을 수행할 수도 있습니다.

  • sudo ufw allow http 또는 sudo ufw allow 80
  • 을 사용하여 암호화되지 않은 웹 서버가 사용하는 포트 80의 HTTP\n
  • sudo ufw allow https 또는 sudo ufw allow 443을 사용하여 암호화된 웹 서버가 사용하는 포트 443의 HTTPS
  • sudo ufw allow 'Apache Full'을 사용하여 HTTP와 HTTPS를 모두 사용하는 Apache
  • sudo ufw allow 'Nginx Full'을 사용하여 HTTP와 HTTPS를 모두 사용하는 Nginx

sudo ufw app list를 사용하여 서버에서 사용할 수 있는 애플리케이션 프로필을 확인하는 것을 잊지 마십시오.

포트 또는 알려진 서비스 이름을 지정하는 것 외에도 연결을 허용하는 몇 가지 다른 방법이 있습니다. 다음에 이들 중 일부를 보게 될 것입니다.

특정 포트 범위

UFW로 포트 범위를 지정할 수 있습니다. 일부 응용 프로그램은 단일 포트 대신 여러 포트를 사용합니다.

예를 들어 포트 6000-6007을 사용하는 X11 연결을 허용하려면 다음 명령을 사용합니다.

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

UFW로 포트 범위를 지정할 때 규칙을 적용해야 하는 프로토콜(tcp 또는 udp)을 지정해야 합니다. 프로토콜을 지정하지 않으면 자동으로 두 프로토콜이 모두 허용되기 때문에 이전에 언급하지 않았습니다. 대부분의 경우 괜찮습니다.

특정 IP 주소

UFW로 작업할 때 규칙 내에서 IP 주소를 지정할 수도 있습니다. 예를 들어 회사 또는 집 IP 주소 203.0.113.4와 같은 특정 IP 주소로부터의 연결을 허용하려면 from 매개변수를 사용해야 합니다. 허용하려는 IP 주소를 제공합니다.

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

to any port 뒤에 포트 번호를 추가하여 IP 주소가 연결할 수 있는 포트를 지정할 수도 있습니다. 예를 들어 203.0.113.4가 포트 22(SSH)에 연결하도록 허용하려면 다음 명령을 사용하십시오.

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

서브넷

IP 주소의 서브넷을 허용하려면 CIDR 표기법을 사용하여 넷마스크를 지정할 수 있습니다. 예를 들어 203.0.113.1에서 203.0.113.254까지의 모든 IP 주소를 허용하려면 다음 명령을 사용할 수 있습니다.

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

마찬가지로 서브넷 203.0.113.0/24가 연결할 수 있는 대상 포트를 지정할 수도 있습니다. 다시 한 번 예시로 포트 22(SSH)를 사용합니다.

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

특정 네트워크 인터페이스에 대한 연결

특정 네트워크 인터페이스에만 적용되는 방화벽 규칙을 생성하려면 "allow in on\ 뒤에 네트워크 인터페이스 이름을 지정하면 됩니다.

계속하기 전에 네트워크 인터페이스를 조회할 수 있습니다. 이렇게 하려면 다음 명령을 사용합니다.

  1. ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

강조 표시된 출력은 네트워크 인터페이스 이름을 나타냅니다. 일반적으로 eth0 또는 enp3s2와 같은 이름이 지정됩니다.

따라서 서버에 eth0이라는 공용 네트워크 인터페이스가 있는 경우 다음 명령을 사용하여 HTTP 트래픽(포트 80)을 허용할 수 있습니다.

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

이렇게 하면 서버가 공용 인터넷에서 HTTP 요청을 수신할 수 있습니다.

또는 예를 들어 MySQL 데이터베이스 서버(포트 3306)가 개인 네트워크 인터페이스 eth1에서 연결을 수신하도록 하려면 다음 명령을 사용할 수 있습니다.

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

이렇게 하면 개인 네트워크의 다른 서버가 MySQL 데이터베이스에 연결할 수 있습니다.

6단계 - 연결 거부

수신 연결에 대한 기본 정책을 변경하지 않은 경우 UFW는 모든 수신 연결을 거부하도록 구성됩니다. 일반적으로 이렇게 하면 특정 포트와 IP 주소를 명시적으로 허용하는 규칙을 생성해야 하므로 보안 방화벽 정책을 생성하는 프로세스가 간소화됩니다.

그러나 때로는 서버가 공격을 받고 있다는 것을 알고 있기 때문에 소스 IP 주소 또는 서브넷을 기반으로 특정 연결을 거부하려는 경우가 있습니다. 또한 기본 수신 정책을 허용(권장하지 않음)으로 변경하려면 연결을 허용하지 않으려는 서비스 또는 IP 주소에 대한 거부 규칙을 만들어야 합니다.

거부 규칙을 작성하려면 이전에 설명한 명령을 사용하여 허용을 거부로 바꿀 수 있습니다.

예를 들어 HTTP 연결을 거부하려면 다음 명령을 사용할 수 있습니다.

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

또는 203.0.113.4의 모든 연결을 거부하려면 다음 명령을 사용할 수 있습니다.

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

경우에 따라 서버에서 나가는 연결을 차단할 수도 있습니다. 모든 사용자가 SMTP 트래픽용 포트 25와 같은 서버의 포트 사용을 거부하려면 deny out 뒤에 포트 번호를 사용할 수 있습니다.

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

이렇게 하면 서버에서 나가는 모든 SMTP 트래픽이 차단됩니다.

7단계 - 규칙 삭제

방화벽 규칙을 삭제하는 방법을 아는 것은 규칙을 만드는 방법을 아는 것만큼 중요합니다. 삭제할 규칙을 지정하는 두 가지 방법이 있습니다. 규칙 번호 또는 사람이 읽을 수 있는 명칭(규칙이 생성될 때 지정된 방법과 유사).

숫자로 UFW 규칙 삭제

번호로 UFW 규칙을 삭제하려면 먼저 모든 방화벽 규칙의 번호가 매겨진 목록을 얻고 싶을 것입니다. UFW 상태 명령에는 다음과 같이 각 규칙 옆에 숫자를 표시하는 옵션이 있습니다.

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

포트 80(HTTP) 연결을 허용하는 규칙 번호 2를 삭제하기로 결정한 경우 다음과 같이 UFW 삭제 명령에서 지정할 수 있습니다.

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

이렇게 하면 확인 메시지가 표시되고 HTTP 연결을 허용하는 규칙 2를 삭제합니다. IPv6을 활성화한 경우 해당 IPv6 규칙도 삭제해야 합니다.

이름으로 UFW 규칙 삭제

규칙 번호를 사용하는 대신 규칙 유형(일반적으로 allow 또는 deny) 및 서비스를 기반으로 하는 사람이 읽을 수 있는 명칭으로 규칙을 참조할 수도 있습니다. 이 규칙의 대상이었던 이름 또는 포트 번호 또는 사용된 경우 애플리케이션 프로필 이름입니다. 예를 들어 이전에 활성화된 Apache Full이라는 애플리케이션 프로필에 대한 허용 규칙을 삭제하려는 경우 다음을 사용할 수 있습니다.

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

delete 명령은 이름이나 포트로 서비스를 참조하여 생성된 규칙에 대해 동일한 방식으로 작동합니다. 예를 들어 이전에 sudo ufw allow http를 사용하여 HTTP 연결을 허용하도록 규칙을 설정한 경우 해당 규칙을 삭제할 수 있는 방법은 다음과 같습니다.

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

규칙을 지정할 때 서비스 이름을 포트 번호와 상호 교환할 수 있으므로 allow http 대신 allow 80과 같은 규칙을 참조할 수도 있습니다.

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

이름으로 UFW 규칙을 삭제할 때 IPv4 및 IPv6 규칙이 있으면 모두 삭제됩니다.

8단계 - UFW 상태 및 규칙 확인

언제든지 다음 명령으로 UFW의 상태를 확인할 수 있습니다.

  1. sudo ufw status verbose

기본적으로 UFW가 비활성화되어 있으면 다음과 같은 내용이 표시됩니다.

Output
Status: inactive

UFW가 활성화된 경우(3단계를 따랐다면 활성화되어야 함) 출력에 활성화되었다고 표시되고 설정된 모든 규칙이 나열됩니다. 예를 들어 방화벽이 어디서나 SSH(포트 22) 연결을 허용하도록 설정된 경우 출력은 다음과 같을 수 있습니다.

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

UFW가 방화벽을 어떻게 구성했는지 확인하려면 status 명령을 사용하십시오.

9단계 - UFW 비활성화 또는 재설정(선택 사항)

UFW를 사용하지 않으려면 다음 명령으로 비활성화할 수 있습니다.

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

UFW로 만든 모든 규칙은 더 이상 활성화되지 않습니다. 나중에 활성화해야 하는 경우 언제든지 sudo ufw enable을 실행할 수 있습니다.

UFW 규칙이 이미 구성되어 있지만 다시 시작하기로 결정한 경우 재설정 명령을 사용할 수 있습니다.

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

이렇게 하면 UFW가 비활성화되고 이전에 정의된 모든 규칙이 삭제됩니다. 이를 통해 UFW를 새롭게 시작할 수 있습니다. 기본 정책은 언제든지 수정하더라도 원래 설정으로 변경되지 않습니다.

결론

이제 방화벽이 (적어도) SSH 연결을 허용하도록 구성되었습니다. 불필요한 연결을 제한하면서 서버에 필요한 다른 모든 수신 연결을 허용해야 서버가 제대로 작동하고 안전합니다.

보다 일반적인 UFW 구성에 대해 알아보려면 UFW Essentials: Common Firewall Rules and Commands 튜토리얼을 확인하십시오.