우선 외부 망과 파일을 공유하는 용도로 순수 FTP를 쓰면 안된다.
패킷 스니핑을 통해 평문상태의 ID, 패스워드는 물론이고, 주고받는 파일 데이터까지 전부 노출되기에
FTP를 통해 내부-외부 망간 데이터 통신은 안하는게 좋다.
대안 방법으로 SFTP 가 존재하는데,
FileZilla 를 이용하거나, FreeFTPd 등을 이용하는 방법등은 당연히 알고 있으리라 생각된다.
다만 이 프로그램들은 하나씩 나사가 빠져있다.
우선 FileZilla 는 '업력' 이 좋지 않을뿐더러, 더이상 무료버전에서는 SFTP를 지원하지 않는다.
FreeFTPd 의 경우 작동하긴 하나, 유지보수한지 너무 오래되어 운용이 심각하게 어려울 정도로 버그가 산재되어 있다.
여러가지 검색을 통해 나는 가용할만한 프로그램이 없을을 깨닫고, 안정성에 중심을 맞춰
Linux 처럼 Windows 자체 기능만으로 SFTP 서버를 구축할 순 없을까 좀 알아본 뒤 내용을 정리 해 보았다.
1. 동작환경
Windows 11 / CUI (Console)
2. SFTP의 동작원리
암호화 알고리즘에는 '공개키' 방식과, '대칭키' 방식이 존재한다.
'대칭키' 방식은 차 키나, 집문을 여는 열쇠를 생각하면 된다.
키하나로 문을 잠그고, 열 수 있다.
반대로 공개키 방식은 잠그는 키와 여는 키가 다르다.
공개키 방식에서는 키가 두가지가 존재한다.
'공개키', '개인키' 로 두가지가 존재하는데
평문을 -> 암호문으로 변환 할 때는 '공개키'를 이용하나,
암호문을 -> 평문으로 변환 할 때는 '개인키' 를 이용한다.
이 원리를 이용해 암호문이나, 파일 내용등 모든 내용을 암호화하여 전달할 수 있다.
자세한 내용은 아래 링크를 참조하길 바란다.
이 내용을 굳이 설명하는 이유는, SFTP 의 경우 SSH 를 기반으로 동작하는데,
이 SSH가 '공개키' 방식의 암호화인 RSA, 디피헬만을 기반으로 동작하기 때문이다.
3. 선택적 기능 추가 - OpenSSH
아래 이미지서 붉은 박스를 그대로 따라 클릭한다.
기능 보기 란을 클릭하여 OpenSSH 를 입력하면
[OpenSSH 서버] 라는 놈이 있을것이다. 그 놈을 설치 해 준다.
참고자료
4. 서비스 체크
서비스 항목에 진입하여 OpenSSH 관련되어 두가지 서비스가 잘 설치 되었는지 확인한다.
만약 윈도우 재시작과 동시에 SFTP 서버를 실행시키고 싶다면, 두 서비스를 각각 우클릭 하여
시작유형을 - 자동으로 설정 해 주면 된다.
5. SFTP 설정
위 과정을 거친뒤, SFTP를 설정 해 주어야 한다.
위에서 언급했듯 SFTP 는 SSH를 매개로 이용하므로, 해당 설정 폴더로 이동한다.
해당 폴더로 이동한뒤 sshd_config 파일을 확인한다.
해당 파일은
위와 같은 구조로 되어 있는데, Port 넘버를 바꾸거나, ListenAddress 를 변경하는 등 여러가지 작업을 수행할 수 있다.
여기서 기본적으로 설정할 내용은
ChrootDirectory 부분이다.
해당 부분의 "#" 주석을 지워 주고,
뒤에 실제로 운용할 SFTP 폴더를 기재한다.
이를 저장하고 서비스 란으로 이동하여
OpenSSH SSH Server 를 '다시시작' 해 준다.
6. 로그인 ID 설정
컴퓨터 관리 항목으로 이동한다.
사용자 항목을 클릭한뒤
새 사용자를 추가 해 준다.
그 후 생성된 사용자를 누르고, 우클릭 → 속성 옵션으로 들어간다.
아마 그룹이 지정되어 있을 것이다, 해당 그룹을 '제거' 해 준다.
이제 기본적인 설정은 모두 끝났다.
7. SFTP 를 접속 해 보자.
굳이 다른 PC 에서 접속할 필요 없이, 현재 설정한 PC 에서 시도해 봐도 좋다.
수많은 클라이언트들이 있지만 (FileZilla, WinSCP, 알드라이브 ...) 나는 콘솔 그대로 쓰는걸 선호한다.
때문에 CMD 를 통해 테스트 한다.
CMD를 통해 아래 명령어를 실행시킨다.
sftp 사용자이름@IP주소
그럼 아마 '처음' 접속하는경우 뭐 블라블라... 뜨면서 Yes / NO 란이 뜰텐데.
Yes 를 입력 해 준다.
이게 바로 위에서 말했던 '공개키' 를 교환하는 과정이다.
그렇게 공개키를 받고, 비밀번호를 입력하고 나면
이런 창이 뜰텐데, 여기서 몇가지 명령어를 이용해서 SFTP 서버를 활용할 수 있다.
7-1) 파일 확인
7-2) 현재 SFTP 서버 위치 확인 (리모트)
7-3) 다운받아질 위치 확인 (내 로컬)
7-4) 파일 다운받기
7-5) 파일 업로드하기
7-6) 명령어들 확인
? 나 help 명령어를 통해 사용할 수 있는 명령어들을 체크할 수 있다.
여담으로 안드로이드 폰이 있다면 해당 폰을 통해 같은 내부망의 Wifi 를 잡아준다면, 문제없이 접속 가능하다.
8. 외부 망과 통신도 가능한가요?
포트포워딩을 통하면 안될것도 없다. 테스트 결과 아주 원할하게 잘 이루어 진다.
포트 포워딩 관련한 글들은 찾아보면 많이 나오니, 쉽게 할 수 있을 것이다.
9. 로그 확인방법
로그를 기록하고, 이를 확인하는 과정을 통해 허가되지 않은 접속 흔적이 있는지 체크하는 것은 서버 관리의 기본이다.
기본적으로 Windows 상에서는 이벤트 뷰어를 통해 Log를 확인할 수 있다.
SyslogFacility 옵션을 변경하면 File 기반하여 Log를 기록할 수도 있다.
10. 여담
여기까지 진행해 본 사람이라면 알겠지만, Windows 의 OpenSSH 는 Linux 의 SSH 구조를 그대로 모방한 구조이다.
실제 Core 가 어떻게 동작하는지는 모르겠지만, 아마 Linux 와 많은 연관이 있을 것이다.
Linux 환경에서 SSH, SFTP 를 운용해 본 사람이라면 크게 문제없이 운용할 수 있을 것이다.
끝.