- 우분투의 기본적인 방화벽은 “ufw”이다. 이는 iptables를 좀 더 쉽게 설정할 수 있도록 한것
방화벽 구성에는 문제가 없지만 수준 높은 방화벽 구성에는 iptables룰을 직접 사용해야 한다.
참고: 우분투 ufw help 가이드
UFW 사용법
UFW 기본 설정법에 대하여 알아보자.
UFW활성화 / 비활성화
UFW는 기본 비활성화 상태이기에 이를 활성화 한다.
sudo ufw enable
UFW 비활성화
sudo ufw disable
UFW 상태 확인
sudo ufw status verbose
UFW 기본 룰
UFW에 설정되어 있는 기본 룰은 아래와 같다.
- 들어오는 패킷에 대해서는 전부 거부(deny)
- 나가는 패킷에 대해서는 전부 허가(allow)
기본 룰 확인
sudo ufw show raw
기본 정책 차단
sudo ufw default deny
Code language: JavaScript (javascript)
기본 정책 허용
sudo ufw default allow
Code language: JavaScript (javascript)
UFW 허용과 차단
UFW 허용
sudo ufw allow <port>/<optional: protocal>
Code language: HTML, XML (xml)
예) SSH 포트 22번 허용(tcp/udp 22번 포트를 모두 허용)
sudo ufw allow 22
tcp 22번 포트만을 허용 – SSH는 tcp 22번 포트만 허용하는게 정답
sudo ufw allow 22/tcp
udp 22번 포트만을 허용
sudo ufw allow 22/udp
UFW 거부
sudo ufw deny <port>/<optional: protocol>
Code language: HTML, XML (xml)
예) ssh 포트 22번 거부(tcp/udp 22번 포트를 모두 거부)
sudo ufw deny 22
tcp 22번 포트만을 거부
sudo ufw deny 22/tcp
udp 22번 포트만을 거부
sudo ufw deny 22/udp
UFW 룰의 삭제
ufw deny 22/tcp 설정이 되어있다고 가정
sudo ufw delete deny 22/tcp
Code language: JavaScript (javascript)
service 명을 이용한 설정
/etc/services에 지정되어 있는 서비스명과 포트를 이용해 UFW를 설정할 수 있다.
서비스명 보기
less /etc/services
서비스명으로 허용
sudo ufw allow <service name>
Code language: HTML, XML (xml)
예) SSH 서비스
sudo ufw allow ssh
sudo ufw deny ssh
UFW 로그 기록
sudo ufw logging on
sudo ufw logging off
Advanced Syntax
문법을 확장하여 목적지 주소와 포트, 프로토콜등을 지정할 수 있다.
특정한 IP 주소 허가/거부
특정한 IP주소 허용
sudo ufw allow from <ip address>
Code language: HTML, XML (xml)
예) 192.168.0.100 주소 허용(IP 주소192.168.0.100 에서만 접속이 가능해진다)
sudo ufw allow from 192.168.0.100
Code language: CSS (css)
네트워크 단위로 지정하여 같은 네트워크 상에 있는 컴퓨터들은 접속가능해진다.
sudo ufw allow from 192.168.0.0/24
Code language: JavaScript (javascript)
특정 IP 주소와 일치하는 포트 허용
sudo ufw allow from <ip address> to <protocol> port <port number>
Code language: HTML, XML (xml)
예) 192.168.0.100 주소와 포트, 프로토콜 허용
sudo ufw allow from 192.168.0.100 to any port 22
Code language: CSS (css)
특정 IP 주소와 프로토콜, 포트 허용
$ sudo ufw allow from <ip address> to <protocol> port <port number> proto <protocol name>
Code language: HTML, XML (xml)
예) 192.168.0.100 주소와 tcp 프로토콜 22번 포트 허용
sudo ufw allow from 192.168.0.100 to any port 22 proto tcp
Code language: CSS (css)
위의 예제들에서 allow 대신 deny를 입력하면 거부가 된다.
ping (icmp) 허용/거부
UFW 기본설정은 ping 요청을 허용하도록 되어있다.
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
Code language: PHP (php)
위 코드들의 ACCEPT 부분을 모두 DROP으로 변경하거나 삭제하면 ping 요청을 거부하게 된다.
UFW Numbered rules
UFW 룰들에 숫자를 붙여서 볼 수 있다. 이를 이용해 룰에 수정이나 삭제, 추가를 할 수 있다.
UFW Number 보기
sudo ufw status numbered
UFW Numbered 수정
sudo ufw delete 1
sudo ufw insert 1 allow from 192.168.0.100
Code language: CSS (css)
추천 방화벽 정책
sudo ufw enable
sudo ufw allow from 192.168.0.3 to any port 22 proto tcp
sudo ufw allow 123/udp
sudo ufw allow 80/tcp
sudo ufw allow 3306/tcp
sudo ufw status
Code language: JavaScript (javascript)
sudo ufw allow from 192.168.0.100 to any port 22 proto tcp
Code language: CSS (css)