[Ubuntu] ufw로 방화벽 포트 설정하기
⏰ 2021-09-04 (토) 01:26:20
개요
모든 건물에는 입구가 존재한다. 일반적인 상황에서, 누구든지 해당 건물에 드나들기 위해선 좋든 싫든 입구를 통과해야한다.
이 입구라는 것이 또 마냥 열려있는 건 아니라서, 필요 시엔 개방되어있다가도 특정 시간에는 폐쇄되기도 한다.
심지어 어떤 곳은 까다롭기 그지없어서, 사람을 가려받기도 한다. 이를테면 보안구역이라던가, 금요일 밤의 클럽이라던가.
PC통신도 이와 원리가 별반 다를 바 없다. 보기엔 그냥 막 통신하는 것 같아도, 저마다 할당받은 입구를 통해 PC에 드나든다.
PC가 건물이라고 한다면, PC의 입구는 포트(PORT)라 할 수 있다.
모든 프로그램은 PC와의 통신 시 임의의 입구, 포트를 할당받는다. 프로그램은 해당 포트를 통해 들어오고, 나가며 정해진 동작을 수행한다.
만약 해당 포트가 막혀있다면, 해당 컴퓨터를 대상으론 정상적으로 동작할 수 없을 것이다.
이 프로그램이 내 PC에 필요하다면 포트를 열어주면 될 것이고, 아니라면 포트를 닫음으로써 접근하지 못하게 함이 바람직하다. 혹은 인증된 소수의 프로그램에게만 포트를 허용할 수도 있을 것이다.
말 그대로 보안과 매우 밀접한 개념으로써, 방화벽 설정을 통해 원하는 포트를 원하는 대상에게 개방/폐쇄할 수 있다.
Ubuntu에서 ufw를 통해 방화벽 설정을 원하는대로 설정해보자.
그냥 다 열면 안 돼?
조선시대 제주도는 문을 잠근다는 개념이 매우 미약했다고 한다.
옛 교통방식과 섬이라는 폐쇄적인 환경 덕분에 유동인구가 매우 적었고, 각 마을 주민에 대한 신원이 확실했을 것이다. 내륙에 비해 외지인이 방문/거주할 일도 매우 적었을 것이다.
이처럼 주변 환경과 사람들 간의 신뢰성이 있다면 굳이 그렇게 폐쇄적일 필요는 없을지도 모른다.
하지만 인터넷이라는 환경은 이와 결이 매우 다르다. 인터넷에 연결만 되어있다면 누구나 내 PC에 접근할 수 있는 잠재적 가능성을 가진다. 누가, 왜, 무엇을 위해 오는지도 알 수 없다.
이 경우 문을 아무렇게나 열어재껴놓는건 바람직한 상황이 아닐 것이다.
방화벽은 이러한 문제로부터 PC를 최대한 보호하기위해, 기본적으로 폐쇄적인 설정을 가진다. 일단 안 된다고 질러놓고 보는 셈이다.
보안을 위해서 방화벽은 가급적 폐쇄하되, 필요한 프로그램만 개방하는 화이트리스트 방식을 쓰는 습관을 들이도록 하자.
ufw
기본적인 방화벽 명령어 iptables
가 있지만, 명령어가 그리 직관적이지 않다는 단점이 있다. 이에 비해 ufw
는 iptables
에 비해 훨씬 쉽고 직관적인 명령어로 다룰 수 있다.
iptables
과 성능상의 차이가 거의 없다는 점을 감안하면 확실한 장점.
ufw 설치
ufw는 기본 명령어가 아니다. ufw를 설치하자.
BASH
1
sudo apt-get install ufw
위 명령어를 통해 설치할 수 있다.
ufw 상태 관리 명령어
ufw의 상태를 관리하는 명령어다.
BASH
1 2 3 4 5 6 7 8
# ufw 활성화 sudo ufw enable # ufw 비활성화 sudo ufw disable # ufw 상태 확인 sudo ufw status verbose
ufw가 설치된 후 방화벽에 영향을 주는 걸 방지하기 위해 기본적으로 비활성화 상태로 설치된다.
sudo ufw enable
명령어를 입력하여 활성화하자.
ufw 정책 관리 명령어
ufw에 적용된 정책을 관리한다.
BASH
1 2 3 4 5 6 7 8
# 정책 조회 sudo ufw show raw # 기본 정책 허용 sudo ufw default allow # 기본 정책 차단 sudo ufw default deny
모든 포트 통신에 대한 일괄 허용/차단이 가능하다.
BASH
1 2 3 4 5
# 들어오는 통신 차단 sudo ufw default deny incoming # 나가는 통신 허용 sudo ufw default allow outgoing
오는사람 막고 가는사람 안 막는다라는 말을 들어본 적이 있을 것이다. 보안도 똑같다. 내게 들어오는 통신은 최대한 폐쇄적으로, 내게서 나가는 통신은 개방적으로 대한다.
ufw 정책 설정 명령어
BASH
1 2 3 4 5 6 7 8 9 10 11
# 443포트(HTTPS) 허용 sudo ufw allow 443 # 443포트(HTTPS) TCP 허용 sudo ufw allow 443/tcp # 443포트(HTTPS) UDP 허용 sudo ufw allow 443/udp # 443포트(HTTPS) 허용 sudo ufw allow https
위 명령어는 HTTPS 포트 443을 허용하는 명령어들의 모음이다.
ufw는 고유 서비스 이름을 사용해서 포트를 관리할 수 있다. HTTP(80), HTTPS(443), FTP(21), SSH(22) 등이 이에 해당한다.
allow
이외에도 deny
를 통해 통신을 거부하거나, delete
를 통해 해당 정책을 아예 지워버릴 수도 있다.
정책을 지우게 되면 ufw에 설정된 기본 정책을 따르게 된다.
ufw 정책 세부설정 명령어
IP 통신 정책
BASH
1 2 3 4 5
# 192.168.0.5 IP의 통신 허용 sudo ufw allow from 192.168.0.5 # 192.168.0.5 ~ 200 대역의 IP의 통신 허용 sudo ufw allow from 192.168.0.5/200
위 명령어를 통해서 특정 IP 혹은 IP 대역의 통신을 관리할 수 있다.
IP 및 포트 통신 정책
BASH
1 2 3 4 5
# 192.168.0.5 IP의 443포트 허용 sudo ufw allow from 192.168.0.5 to any port 443 # 192.168.0.100 IP의 443포트 TCP 허용 sudo ufw allow from 192.168.0.5 to any port 443 proto tcp
특정 IP의 특정 포트만 허용/차단할 수도 있다.
ufw 정책 수정 명령어
BASH
1
sudo ufw status numbered
현재 적용된 정책을 인덱스 번호와 함께 보여준다.
해당 번호를 통해 정책을 수정, 삭제할 수 있다.
BASH
1 2 3 4 5
# 1번 정책을 443포트 차단 정책으로 변경 sudo ufw insert 1 deny 443 # 2번 정책을 192.168.0.5 IP의 통신 허용 정책으로 변경 sudo ufw insert 2 allow from 192.168.0.5
ufw 정책 삭제 명령어
BASH
1 2
# 1번 정책 삭제 sudo ufw delete 1
정리
서비스에서 서버가 갖는 역할과 비중을 생각해본다면, 서버의 보안은 서비스의 안정성과 직결되는 중요한 문제다.
때문에 서버의 보안은 귀찮을정도로 견고하게 구성되는 것이 바람직하다.
프로그램, 웹 등 모든 서비스의 기초는 데이터의 통신이므로, 통신을 잘 제어하는 것이 중요하다.
반드시 필요한 통신만을 허가하고 관리하여 서버가 항상 최상의 보안을 유지할 수 있도록 보안정책을 구성하자.
🏷️ 태그
읽어주셔서 고마워요!
도움이 되셨다면, 공감이나 댓글을 달아주시는 건 어떤가요?
블로그 운영에 큰 힘이 됩니다.