외부에서 대용량 파일을 업로드할 일이 생겨서 어떤 방법을 사용할까 궁리하다가 SCP 를 사용하기로 했습니다.

접속자가 ssh 로 연결해서 시스템을 이리 저리 둘러 보는 것은 보안상 문제가 있으니 권한이 제한된 restricted shell(rbash) 을 로그인 셸로 설정하기로 했습니다.


그런데 rbash 는 scp 가 동작하지 않는 문제가 있어서 다른 방법을 찾다가 FTP 로 파일을 받기로 정했습니다.

FTP 는 오래된 서비스지만 IT 에 익숙하지 않은 이도 어렵지 않게 사용할 수 있고 검증된 서비스니까요.


하지만 FTP 는 암호화가 되지 않은 패킷이 오가는 등의 보안 문제가 있으므로 어떻게 견고하게 할까 고민하다 보니 FTP 서버인 vsftpd 가 SSL/TLS 를 지원하는 것을 알게 되어 FTP + SSL/TLS 로 서비스를 구성했ㄱㅎ 그 과정을 기록해 봅니다.

설치

먼저 패키지 매니저를 통해서 vsftpd 를 설치하고 자동으로 구동되도록 설정합니다.

sudo yum install vsftpd
systemctl enable vsftpd
systemctl restart vsftpd
CODE


설정

/etc/vsftpd/vsftpd.conf  를 열어서 다음 내용을 추가합니다.


이제 TLS 연결에 사용할 인증서를 저장할 폴더를 생성합니다.

sudo mkdir /etc/ssl/private
CODE


TLS 연결에 사용할 RSA 인증서를 생성합니다.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
CODE


생성할 때 Common name 에는 연결할 서버의 IP 나 Domain name 을 적어줍니다.


firewalld 를 사용한다면 방화벽에 포트를 추가해 줍니다.

sudo firewall-cmd --permanent --zone=dmz --add-port=2120-2142/tcp   
CODE

zone 이름은 사용자 환경에 따라 다를 수 있으며 firewall-cmd --get-active-zone 명령어로 활성화된 존을 확인할 수 있습니다.


방화벽 설정이 끝났으면 설정을 반영합니다.

sudo firewall-cmd --reload
CODE


만약 사용자가 home 디렉터리 이외의 폴더를 읽어야 한다면 FTP 접속시 홈 이외 폴더를 읽기 위한 Linux bind mount 사용법 를 참고해서 대상 폴더를 bind 마운드 해줍니다.

FileZilla 설정


파일질라의 Site Manager 에 다음과 같이 설정해 줍니다. Port 는 listen_port 이며 Protocol 은 FTP, Encryption 은 Use explicit FTP over TLS 를 선택합니다.


연결에 성공하면 아래와 같이 인증서를 신뢰하겠냐는 창이 뜨며 Always trust 를 체크합니다.


같이 보기

Ref