소개
UFW 또는 Uncomplicated Firewall은 iptables
및 nftables
과 같은 하위 수준의 데이터 패킷 필터링 기술의 복잡성을 숨기는 단순화된 방화벽 관리 인터페이스입니다. 네트워크를 보호하려는데 사용할 도구를 모르는 경우 UFW가 적절한 선택일 수 있습니다.
이 자습서에서는 Debian 11에서 UFW를 사용하여 방화벽을 설정하는 방법을 안내합니다.
전제 조건
이 자습서를 따르려면 sudo
비루트 사용자가 있는 Debian 11 서버가 필요합니다. 이는 1단계에서 3단계까지 따라 설정할 수 있습니다 Debian 11 초기 서버 설정 자습서에서 안내된대로입니다.
1단계 – UFW 설치
Debian은 기본적으로 UFW를 설치하지 않습니다. 전체 초기 서버 설정 튜토리얼을 따르셨다면 UFW를 설치하고 활성화했을 것입니다. 그렇지 않은 경우에는 apt
을 사용하여 지금 설치하십시오:
- sudo apt install ufw
다음 단계에서 UFW를 설정하고 활성화할 것입니다.
단계 2 — UFW와 IPv6 사용 (선택 사항)
이 튜토리얼은 IPv4를 기반으로 작성되었지만 IPv6를 사용하도록 설정하면 IPv6에 대해서도 작동합니다. Debian 서버가 IPv6를 사용하도록 설정되어 있다면 UFW가 IPv4뿐만 아니라 IPv6에 대한 방화벽 규칙을 관리하도록 구성해야 합니다. 이를 위해 UFW 구성 파일 /etc/default/ufw
을 nano
또는 선호하는 편집기로 엽니다:
- sudo nano /etc/default/ufw
파일에서 IPV6
을 찾아 값이 yes
인지 확인합니다:
IPV6=yes
파일을 저장하고 닫습니다. nano
를 사용하는 경우 CTRL+X
, 그런 다음 Y
, 그리고 ENTER
를 눌러 파일을 저장하고 종료합니다.
이제 UFW가 활성화되면 IPv4와 IPv6 방화벽 규칙을 모두 작성하도록 구성됩니다. 그러나 UFW를 활성화하기 전에 방화벽이 SSH를 통한 연결을 허용하도록 구성되어 있는지 확인해야 합니다. 기본 정책 설정부터 시작하세요.
단계 3 — 기본 정책 설정
방화벽을 처음 설정하는 경우, 정의해야 할 첫 번째 규칙은 기본 정책입니다. 이러한 규칙은 명시적으로 다른 규칙과 일치하지 않는 트래픽을 처리합니다. 기본적으로 UFW는 모든 들어오는 연결을 거부하고 모든 나가는 연결을 허용하도록 설정되어 있습니다. 이는 누구든지 서버에 연결을 시도하려고 하면 연결할 수 없지만 서버 내의 응용 프로그램은 외부 세계에 연결할 수 있다는 것을 의미합니다.
이 튜토리얼을 따라갈 수 있도록 UFW 규칙을 기본값으로 설정하세요. UFW에서 사용하는 기본값을 설정하려면 다음 명령을 사용하십시오:
- sudo ufw default deny incoming
- sudo ufw default allow outgoing
다음과 같은 출력을 받게 됩니다:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
이 명령은 기본값을 들어오는 연결 거부 및 나가는 연결 허용으로 설정합니다. 이 방화벽 기본값만으로는 개인 컴퓨터에 충분할 수 있지만, 서버는 일반적으로 외부 사용자의 들어오는 요청에 응답해야 합니다. 다음 단계에서 이 과정을 시작하겠습니다.
단계 4 — SSH 연결 허용
당신은 아직 UFW 방화벽을 활성화할 수 없습니다. 왜냐하면 이렇게 하면 서버에 대한 모든 들어오는 연결, 즉 서버에 액세스하려는 시도를 포함하여 차단될 것입니다. 이는 서버가 해당 유형의 요청에 응답하려면 명시적으로 허용되는 규칙을 생성해야 함을 의미합니다. 예를 들어 SSH 또는 HTTP 연결과 같은 합법적인 들어오는 연결을 명시적으로 허용하려면 규칙을 만들어야 할 것입니다.
서버가 클라우드 서버를 사용하는 경우 아마도 SSH 연결을 허용하여 서버에 연결하고 관리할 수 있도록하려고 할 것입니다. 이를 위해 다음 명령을 사용하여 서버를 SSH 연결을 허용하도록 구성하십시오:
- sudo ufw allow ssh
이 명령은 기본적으로 SSH 데몬이 수신 대기하는 포트인 22
의 모든 연결을 허용하는 방화벽 규칙을 생성합니다. UFW는 /etc/services
파일에서 서비스로 나열되어 있기 때문에 allow ssh
가 무슨 포트에 바인딩되어 있는지 알고 있습니다.
그러나 서비스 이름 대신 포트를 지정하여 동등한 규칙을 작성할 수 있습니다. 예를 들어, 다음 명령은 위의 명령과 동일한 결과를 생성합니다:
- sudo ufw allow 22
SSH 데몬을 다른 포트를 사용하도록 구성한 경우 해당 포트를 지정해야 합니다. 예를 들어 SSH 서버가 포트 2222
에서 수신 대기하고 있는 경우이 명령을 사용할 수 있지만 22
를 2222
로 대체해야 합니다.
이제 방화벽이 들어오는 SSH 연결을 허용하도록 구성되었으므로 이를 활성화할 수 있습니다.
단계 5 — UFW 활성화
UFW를 활성화하려면 다음 명령을 사용하십시오:
- sudo ufw enable
경고 메시지를 받게 될 것입니다. 명령이 기존의 SSH 연결을 방해할 수 있다고 경고합니다. 이미 SSH 연결을 허용하는 방화벽 규칙을 설정했으므로 계속 진행해도 괜찮습니다. 프롬프트에 y
를 입력하고 ENTER
를 누르세요.
방화벽이 이제 활성화되었습니다. 설정한 규칙을 확인하려면 다음 명령을 실행하십시오:
- sudo ufw status verbose
이 튜토리얼의 나머지 부분은 UFW를 더 자세히 사용하는 방법에 대해 다룹니다. 이는 다양한 유형의 연결을 허용하거나 거부하는 방법을 포함합니다.
단계 6 — 다른 연결 허용
이 시점에서 서버가 제대로 작동하기 위해 필요한 다른 모든 연결을 허용해야 합니다. 허용해야 할 연결은 특정한 요구사항에 따라 달라집니다. 서비스 이름이나 포트를 기반으로 연결을 허용하는 규칙을 작성하는 방법은 이미 알고 있습니다. SSH에 대해 포트 22
를 기반으로 이를 수행했습니다.
이와 유사하게, 암호화되지 않은 웹 서버가 사용하는 HTTP에 대해 포트 80
을 사용할 수 있습니다. 이 유형의 트래픽을 허용하려면 다음을 입력하면 됩니다:
- sudo ufw allow http
또한, 암호화된 웹 서버가 사용하는 HTTPS에 대해 포트 443
을 사용할 수도 있습니다. 이 유형의 트래픽을 허용하려면 다음을 입력하면 됩니다:
- sudo ufw allow https
두 경우 모두 포트를 지정하여도 작동하며, HTTP의 경우 80
이고 HTTPS의 경우 443
입니다. 예를 들어:
- sudo ufw allow 80
포트나 알려진 서비스를 지정하는 것 외에도 연결을 허용하는 다른 방법이 있습니다. 이에 대해 다음에 설명하겠습니다.
특정 포트 범위
UFW에서 포트 범위를 지정할 수 있습니다. 예를 들어, 일부 응용 프로그램은 단일 포트 대신 여러 포트를 사용합니다.
예를 들어, 포트 6000
에서 6007
까지 사용하는 X11
연결을 허용하려면 다음 명령을 사용하십시오:
- sudo ufw allow 6000:6007/tcp
- sudo ufw allow 6000:6007/udp
UFW로 포트 범위를 지정할 때, 규칙이 적용되어야 하는 프로토콜 (tcp
또는 udp
)을 지정해야 합니다. 이전에 언급되지 않은 이유는 프로토콜을 지정하지 않으면 자동으로 두 프로토콜 모두를 허용하기 때문입니다. 이는 대부분의 경우에는 괜찮습니다.
특정 IP 주소
UFW 작업 시 IP 주소도 지정할 수 있습니다. 예를 들어, 특정 IP 주소에서의 연결을 허용하려면 작업 또는 집 IP 주소인 203.0.113.4
와 같이 from
을 지정해야 합니다:
- sudo ufw allow from 203.0.113.4
또한 특정 포트를 IP 주소가 연결할 수 있도록 지정할 수도 있습니다. 이는 포트 번호 뒤에 to any port
를 추가하여 수행합니다. 예를 들어, 203.0.113.4
가 포트 22
(SSH)에 연결하도록 허용하려면 다음 명령을 사용하십시오:
- sudo ufw allow from 203.0.113.4 to any port 22
하위네트워크
만약 IP 주소의 하위네트워크를 허용하려면 CIDR 표기법을 사용하여 넷마스크를 지정할 수 있습니다. 예를 들어, 203.0.113.1
에서 203.0.113.254
로 지정된 모든 IP 주소를 허용하려면 다음 명령을 사용할 수 있습니다:
- sudo ufw allow from 203.0.113.0/24
마찬가지로, 특정 네트워크 203.0.113.0/24
이 연결할 수 있도록 허용하려면 다음과 같이 포트 22
(SSH)를 사용하여 지정할 수 있습니다:
- sudo ufw allow from 203.0.113.0/24 to any port 22
특정 네트워크 인터페이스로의 연결
특정 네트워크 인터페이스에만 적용되는 방화벽 규칙을 만들려면 allow in on
다음에 네트워크 인터페이스의 이름을 지정하면 됩니다.
계속하기 전에 네트워크 인터페이스를 조회하는 것이 도움이 될 것입니다. 다음 명령을 사용하여 확인할 수 있습니다:
- ip addr
Output. . .
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 트래픽을 허용할 수 있습니다:
- sudo ufw allow in on eth0 to any port 80
이렇게 하면 서버가 공개 인터넷에서 HTTP 요청을 받을 수 있습니다.
또는, MySQL 데이터베이스 서버(port 3306)가 사설 네트워크 인터페이스 eth1에서 연결을 수신하도록 원하는 경우 다음 명령을 사용할 수 있습니다:
- sudo ufw allow in on eth1 to any port 3306
이렇게하면 사설 네트워크의 다른 서버가 MySQL 데이터베이스에 연결할 수 있게됩니다.
단계 7 — 연결 거부
들어오는 연결에 대한 기본 정책을 변경하지 않았다면 UFW는 모든 들어오는 연결을 거부하도록 구성됩니다. 일반적으로 이는 특정 포트와 IP 주소를 명시적으로 허용하는 규칙을 만들어 안전한 방화벽 정책을 생성하는 과정을 간소화합니다.
그러나 때로는 서버가 해당 지역에서 공격을 받고 있다는 것을 알기 때문에 소스 IP 주소나 서브넷을 기반으로 특정 연결을 거부하고 싶을 수 있습니다. 또한 기본 수신 정책을 허용(권장되지 않음)으로 변경하려면 연결을 허용하지 않을 서비스나 IP 주소에 대한 거부 규칙을 생성해야 합니다.
거부 규칙을 작성하려면 위에서 설명한 명령을 사용하되, allow를 deny로 바꿔서 사용하면 됩니다.
예를 들어, HTTP 연결을 거부하려면 다음 명령을 사용할 수 있습니다:
- sudo ufw deny http
또는 203.0.113.4로부터 모든 연결을 거부하려면 다음 명령을 사용할 수 있습니다:
- sudo ufw deny from 203.0.113.4
이제 삭제 규칙을 구현하는 방법을 배울 수 있습니다.
규칙 삭제 단계
방화벽 규칙을 삭제하는 방법을 아는 것은 규칙을 생성하는 방법을 아는 것만큼 중요합니다. 삭제할 규칙을 지정하는 두 가지 방법이 있습니다: 규칙 번호 또는 규칙 자체에 의해서입니다. 이것은 규칙이 생성될 때 지정된 방식과 유사합니다.
규칙 번호별
규칙 번호를 사용하여 방화벽 규칙을 삭제하는 경우, 첫 번째 할 일은 방화벽 규칙 목록을 가져오는 것입니다. UFW status
명령어는 각 규칙 옆에 번호를 표시하는 numbered
옵션이 있습니다:
- sudo ufw status numbered
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
포트 80
에서 HTTP 연결을 허용하는 규칙 2
를 삭제하기로 결정했다면, 다음 UFW delete
명령어에서 이를 지정할 수 있습니다:
- sudo ufw delete 2
이것은 확인 프롬프트를 표시할 것이며, y/n
으로 대답할 수 있습니다. y
를 입력하면 규칙 2
가 삭제됩니다. IPv6를 활성화한 경우, 해당 IPv6 규칙도 삭제하고 싶을 것입니다.
실제 규칙별
대신 규칙 번호를 지정하는 대신 삭제할 실제 규칙을 지정하는 것입니다. 예를 들어 allow http
규칙을 제거하려면 다음과 같이 작성할 수 있습니다:
- sudo ufw delete allow http
allow 80
대신 서비스 이름으로 규칙을 지정할 수도 있습니다:
- sudo ufw delete allow 80
이 방법은 IPv4 및 IPv6 규칙이 있는 경우 모두 삭제합니다.
단계 9 — UFW 상태 및 규칙 확인
언제든지 다음 명령을 사용하여 UFW의 상태를 확인할 수 있습니다:
- sudo ufw status verbose
UFW가 비활성화된 경우(기본값), 출력은 다음과 같습니다:
OutputStatus: inactive
UFW가 활성화된 경우(단계 3을 따른 경우), 출력은 활성 상태이며 설정한 규칙을 나열합니다. 예를 들어 방화벽이 SSH(포트 22
) 연결을 어디에서나 허용하도록 설정된 경우 출력에는 다음과 같은 내용이 포함될 수 있습니다:
OutputStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
방화벽이 어떻게 구성되었는지 확인하려면 status
명령을 사용하십시오.
단계 10 — UFW 비활성화 또는 재설정(선택 사항)
UFW를 사용하지 않으려고 결정하는 경우 다음 명령으로 비활성화할 수 있습니다:
- sudo ufw disable
모든 UFW 규칙이 더 이상 활성화되지 않습니다. 나중에 활성화해야하는 경우 항상 sudo ufw enable
을 실행할 수 있습니다.
이미 UFW 규칙을 구성했지만 처음부터 다시 시작하려고 결정한 경우 reset 명령을 사용할 수 있습니다:
- sudo ufw reset
이렇게하면 UFW가 비활성화되고 이전에 정의한 모든 규칙이 삭제됩니다. 기본 정책은 변경되지 않으므로 필요에 따라 언제든지 원래 설정으로 돌아가지 않습니다. 이것은 UFW를 새로 시작할 수 있도록 해야합니다.
결론
이제 방화벽이 (적어도) SSH 연결을 허용하도록 구성되었습니다. 서버가 필요로하는 다른 들어오는 연결을 허용하고 불필요한 연결을 제한하는 것이 중요합니다. 이렇게하면 서버가 기능적이고 안전하게 유지됩니다.
더 일반적인 UFW 구성에 대해 알아보려면 다음 튜토리얼인 UFW Essentials: Common Firewall Rules and Commands을 확인하세요.