Ubuntu에 UFW를 사용하여 방화벽 설정하는 方法

소개

UFW(Uncomplicated Firewall)는 iptables에 대한 인터페이스로, 防火墙 구성 프로세스를 简素화하기 위해 설계되었습니다. iptables는 견고하고 靈活性 있는 도구입니다만, 이를 正しく 防火墙 구성하는 것을 初学者에게 어려울 수 있습니다. 네트워크를 보호하기 시작하려고 하고, 어떤 도구를 사용해야 할지 모르고 있다면, UFW가 阁下의 的材料일 수 있습니다.

이 튜토리얼은 Ubuntu v18.04 이상에서 UFW를 사용하여 防火墙을 설정하는 방법을 阁下에게 보여드릴 것입니다.

사전 요구사항

Ubuntu 16.04 이하의 버전을 사용하고 있다면, 이러한 버전은 더 나중의 버전으로 업그레이드하는 것을 추천합니다. Ubuntu는 이러한 버전에 대한 지원을 더 이상 제공하지 않습니다. 이 가이드 コレク션은 阁下의 Ubuntu 버전을 업그레이드하는 것에 도움이 됩니다.

이 튜토리얼을 따라하기 위해서는 다음과 같은 것이 필요합니다:

UFW를 사용하여 Ubuntu 防火墙 设置

  1. IPv6 활성화
  2. 기본 정책 设置
  3. SSH 연결 허용
  4. UFW 활성화
  5. 필요한 다른 모든 연결 허용
  6. 연결 거부
  7. 방화벽 규칙 삭제
  8. UFW 상태 및 규칙 확인
  9. Ubuntu에서 방화벽 비활성화 또는 재설정 방법

Step 1 — IPv6 활성화 확인

Ubuntu의 최신 버전에서, IPv6는 기본적으로 활성화되어 있습니다. 실제적으로 这意味着 서버에 추가 된 대부분의 방화벽 규칙은 IPv4와 IPv6 버전을 모두 包含하고 있고, 后者는 UFW 상태 명령어의 출력에서 v6로 식별되어 있습니다. IPv6를 활성화 했는지 확인하기 위해, /etc/default/ufw에 있는 UFW 구성 파일을 확인할 수 있습니다. nano나 お気に入りの 명령어 行 에디터를 사용하여 이 파일을 오픈하십시오:

  1. sudo nano /etc/default/ufw

그러나 IPV6의 값이 yes로 설정되었는지 확인하십시오. 다음과 같은 것으로 보입니다:

/etc/default/ufw excerpt
  1. IPV6=yes

이 파일을 저장하고 닫으십시오. nano를 사용하고 있으면, 그렇게 하는 것을 CTRL+X를 입력하고 YENTER를 입력하여 확인하십시오.

이 가이드의 나중 단계에서 UFW를 활성화할 때, IPv4와 IPv6 방화벽 규칙을 모두 기록하도록 configured wird.

Step 2 — 기본 정책 설정

UFW를 처음 사용하는 경우, 기본적인 방화벽 정책을 확인하는 것이 좋은 첫 단계입니다. 이러한 규칙은 다른 규칙과 일치하지 않는 트래픽을 처리하는 방법을 지정합니다.

default로 UFW는 모든 들어오는 연결을 거부하고, 모든 나가는 연결을 허용합니다. 这意味着 贵 Server에 접속하려는 任何人이 연결할 수 없지만, 서버 내의 모든 응용 프로그램은 外界을 reachedable하게 합니다. 특정 서비스와 포트를 허용하기 위한 추가 룩스가 이 일반 정책에 예외로 포함되어 있습니다.

이 튜토리얼의 나머지를 따라가기 위해서, 이제 UFW의 기본 정책을 설정하ます.

기본 UFW 들어오는 정책을 deny로 설정하기 위해서는 다음을 실행하십시오.

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

기본 UFW 나가는 정책을 allow로 설정하기 위해서는 다음을 실행하십시오.

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

이러한 명령은 기본으로 들어오는 연결을 거부하고 나가는 연결을 허용하는 것을 정의합니다. 이러한 방화벽 기본값들은 개인 컴퓨터에서 충분히 적용되는 수준입니다만, 서버는 外界 사용자から 들어오는 요청에 응답해야 합니다. 그것에 대해 다음에 보겠습니다.

STEP 3 — SSH 연결 허용

이제 UFW 방화벽을 启用하면, 모든 들어오는 연결을 거부하게 됩니다. 这意味着 이러한 방화벽을 사용하면, 合法权益의 들어오는 연결(例如 SSH 또는 HTTP 연결)을 밟을 수 있는 룩스를 만들어야 합니다. облачных 서버를 사용하고 있으면, 서버에 접속하고 관리하기 위해 들어오는 SSH 연결을 허용할 것입니다.

OpenSSH UFW 응용 프로필 허용

인스톨레이션 시 대부분의 네트워크 연결에 依存하는 응용 프로그램은 UFW 내에 응용 프로필을 등록하여 사용자가 서비스에 대한 외부 접근을 빠르게 허용하거나 거부할 수 있게 해줍니다. UFW에 현재 등록된 프로필을 확인하는 것은 다음과 같습니다.

  1. sudo ufw app list
Output
Available applications: OpenSSH

OpenSSH 응용 프로fil을 사용하기 위해서는 다음을 실행하십시오.

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

이렇게 하면, SSH 데몬이 기본적으로 监听하는 포트 22에 대한 모든 연결을 허용하는 防火墙 규칙을 생성합니다.

서비스 이름을 통한 SSH 허용

UFW를 통해 들어오는 SSH 연결을 허용하는 다른 방법은 서비스 이름 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 — 다른 연결 허용

이 지점에서, 서버가 응답하기 위해 필요한 다른 연결을 허용해야 합니다. 허용해야 하는 연결은 您的 specific needs에 따라 달라집니다. 어떻게 규칙을 写得 하는지, 어떤 Application profile, 서비스 이름, 或者 포트에 따라 연결을 허용하는지 이미 知っています. 이는 SSH 포트 22에 대한 것입니다. 다음과 같이 하시면 됩니다:

  • HTTP를 사용하는 암호화되지 않은 Web server의 포트 80에 대한 허용, sudo ufw allow http 或者 sudo ufw allow 80을(를) 사용하세요
  • HTTPS를 사용하는 암호화된 Web server의 포트 443에 대한 허용, sudo ufw allow https 或者 sudo ufw allow 443을(를) 사용하세요
  • Apache를 HTTP 以及 HTTPS로 사용하는 것에 대한 허용, sudo ufw allow ‘Apache Full’을(를) 사용하세요
  • Nginx를 HTTP 以及 HTTPS로 사용하는 것에 대한 허용, sudo ufw allow ‘Nginx Full’을(를) 사용하세요

‘sudo ufw app list’을(를) 사용하여 어느 Application profiles가 이 server에 대해 사용 가능한지 확인하세요.

포트 또는 알려진 Service name에 따라 연결을 허용하는 것 이외에도 다양한 방법들이 있습니다. 이러한 방법들 중 一些을 다음에 見所学합니다.

特定の 포트 범위

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

예를 들어, X11 연결을 허용하려면, 포트 60006007를 사용하는 것을 허용하기 위해 다음 명령어를 사용하십시오:

  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

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

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

서브넷

CIDR 표기法을 사용하여 네트워크 마스크를 지정하여 IP 주소 하위 넷을 허용할 수 있습니다. 例如, 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 . . .

주요 출력은 네트워크 인터페이스 이름을 나타냅니다. 일반적으로 eth0enp3s2과 같은 이름이 붙습니다.

따라서, 서버가 공개 네트워크 인터페이스를 eth0로 가지고 있다면, 이 명령어를 사용하여 HTTP 통신(포트 80)을 허용할 수 있습니다:

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

이렇게 하면 您的服务器이 公网InternetからHTTP 요청을 받을 수 있게 합니다.

Or, 您的 MySQL 데이터베이스 서버 (포트 3306)가 私有 네트워크 인터페이스 eth1에 연결을 기다리는 것을 想要하면, 이 명령을 사용할 수 있습니다.

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

이렇게 하면, 您的 私有 네트워크 上的 다른 서버들이 MySQL 데이터베이스에 연결할 수 있게 하는 것입니다.

단계 6 — 연결 거부

연결이 들어오는 기본 정책을 변경한 적이 없다면, UFW는 모든 들어오는 연결을 거부하도록 configured 되어 있습니다. 일반적으로, 이렇게 하면 보안한 防火墙 정책을 만들기를 简화하기 때문입니다. 특정 포트 또는 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

이렇게 하면 확인을 요청한 후 규칙 2를 삭제하여 HTTP 연결을 허용하는 규칙이 사라집니다. IPv6를 사용 중이라면, 해당 IPv6 규칙도 함께 삭제해야 합니다.

UFW 규칙 이름으로 삭제

규칙 번호를 사용하지 않고, 사람이 읽을 수 있는 이름을 통해 규칙을 참조할 수 있습니다. 이 이름은 규칙의 종류(일반적으로 allow 또는 deny)와 이 규칙의 대상이 되었던 서비스 이름 또는 포트 번호, 또는 사용한 경우의 应用程序 프로FILE 이름입니다. 예를 들어, 이전에 활성화 되었던 Apache Full 이라는 应用程序 PROFILE에 대한 allow 규칙을 삭제하려면 다음과 같이 사용할 수 있습니다:

  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 80而不是allow httpと同じ 규칙을 참조할 수 있습니다:

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

UFW 규칙을 이름으로 삭제하는 것은, IPv4와 IPv6 규칙이 존재하면 그들 모두를 삭제합니다.

단계 8 — UFW 상태와 규칙 확인

任何时候, 您可以使用此命令来检查UFW的状态:

  1. sudo ufw status verbose

다음과 같이 결과를 보여주세요:

Output
Status: inactive

UFW는 디FAULT로 끔끔하므로, 다음과 같은 것을 보여주면 됩니다:

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가 활성화되어있으면, 아래와 같이 출력될 것입니다: 활성화되어있습니다 및 설정된 규칙들을 나타냅니다. 예를 들어, 來自任何地方的SSH(端口22)连接被允许, 输出可能如下所示:

Use the status command if you want to check how UFW has configured the firewall.

Step 9 – Disable or Reset Firewall

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

If you decide not to use the UFW firewall, you can deactivate it with this command:

Any rules that you created with UFW will no longer be active. You can always run sudo ufw enable if you need to activate it later.

  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'

If you already have UFW rules configured but you decide that you want to start over, you can use the reset command:

This will disable UFW and delete any rules that were previously defined. This should give you a fresh start with UFW. Keep in mind that the default policies won’t change to their original settings, if you modified them at any point.Deploy your frontend applications from GitHub using DigitalOcean App Platform. Let DigitalOcean focus on scaling your app.

결론

이제 방화벽이 SSH 연결을 허용하도록 구성되었습니다. 서버가 필요로 하는 다른 들어오는 연결도 허용하면서, 불필요한 연결을 제한하여 서버가 기능적이고 안전하게 유지되도록 주의하세요.

UFW의 일반 구성에 대해 더 알아보려면, UFW Esentials: Common Firewall Rules and Commands 자습서를 확인하세요.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04