ufw (방화벽)

imRAD system은 방화벽 기능으로 "ufw"[1]를 사용합니다. ufw는 호스트 기반 방화벽에 적합하며 iptable을 사용합니다. 관리자는 특정 네트워크 트래픽(예, SSH or web server traffic)에 대한 흐름을 허용하거나 차단 할 수 있습니다.

configuration mode에서 ufw enable 또는 ufw disable 명령어를 사용해 ufw를 사용 혹은 중지 시킬 수 있습니다.

ufw의 초기상태는 미사용(disable) 상태이며 필요시 사용 상태로 변경하세요.

본 문서는 기본 적인 syntax와 예시를 설명하며 자세한 사용법은 https://help.ubuntu.com/community/UFW 또는 http://manpages.ubuntu.com/manpages/bionic/man8/ufw.8.html 페이지를 참고하세요.

ufw 확인

urw가 미사용 상태일때 아래 예시와 같이 표시됩니다.

LYSH@MyHostName# show ufw
Status: inactive	// ufw is in disable

아래 예시는 몇몇 규칙과 함께 ufw가 사용 상태일때의 일반적은 설정 형태입니다. 기본(default) incoming 규칙은 deny 인데 이는 허용된 규칙을 제외한 모든 트래픽은 차단됨을 의미합니다.

LYSH@MyHostName# show ufw
Status: active		// ufw is in enable
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
[ 1] 22                         ALLOW IN    192.168.0.10
[ 2] 22                         ALLOW IN    192.168.0.11
[ 3] 22                         ALLOW IN    192.168.0.12
...

show ufw added 명령어를 사용하면 등록된 규칙을 모두 출력합니다.(미사용 상태에서도 표시합니다.)

LYSH@MyHostName# show ufw added
ufw allow from 192.168.0.10 to any port 22
ufw allow from 192.168.0.11 to any port 22
ufw allow from 192.168.0.12 to any port 22

사용(enable) / 미사용(Disable)

configuration mode에서 ufw를 사용 혹은 미사용 상태로 전환할 수 있습니다.

기본 incoming 규칙을 "allow"로 변경 후 ufw를 "사용(enable)" 상태로 변경하세요. 그렇지 않으면 현재 연결이 끊기고 및 일부 서비스의 통신이 차단 될 수 있습니다.

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw default allow
LYSH@MyHostName(config)# ufw enable
LYSH@MyHostName(config)# exit
LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip

미사용으로 변경하려면 ufw disable 명령을 실행하세요.

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw disable
LYSH@MyHostName(config)# exit

기본 incoming 규칙을 "deny"로 설정하고 "allow" 규칙을 추가하는게 낫습니다. 만일 기본 규칙을 "allow"로 하면 수많은 "deny" 규칙을 추가해야 니다. 따라서 모든 "allow" 규칙을 추가 후 기본 incoming 규칙을 "deny"로 변경하세요.

ufw 사용 요약
mode 명령 설명
configuration ufw default allow 기본 incoming 규칙을 "allow"으로 변경
configuration ufw enable ufw를 사용 상태로 변경
user show ufw ufw 상태 확인
configuration ufw allow {syntax} "allow" 규칙 추가.

아래 언급된 "필수 허용 규칙"은 모두 추가하세요.

user show ufw added ufw 상태 및 추가된 규칙 확인
configuration ufw default deny 기본 incoming 규칙을 "deny"로 변경
user show ufw added ufw 상태 및 추가된 규칙 확인

규칙(rules)

configuration mode에서 규칙을 설정 할 수 있습니다.

Basic syntax

새로운 규칙은 "add"와 insert 명령어를 통해 추가 할 수 있는데 "add" 명령어를 사용하면 새로운 규칙이 기존 규칙 맨뒤에 추가되며 "insert" 명령어를 사용하면 새로운 규칙을 특정 규칙 이전에 추가할 수 있습니다.

먼저 일치되는 규칙이 먼저 적용되기 때문에 규칙의 순서는 매우 중요합니다. 따라서 규칙을 추가할때 일반적인 규칙보다 상세한 규칙을 먼저 선언하세요. 만일 이미 규칙이 포함되었다면 "insert" 명령어로 앞 순서에 규칙을 추가할 수 있습니다.[2].

규칙을 삭제하려면 ufw delete 명령어를 사용하세요. 하나의 규칙은 "allow", "deny", 또는 "reject" 중 하나로 설정될 수 있습니다. "deny" 규칙은 수신되는 패킷을 버린다는 의미이며 "reject" 규칙은 송신자에 오류 패킷을 전송한다는 의미입니다. [3]

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw allow 22			// To allow incoming tcp and udp packet on port 22.
LYSH@MyHostName(config)# ufw allow 23/tcp		// To allow incoming tcp packet on port 23.
LYSH@MyHostName(config)# ufw deny 24/udp		// To deny incoming udp packet on port 24.
LYSH@MyHostName(config)# ufw allow ssh		// To allow ssh by name.
LYSH@MyHostName(config)# ufw allow from 192.168.0.1	// To allow packets from 192.168.0.1.
LYSH@MyHostName(config)# ufw deny from 192.168.0.1/24	// To deny packets from 192.168.0.1/24.

192.168.0.4에서 포트 22에 대한 액세스를 허용

LYSH@MyHostName(config)# ufw allow from 192.168.0.4 to any port 22

TCP를 사용하여 192.168.0.4에서 포트 22에 대한 액세스를 허용

LYSH@MyHostName(config)# ufw allow from 192.168.0.4 to any port 22 proto tcp

TCP를 사용하여 192.168.0.x/24 서브넷에 포함된 모든 호스트의 포트 22에 대한 액세스를 허용

LYSH@MyHostName(config)# ufw allow from 192.168.0.4/24 to any port 22 proto tcp
규칙 추가

"add" 명령어를 사용해 "allow" 규칙을 추가하려면 ufw allow {syntax} 명령어를 사용하세요. 만일 기존 규칙 이전에 새로운 "allow" 규칙을 추가하려면 ufw insert {number} allow {syntax} 명령어를 이요하세요.

LYSH@MyHostName# configure
LYSH@MyHostName(config)#  ufw allow from 192.168.0.10 to any port 22
LYSH@MyHostName(config)#  ufw allow from 192.168.0.20 to any port 22
LYSH@MyHostName(config)# exit

"add" 명열어로 규칙을 추가하면 맨 마지막에 새로운 규칙이 추가됩니다.

LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
[ 1] 22                    ALLOW IN    192.168.0.10
[ 2] 22                    ALLOW IN    192.168.0.20

특정 규칙 이전에 규칙을 추가하기 위해 "insert"를 사용하려면 기존 규칙의 번호(number)를 show ufw 명령어 결과에서 확인 후 순서를 확인 후 추가헤세요. 다음은 "allow from 192.168.0.20 to any port 22" 규칙 이전에 새로운 규칙을 추가하는 예시입니다.

LYSH@MyHostName# configure
LYSH@MyHostName(config)#  ufw insert 2 allow from 192.168.0.15 to any port 22
LYSH@MyHostName(config)# exit
LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
[ 1] 22                    ALLOW IN    192.168.0.10
[ 2] 22                    ALLOW IN    192.168.0.15
[ 3] 22                    ALLOW IN    192.168.0.20		// shift down

"deny" 규칙에 일치하는 패킷이 발생되어 트래픽이 거부되면 로그가 기록되지 않습니다. 만일 그러한 로그를 기록하게 하려면 아래 예시와 같이 "log" 구문을 이용하세요.

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw deny log from 192.168.0.100 to any port 22 proto tcp
LYSH@MyHostName(config)# exit

기본 incoming 규칙이 "deny"인 경우에는 "allow" 규칙에 포함되지 않은 트래픽에 대해서는 로그가 기록되나 개별 "deny" 규칙에 대해서는 "log" 구문을 사용하지 않으면 로그가 생성되지 않습니다.

다음 예시는 "ufw deny log from 192.168.0.100 to any port 22 proto tcp" 규칙을 포함시켜면 기록되는 차단 로그를 보여줍니다.

LYSH@MyHostName# show log ufw
2021-04-26 14:55:27 4 0 MyHostName kernel: [7282110.099052] [UFW BLOCK] IN=eth0  
OUT=MAC=00:15:5d:03:1e:57:00:04:96:34:b5:e9:08:00 SRC=192.168.0.100 DST=192.168.0.200...
필수 허용 규칙

기본 규칙을 "deny"로 설정하고 모든 imRAD 서비스가 올바르게 동작하려면 아래 필수 규칙을 반드시 포함시켜야 합니다.

You must specify these rules to have all imRAD services work properly. You'd better copy all the following rules and then paste them.

만일 사용하지 않는 서비스가 있다면 해당 서비스와 관련된 규칙은 제외해도 됩니다. 서비스에 대한 포트 및 프로토콜은 ImRAD 사용 포트(port)를 참고하세요.

LYSH@MyHostName# show ufw added
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 6710/tcp
ufw allow 1812/udp
ufw allow 1813/udp
ufw allow 1813/tcp
ufw allow 1812/tcp
ufw allow 18123/udp
ufw allow 67/udp
ufw allow 68/udp
ufw allow 547/tcp
ufw allow 546/udp
ufw allow 6010/udp

SSH 접근을위해 사용하시는 호스트의 IP 주소를 지정하세요.

LYSH@MyHostName(config)# ufw allow from {your ip address} to any port 22 proto tcp
규칙 삭제

규칙을 삭제하려면 규칙의 번호를 이용하거나 추가된 규칙 구문을 이용하면 됩니다.

LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
[ 1] 22                    ALLOW IN    192.168.0.10
[ 2] 22                    ALLOW IN    192.168.0.15
[ 3] 22                    ALLOW IN    192.168.0.20		// shift down

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw delete 2
LYSH@MyHostName(config)# exit

LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
[ 1] 22                    ALLOW IN    192.168.0.10
[ 2] 22                    ALLOW IN    192.168.0.20

추가될때 사용한 구문을 이용해 규칙을 삭제하려면 아래 명령어로 구문을 확인 후 삭제하면 됩니다.

LYSH@MyHostName# show ufw added
ufw allow from 192.168.0.10 to any port 22
ufw allow from 192.168.0.20 to any port 22

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw delete allow from 192.168.0.20 to any port 22
LYSH@MyHostName(config)# exit
LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
[ 1] 22                    ALLOW IN    192.168.0.10


기본 규칙을 "deny"로 전환

필수 규칙을 포함해 모든 "allow" 규칙을 생성하였다면 기본 규칙을 "deny"로 변경 하세요. 사용하는 호스트의 IP 주소가 SSH 접속이 허용되었는지도 반드시 확인하세요.

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw default deny
LYSH@MyHostName(config)# exit
LYSH@MyHostName# show ufw
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
[ 1] 22                    ALLOW IN    192.168.0.10
[ 2] 22                    ALLOW IN    192.168.0.20

만일 기본 규칙을 "deny"로 설정 후 SSH 연결이 차단되면 콘솔을 이용해 접근해야 합니다.

reset

reset 명령어를 실행하면 모든 규칙이 삭제됩니다. 또한, 기본 incoming 규칙이 "allow"로 바뀌며 ufw 상태도 "미사용"으로 변경됩니다.

LYSH@MyHostName# configure
LYSH@MyHostName(config)# ufw reset
LYSH@MyHostName(config)# exit
LYSH@MyHostName# show ufw
Status: inactive
LYSH@MyHostName# show ufw added
(None)

log

ufw에 의해 차단된 트래픽 로그는 show log ufw를 통해 확인 할 수 있습니다.

References