Linux command - ufw

sycho·2023년 12월 19일
0

Linux Commands

목록 보기
15/30

ufw

  • manpage

  • uncomplicated firewall의 약자다(?)

  • 명령어 기반으로 Arch Linux / Debian / Ubuntu에서 방화벽을 관리하는데 사용되는 명령어이다.

  • 이름에서 보면 알겠지만 방화벽을 최대한 간단하게 구성할 수 있도록 하기 위해 만들어졌으며, iptables이라는 방화벽 도구의 프런트엔드 역할을 한다.

  • 모든 관련 명령어는 root 권한이 있어야만 실행이 가능하다.

basics

  • 이름과 다르게 형태가 매우 다양하고 복잡한데, 크게 밑과 같이 나눌 수 있다.
ufw [--dry-run] [options] [rule syntax]
  • 먼저 --dry-run이란, 현재 command가 실제로 방화벽 구성을 바꾸는 대신, 방화벽 구성을 바꿨을 때 최종적으로 나오는 방화벽을 출력하도록 하고 싶을 때 사용한다. 원하는 결과가 나오는지 확인하는데 사용될 수 있다.

  • rule syntax는 simple과 full, 이렇게 2가지가 나뉘는데

    • simple : 규칙 대상인 port, 그리고 선택적으로 protocol까지를 정한다.
    • full : 규칙 대상인 source, destination, port, 그리고 선택적으로 protocol까지를 정한다.

기본적인 option 활용

  • 실행을 할거면 enable, 실행을 멈출거면 disable을 쓰자.
$ sudo ufw enable
$ sudo ufw disable
  • 간단하게 몇개의 규칙을 알아보도록 하자. 예를 들어 SSH 기본 port인 22 port에서 온 traffic을 허용하고 싶으면 밑과 같이 하면 된다.
$ sudo ufw allow 22
  • 반대로 허용하기 싫으면 밑과 같이 하면 된다.
$ sudo ufw deny 22
  • protocol을 더하고 싶으면 다음과 같이 하자.
$ sudo ufw allow 22/tcp
$ sudo ufw deny 22/tcp
  • 특정 서비스에서 대표적으로 사용되는 port 번호가 기억나지 않을 경우, /etc/services에 있는 정보를 기반으로 service 이름만 넣어도 알아서 처리가 가능하다.
sudo ufw allow ssh/tcp
  • IP주소를 기반으로 막는것도 가능하다.
$ sudo ufw deny from 1.2.3.4
  • subnet을 막는것도 가능하다.
$ sudo ufw deny from 203.0.113.0/24
  • 특정 interface를 통해 들어오는 특정 connection을 막는것도 가능하다.
$ sudo ufw deny in on eth0 from 1.2.3.4
  • 물론 이것들의 반대인, 허용하는 규칙을 넣는것도 가능하다.
$ sudo ufw allow from 1.2.3.4
$ sudo ufw allow in on eth0 from 1.2.3.4
  • 규칙 제거의 경우, delete를 사용한다. 규칙 자체를 명시하면 된다.
$ sudo ufw delete allow from 1.2.3.4
  • 위를 보고 대충 눈치챘겠지만, from은 어디서 왔는지에 대한 조건이다. 그리고 어디가 destination인지에 대한 조건으로 to도 있다. 그래서 이를 조합해 다음과 같은 복잡한 rule도 설정이 가능하다. 1.2.3.4의 port 22에서 와가지고 1.1.1.1의 port 22에 하려는 연결에 대해서는 거부하라는 rule이다.
$sudo ufw deny from 1.2.3.4 port 22 to 1.1.1.1 port 22

status

  • 방화벽 상태를 확인하고 싶으면 status를 쓰면 된다. 동작하지 않으면 inactive라고 나온다.
$ sudo ufw status
  • 동작 중인 경우 status를 사용하면 현재 적용중인 Rule이 무엇인지 간단하게 나온다.
                To                         Action      From
                --                         ------      ----
                Anywhere on eth0           ALLOW       192.168.0.0/16
                10.0.0.0/8                 ALLOW OUT   Anywhere on eth1
                10.0.0.0/8 on eth1         ALLOW FWD   192.168.0.0/16 on eth0
  • 앞에서 delete를 활용하는 법을 배웠는데, 규칙을 다 쓰기 귀찮은 경우가 분명 있을 것이다. numbered라는 option을 사용하면 규칙의 번호를 확인하는게 가능하다.
$ sudo ufw status numbered
Output
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] Anywhere                   DENY IN     1.2.3.4             
[ 2] Anywhere on eth0           ALLOW IN    1.2.3.5   
  • 여기에 delete까지 활용해서 제거하는 것이 가능하다. 이 때 해당 번호에 실제로 대응되는 rule이 나오면서 그걸 지우고 싶은게 맞냐고 물어보기까지 하니 안심하도록 하자.
$ sudo ufw delete 1

show

  • 동작중이 아니더라도 rule 확인이 가능한데, show를 사용하면 된다. 이 때 무엇에 대해 show를 할지 정하는 parameter인 REPORTS를 사용해야 한다. 대표적으로 added이라고, ufw를 통해 추가한 rule들을 표기하는 것이 있다.
$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 22

application profile 관련

  • application을 설치할 때 network communication에 의존하는 application들은 일반적으로 UFW profile이라는 것을 설정한다. 그러면 우리는 이 profile을 활용해 해당 application과 관련된 외부연결을 받아들일지 아니면 안 받아들일지를 설정하는 것이 가능하다. 우리가 활용하는 application과 관련된 네트워크 연결을 사용할건지 아니면 아예 거부할지를 편하게 정하는데 유용하다. profile을 설정한 application을 확인하려면 다음 command를 입력하자.
$ sudo ufw app list
  • 예를들어 OpenSSH라는 application이 있다면, 여기서의 연결을 허용하는 것을 설정하고 싶다면 밑에처럼 하자.
$ sudo ufw allow "OpenSSH"

그외

  • reject : deny랑 같지만, 송신자에게 거부되었음을 알린다.

  • limit : 기본적으로는 허용하나, 동일 주소에서 30초 이내에 6개의 별도 연결 시도를 할 경우 deny를 한다.

  • reset : 방화벽 초기화

  • reload : 실행중인 방화벽의 재시작

profile
CS 학부생, 핵심 관심 분야 : Embed/System/Architecture/SWE

0개의 댓글