[Network] UFW로 리눅스 방화벽 설정 실습하기
<< 실습 주제의 선택 >>
서버를 운영하거나 특정 프로그램에 네트워크 연결을 시도하다 보면, 특정 포트를 열거나 (열려있는지 확인하거나), 방화벽을 꺼야 연결이 되는 상황이 많다. 또 웹서버가 실행되고 있다면 80, 443만 열고 나머지는 차단해야 보안 위협도 줄어든다고 한다. 리눅스에 기본 설치된 UFW는 복잡한 iptables 없이도 방화벽을 간편하게 구성할 수 있는 도구라고 하니, 실습하여 공부하도록 하자...!
1. UFW 란?
- Uncomplicated Firewall 의 줄임말로 "복잡하지 않은 방화벽" 이란 뜻이다.
- iptables처럼 복잡한 명령어 없이도, 간단한 문법으로 방화벽을 설정할 수 있도록 만든 도구이다.
- Ubuntu나 Debian 계열의 리눅스 배포판에서 기본 방화벽 인터페이스로 널리 사용된다.
2. UFW 명령어의 종류
- 방화벽 상태 확인하기
sudo ufw status verbose
- 방화벽 활성화 하기
sudo ufw enable
- 특정 포트 허용 / 차단 방법
sudo ufw allow port/protocol
## SSH 연결 허용하기
## sudo ufw allow 22/tcp
sodu ufw deny port/protocol
## FTP 연결 차단하기
## sudo ufw deny 21
- 특정 ip 만 특정 포트 접속 허용하기
sudo ufw allow from xxx.xxx.xxx.xxx to any port 22
## xxx.xxx.xxx.xxx -> ip address
- 포트 허용,거부 규칙 삭제 및 초기화 하기
sudo ufw status numbered # 규칙 번호 확인
sudo ufw delete [번호] # 특정 규칙 삭제
sudo ufw reset # 모든 규칙 초기화
3. 실제 사용해보기
3-1. 방화벽 상태 확인하기 ( 활성 / 비활성 유무)
반환되는 명령어가 매우 깔끔하다! 군더더기가 없다!
3-2. 방화벽 사용하기
3-3. 방화벽 활성화 후 상태 확인하기
3-4. 모든 규칙을 deny 로 설정하기
3-5. SSH 접근 허용하기
3-6. 규칙 적용 후, 상태 확인하기
내가 설정한 규칙이 추가되어 있는 것을 직관적으로 확인할 수 있다.
또한 v6 로 표시된 것은, 외부 ip 주소가 IPv6 인 주소로도 연결을 허용한다는 의미의 규칙이다.
4. 다른 컴퓨터로 SSH 접속 시도해보기
4-1. 현재 22번 포트을 열어놓은 상태에서 다른 ubuntu 노트북으로 SSH 연결을 시도 해본다.
이상없이 정상적으로 연결되는 것을 확인할 수 있었다.
4-2. 22번 포트 차단 후 SSH 연결 시도하기.
ufw deny 명령어를 사용하여 22번 포트를 닫고 연결을 시도해봤다.
어? 왜? 돼?
현재 상태는 아래와 같은데, 해석을 해보면
22/tcp ALLOW Anywhere
22 DENY Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
22 (v6) DENY Anywhere (v6)
22/tcp | **TCP 22번 (SSH)**을 IPv4에서 허용 |
22 | 모든 프로토콜의 22번 포트(TCP 와 UDP) 를 IPv4 에서 차단 |
22/tcp (v6) | TCP 22번 포트를 IPv6 에서 허용 |
22 (v6) | IPv6 에서 22번 포트 전체를 차단 |
상태에 대한 해석을 보고 공부한 결과 UFW는 더 구체적인 규칙이 우선적용 된다는 것을 알게 되었다.
즉 ALLOW 22/tcp가 TCP 포트 22에만 정확하게 적용되기 때문에, 모든 프로토콜(22) DENY보다 우선권을 갖게 되었다.
22는 TCP+UDP 전체 DENY이지만, 덜 구체적이기 때문에 우선권이 낮아, 더 구체적인 ALLOW가 먼저 적용되어 SSH 연결이 허용된 것이었다.
4-3. 포트와 프로토콜을 구체적으로 명시하여 ufw deny 규칙 적용
위와 같이 포트와 프로토콜에 대해 구체적으로 명시하여 명령어를 입력하였고, 상태를 확인하니 규칙이 추가 되었다.
이제 노트북으로 다시 연결을 시도해보자
약 5분 정도 접속을 시도하다가 time out 이 되며 SSH 연결이 실행되지 않았다!!
규칙 적용에 대해 실습으로 확인하였고, 규칙을 초기화 하고 종료하였다.
5. 실무에서 명령어를 어떻게 활용할 수 있을까?
- 외부 공격자의 IP를 차단하여 보안을 강화할 수 있다. (UFW + fail2ban과 연동 가능)
- 특정 서비스만 허용해 서버 노출 최소화 할 수 있다.
- VPN 사용자만 접속 허용하는 내부망 구성도 가능하다.
- 포트 스캐닝 툴(nmap)로 테스트했을 때 딱 필요한 포트만 노출되도록 구성 가능하다.
6. 마무리
방화벽 설정은 보안의 시작이라고 볼 수있다.
UFW는 초보자도 쉽게 사용할 수 있는 리눅스 기본 방화벽 도구로, "내가 열어야 할 포트만 정확히 열고 나머지는 닫는다"는 원칙을 간단하게 실현할 수 있게 해준다.