우분투(Ubuntu) 환경에 방화벽(UFW) 설정하기
방화벽(UFW, uncomplicated firewall)은 데비안(debian) 계열 및 다양한 리눅스(linux) 환경에서 작동되고, GPL(GNU General Public License)이 적용되며 파이썬(python)으로 개발되었습니다.
ufw는 기본적으로 ubuntu 18.04 LTS 이후 버전에서 사용할 수 있습니다.
사용하기 쉬운 CLI(command line interface, 명령 줄 인터페이스)를 사용하고, 프로그램 구성에 iptables를 사용하여 netfilter 방화벽(firewall)을 관리하는 프로그램입니다.
이 포스트에서는 ubuntu 환경에서 ufw를 설정하는 방법을 소개합니다.
선행조건(PREREQUISITE)
- ubuntu 환경이 필요합니다.
Ubuntu 설치 방법은 우분투(Ubuntu) 서버(Server) 16.04 설치하기 또는 우분투(Ubuntu) 서버(Server) 18.04 설치하기 포스트를 참고하시기 바랍니다.
테스트 환경(TEST ENVIRONMENT)
- VMware® Workstation 15 Pro (15.5.1 build-15018445)
- Ubuntu 18.04.3 LTS (Bionic Beaver) Server (64-bit)
요약(SUMMARY)
- ufw 활성화 또는 비활성화
- ufw 기본 정책(default rules) 조회
- ufw default rules 허용 또는 차단
- ufw rule 허용 또는 차단
- ufw rule 삭제
- 서비스 명으로 ufw rule 허용 또는 차단
- IP 주소로 ufw rule 허용 또는 차단
- ufw ping(icmp) 허용 또는 차단
- (선택사항) apt 명령어로 ufw 삭제
내용(CONTENTS)
1. ufw 활성화 또는 비활성화
1.1. ufw 활성화
$ sudo ufw enable
ufw은 기본적으로 비활성화되어 있습니다.
1.2. ufw 비활성화
$ sudo ufw disable
2. ufw 상태 조회
$ sudo ufw status verbose
Status: inactive
3. ufw default rules 조회
$ sudo ufw show raw
아래 경로의 하위 파일을 조회하여 확인할 수 있습니다.
$ sudo cat /etc/ufw/user.rules
*filter
:ufw-user-input - [0:0]
:ufw-user-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-user-logging-input - [0:0]
:ufw-user-logging-output - [0:0]
:ufw-user-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-logging-deny - [0:0]
:ufw-logging-allow - [0:0]
:ufw-user-limit - [0:0]
:ufw-user-limit-accept - [0:0]
### RULES ###
### END RULES ###
### LOGGING ###
-A ufw-after-logging-input -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
-A ufw-after-logging-forward -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
-I ufw-logging-deny -m conntrack --ctstate INVALID -j RETURN -m limit --limit 3/min --limit-burst 10
-A ufw-logging-deny -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
-A ufw-logging-allow -j LOG --log-prefix "[UFW ALLOW] " -m limit --limit 3/min --limit-burst 10
### END LOGGING ###
### RATE LIMITING ###
-A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT
-A ufw-user-limit-accept -j ACCEPT
### END RATE LIMITING ###
COMMIT
4. ufw default rules 허용 또는 차단
4.1. ufw default rules 허용
$ sudo ufw default allow
4.2. ufw default rules 차단
$ sudo ufw default deny
5. ufw rule 허용 또는 차단
5.1. TCP 8080 포트(port) 허용
$ sudo ufw allow 8080/tcp
5.2. TCP 8080 port 차단
$ sudo ufw deny 8080/tcp
5.3. UDP 22 port 허용
$ sudo ufw allow 22/udp
5.4. UDP 22 port 차단
$ sudo ufw deny 22/udp
5.5. TCP/UDP 53 port 허용
$ sudo ufw allow 53
5.6. TCP/UDP 53 port 차단
$ sudo ufw deny 53
53 port는 DNS 사용 port입니다.
6. ufw rule 삭제
6.1. TCP 8080 port 차단 rule 삭제
$ sudo ufw delete deny 8080/tcp
6.2. UDP 22 port 차단 rule 삭제
$ sudo ufw delete deny 22/udp
6.3. TCP/UDP 53 port 차단 rule 삭제
$ sudo ufw delete deny 53
7. 서비스(service) 명으로 ufw rule 허용 또는 차단
아래 명령어로 service 목록을 조회할 수 있습니다.
$ cat /etc/services
7.1. SSH service 허용
$ sudo ufw allow ssh
7.2. SSH service 차단
$ sudo ufw deny ssh
8. IP 주소(address)로 ufw rule 허용 또는 차단
8.1. IP address 허용
$ sudo ufw allow from 192.168.10.20
8.2. IP address 차단
$ sudo ufw deny from 192.168.10.20
8.3. IP address subnet(net mask) 허용
$ sudo ufw allow from 192.168.10.0/24
8.4. IP address subnet(net mask) 차단
$ sudo ufw deny from 192.168.10.0/24
8.5. IP address와 port 허용
$ sudo ufw allow from 192.168.10.20 to any port 22
8.6. IP address와 port 차단
$ sudo ufw deny from 192.168.10.20 to any port 22
8.7. IP address와 port, protocol 허용
$ sudo ufw allow from 192.168.10.20 to any port 22 proto tcp
8.8. IP address와 port, protocol 차단
$ sudo ufw deny from 192.168.10.20 to any port 22 proto tcp
9. ufw ping(icmp) 허용 또는 차단
ufw는 기본적으로 ping 요청을 허용합니다.
9.1. ufw ping(icmp) 허용
$ sudo vi /etc/ufw/before.rules
...
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
...
9.2. ufw ping(icmp) 차단
$ sudo vi /etc/ufw/before.rules
...
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
...
‘ACCEPT’를 ‘DROP’으로 변경합니다.
10. (선택사항) apt 명령어로 ufw 삭제
- 설정 파일을 유지하며 ufw를 삭제합니다.
$ sudo apt remove ufw
$ sudo apt remove --auto-remove ufw
- 설정 파일과 함께 ufw를 삭제합니다. (단, 사용자 홈 디렉터리의 설정 파일은 유지됩니다.)
$ sudo apt purge ufw
$ sudo apt purge --auto-remove ufw
마무리(CONCLUSION)
ubuntu 환경에 ufw 설정을 완료했습니다.
다음 포스트에서는 우분투(Ubuntu) 환경에 iptables 설정하기를 소개하겠습니다.
Leave a comment