Type and press Enter.

우분투 18.04로 서버 운영하기 – UFW로 방화벽 설정 및 22번 포트 변경

우분투(Ubuntu) 18.04를 운영체제로 서버를 운영 시 초기 단계에 해당하는 방화벽 세팅에 대한 이야기 입니다.

1. 우분투(Ubuntu) 18.04 설치 시리즈를 시작하며

2018년 초에 발표된 우분투(Ubuntu) 18.04는 기존과 같은 것 같으면서도 미묘하게 다른 점이 있습니다.

서버 운영체제로 우분투(Ubuntu) 18.04를 설치해보면서 얻었던 삽질기를 기반으로 우분투(Ubuntu) 18.04에서 서버를 안전하게 설치하는 방법에 대한 고민을 나누어 보도록 하겠습니다.

오늘은 서버 설치 시 초기 단계에 해당하는 방화벽 설정에 대해서 다루어 보겠습니다.

#1. root 대신할 사용자 등록 및 권한 부여하기

#2. UFW로 방화벽 설정 및 22번 포트 변경

2. 우분투(Ubuntu) 18.04에서 방화벽 설정

방화벽 설정은 기본적으로 iptables을 사용해 설정합니다. 방화벽 설정 관련 강력하고 여러 문제에 유연하게 대처할 수 있는 방법들을 제시하고 있죠.
문제는 이 iptables 규칙 설정이 조금 까다로워서 많은 공부가 필요하다는 점입니다.

그래서 이 방화벽 보안 규칙을 단순하면서도 강력함을 잃지 않게 방화벽을 적용할 수 있도록 만들어 주는 것이 UFW(Uncomplicated Firewall)입니다.
iptables에서 가장 많이 사용하고 필요한 기능들을 쉽게 적용할 수 있도록 만들어주는 거라 볼 수 있는데요. 그렇게에 iptables만큼 복잡하게 옵션을 주기에는 한계가 있습니다.

보안의 기본은 들어올 수 있는 방안을 최소화하고, 얼짤 수 없이 열어야하는 길(포트)도 알 수 있는 방법을 최소로 만드는 것입니다.

이러한 작업을 쉽게 해줄 수 있는게 UFW(Uncomplicated Firewall)라고 할 수 있습니다.

2.1. IPv6를 사용할 것인지 결정

대부분 IPv4를 사용하지만 IPv6를 사용하는 경우에는 이를 사용할 수 있는지 확인합니다.

우분투 18.04를 설치 시 이는 기본으로 설정되어 있습니다. 일반적으로 사용하지 않는다면 IPv6를 사용하지 않토록 설정 합니다.

보안의 기본은 허용 범위를 하나라도 줄이는 것입니다.

1
nano /etc/default/ufw
cs

위에서 편집기를 nano를 사용했는데요. 편집기는 nano말고 vi등 쓰기 편한 것으로 대체하면 됩니다.

여기에서 IPV6=yes로 되어 있는데요. yes를 no로 변경하면 됩니다.

이를 저장하면 바로 UFW(Uncomplicated Firewall)가 작동하면서부터 이러한 세팅은 적용이 됩니다.

2.2. UFW 기본 세팅으로 돌아가자

뒤에서 진행할 SSH 포트 변경을 진행하려면 UFW 기본 세팅 상태에서 진행되어야 합니다.

기존은 나가는 것은 전부 허용하고 들어오는 것은 전부 막는 것입니다.

1
2
ufw default deny incoming
ufw default allow outgoing
cs

2.3. UFW 적용 전 SSH 포트를 정리하자

이전 우분투 버젼에서는 UFW 적용후에도 SSH 포트를 22번에서 다른 포트로 변경이 어렵지 않았는데요.
우분투 18.04에서는 UFW 적용 후에는 SSH 포트 변경이 쉽지 않더군요. 결국 포기하고 22번 포트를 사용하다 최근 대규모 공격을 받고 말았습니다.
다행히 큰 피해를 입지는 않았지만 종일 마을을 졸이기는 했습니다.

서버 보안 중요성을 새삼 일깨워 준 루트에 갑자기 생긴 파일 하나 – basic_passwords.txt

UFW를 가동시키기 전에 우선 SSH 포트를 설정합니다. SSH 포트 설정은 두가지 방법이 있죠

1
2
3
4
5
ufw allow ssh
 
또는 
 
ufw allow 22
cs

이러면 SSH 포트로 22번을 사용하는 것입니다. 이는 누구에게나 알려진 포트이므로 SSH 공격에 쉽게 노출 되겠죠 그래서 다른 포트를 사용하는 방법을 적용합니다.

먼저 SSH 포트로 사용할 숫자를 정해 포트를 허용합니다. 수치는 15342와 같이 1만이 넘는 자신이 기억하기 쉬운 수치로 정합니다.

1
ufw allow 15342
cs

그 다음에 sshd_config에서 22번대신 사용할 포트인 15342로 변경해 줍니다.

1
nano /etc/ssh/sshd_config
cs

편집 상태로 들어가 보면 #Port 22로 막혀있는데요. 여기에서 #Port 22에서 #을 없애고 22번을 15342로 바꾸든지 아니면 그 아래줄에 Port 15342를 넣든지 상관은 없이 새로운 포트를 반영해주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
#Port 22
Port 15342
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
 
또는 
 
Port 15342
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
cs

이렇게 포트를 변경한 후 ssh 서비스를 재시작 합니다.

1
service ssh restart
cs

2.4. UFW를 가동시키자

위에서와 같이 SSH 포트를 변경했으면 UFW를 가동시킵니다.

UFW 가동은 가단한 아래 명령어로 가능합니다.

1
ufw enable
cs

2.5. 다른 접속 포트를 허용하자

웹서버를 운영하려면 기본적으로 80포트와 443포트는 열어 놓아야 합니다.

이와같이 반드시 열어야할 포트를 설정합니다. 저는 단순화하기 위해서 80과 443만 열었습니다.

1
2
3
ufw allow 80
 
ufw allow 443
cs

사용하는 환경에 따라서 일정 포트 범위를 열어야 하는 경우도 있죠.
X11 접속을 위해서는 포트를 6000~6007번 포트를 상요해야합니다 이럴 경우 아래와 같은 명령어를 사용합니다.

1
2
ufw allow 6000:6007/tcp
ufw allow 6000:6007/udp
cs

또 특정 포트에 특정 IP만 허용토록 설정할 수 있습니다.
SSH 포트에 특정 IP만 접속토록 허락하는 방법입니다.
아래는 22번 포트에 203.203.203.203 IP만 허용하는 방법입니다.

1
ufw allow from 203.203.203.203 to any port 22
cs

또 IP를 범위로 한정해서 허용할 수도 있습니다.
예를 들어 203.203.203.203에서 203.203.203.250까지의 IP를 형요할수도 있고 이들 포트가 22번같은 특정 포트에 접속할 수 있다고 허용할 수 있습니다

1
2
3
ufw allow from 203.203.203.203/250
 
ufw allow from 203.203.203.203/250 to any port 22
cs

2.6. 접속 포트를 불허하는 경우

위에서와 같이 접속을 허용했지만 상황이 변경되어 접속을 불허하는 경우도 생기겠죠.
이렇 경우는 deny 명령을 사용합니다. 예를 들어 22번 포트를 불허한다면 아래와 같이 사용합니다.

1
ufw deny 22
cs

특정 IP 접속을 불허한다면 마찬가지로 from + IP 명령을 사용합니다.

1
ufw deny from 203.203.203.203
cs

2.6. UFW 룰 삭제하기

위에서 정한 룰을 삭제하는 것은 delete를 사용합니다

1
ufw delete allow 80
cs

2.7. UFW 룰 상태를 보기

UFW 룰이 어떻게 세팅되어 있는지를 확인하는 명령입니다.
이때는 status 명령을 사용합니다.

1
2
3
4
5
ufw status
 
또는 
 
ufw status numbered
cs

위 명령어 중 ufw status numbered은 UFW룰 번호를 알려주는데요. 이 번호를 이용해 룰을 지울 수 있습니다.
만역 3번 룰을 지우겠다고하면 아래처럼 사용할 수 있습니다.

1
ufw delete 3
cs