<BGM>
0 Overview
하드커널 사에서 만든 Odroid-XU4의 개량형으로 NAS를 위해 만들어진 싱글 보드 입니다.
Odroid-XU4에 내장된 emmc 가 제거되고 대신 SATA 포트가 보드에 내장되어 있으므로 HDD/SSD와 직접 연결 가능합니다.
* Samsung Exynos5422 Cortex-A15 2Ghz and Cortex-A7 Octa core CPUs
* 2Gbyte LPDDR3 RAM PoP stacked
* SATA port for 2.5inch HDD/SSD storage
* Realtek Gigabit Ethernet port
* 1x USB 2.0 Host
* 5V via power barrel, "backup" Header for BAT' for RTC
* UHS-1 capable micro-SD card slot for boot media
* Size : 147 x 85 x 29 mm approx
Odroid-XU4 계열(Odroid-HC1, Odroid-HC2)을 지원하는 운영체제 이미지가 많으나, 공식적으로 지원하는 것은 Ubuntu와 Android 입니다. NAS 용 운영체제로 많이 사용되는 OMV(OpenMediaValt)도 있지만, Ubuntu처럼 섬세하게 다루기는 어렵습니다. Ubuntu를 설치하면 OMV에서 자동으로 잡아 주었던 것들을 수동으로 직접 해주어야 하지만, 그만큼 더 꼼꼼하게 설정할 수 있습니다. 그리고 무엇보다 입맛에 맞게 설정할 수 있습니다! 리눅스에 대해 지식이 있는 분들에게는 당연히 쉬운 일이지만, 리눅스 시스템을 처음 접해본 사람들에게 한 마디 하자면, 편의를 위해 개인적으로 프로그래밍을 하지 않는 다면, NAS를 위한 서버 구축은 어렵지 않습니다. NAS를 Ubuntu로 만들면, NAS를 운영한다는 느낌이 OMV로 했을 때보다 강하게 들 것입니다. 아래 서술한 내용은 사용 후기 및 Odroid-HC1의 간단한 Ubuntu NAS 가이드로 다른 서버 프로그램을 이용하지 않기 위해 네트워크 방식을 SSH 프로토콜로 설정하였습니다. Odroid가 ARM 계열이기에 amd64 & x86 프로세서 지원하는 Windows는 Odroid에서 사용할 수 없습니다. Windows 10 IoT는 설치를 한 번도 안 해봐서 Odroid에 작동되는지는 모르겠습니다. 되더라도 이것은 일반적으로 생각하고 있는 Windows가 아니라서 Windows 환경을 원하는 분에겐 별 의미는 없습니다. 아직 정식으로 ARM 용으로 발매된 일반 Windows 운영체제는 없습니다. Odroid-HC1에대한 총평 및 Sysbench 테스트 결과는 글의 중간 부분에 있습니다.
[업데이트]
2017년도 하반기(11월)에 출시예정이었던 Odroid-HC2가 2018년도 1월에 출시되었습니다. 오드로이드-HC1은 2.5인치만 지원했지만 오드로이드-HC2는 HC1에서 하드웨어 적인 성능 개선은 없고 3.5인치 하드 디스크를 지원할 수 있습니다. 따라서 이 포스트는 오드로이드-HC1 뿐만아니라 오드로이드-HC2에도 그대로 적용될 수 있습니다.
* 12V header for 3.5"
[/업데이트]
I Odroid-HC1 Ubuntu 설치 및 사용기
Odroid Image Writer를 다운로드 받습니다.
링크 :[우분투 마테]
에서 16.04.3 버전의 Ubuntu mate(우분투 마테)를 내려받습니다. 다운 받은 이미지를 7zip과 같은 프로그램으로 압축을 풀면
ubuntu-16.04.3-4.9-mate-odroid-xu4-20170824.img 와 같은 파일이 생성되는데,
Win32DiskImager_odroid_v13.exe 을 실행시켜 해당 이미지를 아래처럼 등록하면 됩니다.
Write를 클릭하면 SD카드에 쓰여지니 작업이 다 끝날 때까지 기다립니다.
공식 지원하는 Ubuntu 마테를 설치하기 싫다면, Odroid-XU4에 맞게 개조된 [우분투 서버]나[데비안-stretch][데비안-Jessie]을 설치하면 됩니다. ( 처음 부팅 시 설치시간 약 35초 소요, ID : root Password : 1234 ) 리뷰 당시엔 우분투 마테를 사용했지만 현재는 Armbian을 사용 중입니다. (Rufus Image Writer를 이용합니다.)
위 사진을 보시다시피 이 디바이스에는 HDMI 포트가 없습니다! 이 말은 곧 GUI 없이 CLI로만 작업해야 하는 것을 뜻합니다. 물론 vnc 같은 것을 깔아서 GUI로도 제어할 수 있겠지만... GUI로 해도 앞으로 진행 과정을 보면 별 의미가 없으며, 초기 설정은 어떤 것을 이용할 계획이더라도 SSH로 작업해야 하는 것은 변함이 없습니다. 초기 설정만 끝나면 Customzing을 하지 않는 이상 터미널에 접속할 필요는 시스템 업데이트를 제외하고 거의 없으나, GUI가 필요하신 분들은 데이터 전송 속도 손실을 감안하고 XU4를 구입하고, 터미널 두드러기가 있는 분들은 윈도우를 올릴 수 있는 자작 NAS로 가는 것을 권합니다. 라즈베리 파이3는 이보다 2만원 정도 저렴한 편이지만 기가비트 인터넷을 지원하지 않고(다른 것보다는 이게 제일 큰 문제입니다.) Exynos5422 코어보다는 성능이 떨어지기 때문에 NAS 용도로 사용하기에는 적합하지 않다고 생각합니다. 반대로 HC-1은 NAS에 특화되어있는 보드이므로 보편적인 개발용 보드로 사용하기에는 문제가 있습니다.
초기 설정 이후 GUI를 사용할 계획이라면, boot 파티션에 있는 설정 파일을 변경해야 합니다. 이 부분은 공식 홈페이지에 들어가면 잘 설명되어 있습니다. 또한 OMV, FreeNAS와 같은 NAS 친화적인 운영체제가 아니라 범용 운영체제인 Ubuntu 이므로 자동 로그인 설정을 해야 합니다. Windows에 익숙하고 Linux에 낯선 분들을 위해 설명합니다.(자동 로그인 설정해도 되고 안 해도 됩니다. 어차피 ligthdm을 사용하지 않을 것이기 때문에..., 즉 아래의 파일 수정 부분은 건너뛰어도 상관없습니다.)
Windows에서는 Native로 ext4 타입의 포맷을 마운트할 수 없으므로, Live USB를 만들어 리눅스로 부팅합니다.
Rufus Disk Image Writer [https://rufus.akeo.ie/downloads/rufus-2.18.exe]
Ubuntu 16.04.3 Image [http://releases.ubuntu.com/16.04/ubuntu-16.04.4-desktop-amd64.iso]
부팅 usb를 만드는 방법은 위에 설명한 SD카드에 이미지를 삽입하는 과정과 똑같습니다.
여하튼, Lightdm을 사용하는 리눅스 환경 (e.g. Ubuntu Unity)로 부팅하면
리눅스에 익숙하지 않으신 분들을 위해 GUI 로 설명하면...
sudo nautilus / 을 입력하여 관리자 모드로 GUI 파일 관리자에 들어갑니다. (mate desktop이면 sudo caja / )
파일 관리자 창에보면 마운트된 볼륨이라고 쓰여져 있는 곳에 있는 알맞은 디스크 파티션(rootfs)을 클릭합니다.
/usr/share/lightdm/lightdm.conf.d/ 안에
60-lightdm-gtk-greeter.conf 파일을 만들고
파일에 아래 내용을 입력하고 저장합니다. ( gedit 60-lightdm-gtk-greeter.conf )
[SeatDefaults]
greeter-session=lightdm-gtk-greeter
autologin-user=odroid부팅 시에 자동으로 로그인 되므로 ssh를 통해 접속할 수 있으며, 그에 따라 사용자의 스크립트에 의한 서비스를 받을 수 있습니다.
이제 Odroid-HC1을 LAN 선에 꼽고 전원을 켜 부팅합니다. 그러면 Odroid가 스스로 운영체제를 설치합니다. 데스크톱에서의 리눅스 설치 과정을 생각하시면 안됩니다. 라즈베리 파이 만져보신 분들이라면 아실 겁니다. 설치가 자동으로 되므로 설치 과정 자체는 쉬운 편입니다. 설치는요. 물론 유선이 아닌 무선(WiFi)으로도 (추가 설정하여, HDMI 없이)사용할 수 있으나, 유선에 비해 보안도 취약하고 속도도 느리므로 NAS에서 WiFi을 통해 연결해서 사용하는 것은 추천하지 않습니다.
설치하는데 시간이 걸리는 편이니, 커피 한 잔하고 난 뒤에 Odroid를
재부팅합니다. Odroid용 Ubuntu에는 SSH Server가 자동으로 실행되므로 데스크톱이나 노트북에서 SSH 접속을 통해
사용할 수 있습니다. 리눅스의 경우 터미널만 있으면 모든 것이 해결되지만, 윈도우는 터미널을 거지고 모든 것을 할 수는 없습니다,
PuTTY와 같은 별도의 프로그램을 설치하고 싶지 않으면 Firefox Adds on인 FireSSH을 사용할 수 있습니다. FireSSH은 하단의 "사용자 계정 추천 sftp 프로그램"에 서술되어 있습니다. 심지어 PC없이 Termux와 같은 스마트폰 어플 만을 이용해서 NAS에 대한 모든 설정을 할 수 있습니다. 따라서, 어떤 것을 사용하도 하고자 하는 것은 똑같으니 편한 것을 고르면 됩니다. 설명에서는 Mobaxterm이라는 SSH 툴을 사용합니다. Mobaxterm 프로그램은 개인에게 무료로 제공되며, 기업에서 사용하실
때에는 라이센스를 구입해야 하는 상용 프로그램입니다.
[ https://mobaxterm.mobatek.net/download-home-edition.html ]
파일을 압축 풀고, .msi 파일을 실행하면 설치됩니다.
Session을 클릭하면 맨 좌측에 있는 SSH를 클릭합니다.
옵션에 보면 SFTP를 이용할 것인지 SCP를 이용할 것인지 선택할 수 있습니다. 이것은 추후에 설정에서 변경이 가능하니 여기서는 넘어갑니다. 만일, Odroid IP를 모른다면, 포트 스캐너를 사용합니다. nmap이 대표적이며 강력한 포트 스캐너지만 포트 스캐너를 잘못 사용하면 범죄행위가 될 수 있으므로 advanced port scanner를 사용해 봅시다. [ https://www.advanced-port-scanner.com/download/pscan24.exe ]
그전에 프롬프트 창에서 ipconfig 명령어를 입력합니다. (리눅스 : ifconfig & ip addr show)
보통 내부 ip는 10.x.x.x 172.x.x.x 192.x.x.x 이렇게 나갑니다.
advanced port scanner 의 경우 내부 ip 범위를 디폴트로 잡아줘서 위 과정을 굳이 알 필요는 없지만 아무래도 NAS를 사용하려면
네트워크 명령어에 친숙해져야 합니다.
사실 번거롭게 포트 스캐닝을 할 필요 없이 공유기 설정하는 URL이 있습니다.
KT의 경우 http://homehub.olleh.com 로 설정되어 있습니다. LG U+, SKT도 각각 있습니다.
하지만 저희 집은 KT이므로....
유/무선 단말 정보에서 접속 단말 정보에 보면 MAC ADDRESS와 IP 주소가 있는 것을 볼 수 있습니다.
보통 데스크톱은 LAN1으로 되어있으니 새로 꼽은 ODROID는 다른 LAN 번호가 주어져 있을 겁니다.
외부 ip 확인 명령어 (Linux)
1. curl v4.ifconfig.co
2. curl ifconfig.me
3. curl bot.whatismyipaddress.com
내 현재 ip주소 확인하는 사이트 : MyIP
그리고 포트 포워딩을 KT,LG U+,SKT, ipTime이든 상관없이 공유기 설정에서 할 수 있습니다. 포트포워딩을 함으로써 외부에서 Odroid 단말기로 바로 접속할 수 있습니다. 공유기에서 안된다면 내부 ip로 SSH로 접속한 다음 ubuntu 내에서 포트 포워딩을 하셔야 합니다. 다른 블로그에 공유기에서 포트포워딩 하는 방법이 소개 되어있으므로 여기선 생략하겠습니다. 리눅스에서 포트포워딩 방법은
[ https://blog.lael.be/post/69 ] 참고하세요.
↑ 공유기에서 포트포워딩 하는 방법 (공유기마다 화면이 다릅니다!)
참고) PORT FORWARDING SSH on Linux with iptable
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination {device internal ip}:{forward port}
# iptables -t nat -L -n -v
Specifiy username은 빈 칸으로 두어도 됩니다. 내부 ip를 이용할 경우 경우 22번 포트를 포트포워딩을 통해 외부 ip를 이용할 경우 포트포워딩에서 설정한 포트 번호를 입력합니다. 여태 까지 한 과정에 문제가 없다면 OK 버튼을 클릭함과 동시에 검은 화면이 뜨면서
login as
글자가 나오면 성공입니다.
ID는 odroid, 디폴트 PW는 odroid입니다.
접속하면 일단 passwd 명령을 통해 디폴트 암호를 변경합니다. 키보드를 눌러도 아무 것도 나오지 않는다고 이상하게 치면 안 됩니다.
암호는 안 보이는 것이 정상입니다.
접속에 성공하고 암호를 바꾸었다면 아래 명령어를 차례대로 입력합니다.
sudo apt-get update; sudo apt-get upgrade -y;sudo apt-get autoremove -y ; sudo apt-get autoclean
Debian 계열의 package 관리하는 명령어입니다.
apt-get의 업그레이드 작업이 끝나면
sudo apt-get install iptables-persistent
sudo apt-get install vim
sudo apt-get install iftop
sudo apt-get install quota quotatool 를 입력합니다.
나머지는 입맛에 따라 추가적으로 패키지나 프로그램을 설치하면 됩니다.
GUI Xsession 없이 SSH만 이용할 것이므로 cpu만 잡아먹는 lightdm을 해제합니다.
sudo systemctl disable lightdm.service
lightdm이 해제되었으므로 이제부턴 자동 로그인이 되지 않습니다. CLI 자동 로그인은 Addition4 에서 다룹니다.
Mobaxterm 왼쪽에 있는 바는 sftp 창입니다. 이 창을 통해 GUI로 파일을 업로드/다운로드 할 수 있습니다.
sftp 창의 아래 방향 화살표를 클릭하면 파일을 다운로드 받을 수 있고 윗 방향 화살표를 클릭하면 파일을 업로드 할 수 있습니다.
파일을 업로드 할 경우 sftp바는 자동으로 동기화 되지 않으므로 윗 방향 화살표 옆에 있는 버튼을 클릭하여 동기화 해줍니다. (붉은 동그라미 부분)
Linux 환경이라면 ssh, scp, sftp 명령어만 사용하면 간단히 해결됩니다. 하지만 윈도우에서는 scp 명령을 지원하지 않고 sftp 프로토콜을 디폴트로 지원하지 않으므로 툴을 사용하거나 포트를 개방해야 합니다.
다운로드/업로드 속도를 확인하기 위해 ssh Session에서 iftop을 입력합니다.
업로드 TEST
iftop 읽는 방법은 라인 별로 오른쪽 표시되는 3가지 정보가 2초 / 10초 / 40초 동안의 평균 전송량이고,
아래 표시되는 TX / RX / TOTAL 은 NIC로 들어온 실제 데이터를 의미합니다. 화살표는 패킷의 dst를 가리킵니다.
배송비 포함 약 75,000원 정도 되는 NAS인데 40초 평균이 170MB/s 나옵니다. 30~70MB/s 나오는 중저가의 가정용 상용 NAS보다 훨씬 빠른 편입니다. 가장 빨랐을 때는 260MB/s까지 찍어줬습니다.
< ↑ 다운로드 Test 40초 평균 204MB/s, 10초 평균 216MB/s >
< ↑ 상대가 100M WiFi를 사용하는 경우 >
40초 평균 55.5MB/s, 10초 평균 58.0MB/s
리눅스의 경우 파일 공유 및 전송 방법 :
[1] SFTP
1. sftp -P 22 (혹은 포트포워딩 포트 번호) odroid@Odroid의 IP 주소 (혹은 공유기 주소)
2. odroid@Odroid의 IP 주소 (혹은 공유기 주소)'s password :
3. sftp > put {옮기고 싶은 파일} /home/odroid/{목적 디렉토리}
혹은 get {받고 싶은 파일} {받고 싶은 디렉토리}
4. sftp > exit
혹은
[2] SCP
업로드 : scp -P port source user@host:destination
e.g) scp -P 22 sendmail.py odroid@10.0.0.45:/home/odroid/
다운로드: scp -P port user@host:source destination
e.g) scp -P 22 odroid@10.0.0.45:/home/odroid/sendmail.py /home/enki/
물론, 윈도우도 scp 명령어 사용가능합니다. 단, native로는 안되며 별도의 프로그램이 필요합니다. [
scp.exe ](PuTTY)
NAS를 사용하면 자주 사용하게 되는 명령어이므로 파일의 경로를 (계정/시스템) 환경변수에 등록합니다. 일반적인 용도로 NAS를 사용하면 scp 명령어를 사용할 일이 없을 수도 있겠으나, scp 는 커맨드 하나로 동작을 끝내기 때문에 자동화하기 용이합니다.
우리가 사용해서 접속하는 방법은 SSH이므로 보안과 프라이버시를 위해 SSH 만 접속 되게 하려면 SSH 쉘에서 아래 명령어를 순서대로 입력합니다. 어렵거나 복구할 자신이 없으신 분 혹은 토렌트를 사용하실 분들은 건너 뛰어도 좋습니다.
# 백업 파일
sudo iptables-save > iptable_update.rules
# iptable 초기화(기존 설정이 초기화 됨)
# sudo iptables -F (Don't use this command for keeping current ssh session when default is DROP)
# sudo iptables -X
# sudo iptables -Z
# SSH 만 접속 가능하게 하기
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
# Port Forwarding (설정한 대로 하시면 됩니다.)
# sudo iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
# sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination {device int' ip}:{forward port}
# sudo iptables -t nat -L -n -v
# 저장 작업 & 백업 파일
sudo netfilter-persistent save
sudo iptables-save > iptable_normal.rules
service ipstables restart
단, iptable 설정이 이렇게 되면 apt-get 명령어가 작동하지 않으므로, 평상시에 이 규칙을 사용하고 업데이트 할 때는 처음에 백업해 놓았던 iptable 규칙을 사용합니다. 이 때,
sudo iptables-restore < iptable_update.rules
이런 식으로 복원해주면 됩니다. 업데이트가 끝났으면,
sudo iptables-restore < iptable_normal.rulessudo netfilter-persistent save
으로 보안 설정을 되돌리면 됩니다. 물론 포트 80을 이용하는 토렌트도 안됩니다.
아래처럼 alias를 한 번 해주면, 관리자 권한의 ssh 세션에서 updatemode / proctectmode로 방화벽 규칙을 전환할 수 있습니다. 이렇게 하면 오타로 인한 실수가 줄어들 것입니다.
echo "alias updatemode='sudo iptables-restore < ~/iptable_update.rules' " >> ~/.bashrc
echo "alias protectmode='sudo iptables-restore < ~/iptable_normal.rules'" >> ~/.bashrc
포트포워딩과 SSH를 이용하면 좋은 점은 무엇보다도 sftp 어플리케이션만 설치하면 스마트폰과 바로 연동할 수 있다는 겁니다.
제가 설치한 앱은 Turbo FTP Client & SFTP Client 입니다. 리눅스 커널 프로그래밍은 할 줄 알지만, 안드로이드 어플리케이션은
못 만드는 관계로 play 스토어에서 다운로드 받았습니다. 별도로 설정을 해주지 않아도 안드로이드, iOS에서 간편하게 사용할 수 있습니다. 그리고 무엇보다도 파일을 평문으로 보내는 FTP보다 동적으로 암호화되는 SFTP가 보안성이 높습니다. 그래서 FTP 사용할 때는 SSL과 같은 암호화 계층을 별도로 설정해야 합니다.
↑ Turbo FTP Client & SFTP Client App
↑ Termux Terminal Emulator App
< Termux 에 ssh 클라이언트 설치 >
apt update
apt upgrade -y
apt install openssh -y
termux-setup-storage
ssh -p FORWARDING PORT USERID@IPADDRESS
단, 집에 있는 허브는 고정 IP가 아니라 유동 IP이므로 IP가 어느 순간 바뀔 수 있습니다. 바뀐 IP를 이메일로 전송해주는 기능을 추가한다면 굳이 고정 IP를 쓰지 않아도 언제 어디서든 접속할 수 있습니다.
현재 외부 IP를 이메일을 통해 자동으로 알리는 간단한 python 스크립트 예시 ->
sendmail.py (smtp port 587번, http port 80 open 필요)
디폴트로 5분에 한번 꼴로 외부 ip 주소를 점검하고, IP주소가 달라지면 지정된 메일로 송신하도록 되어있습니다. 사용법과 바꾸어야 할 부분은 파일 안에 적혀있습니다. 단순하지만 이런 스크립트를 사용하면 좋은 점은 고정 IP를 위한 추가 비용 없이 메일을 통해 IP주소를 확인하여 NAS를 사용할 수 있다는 점입니다.
오드로이드를 사용하다 보면 시간이 맞지 않는데, 아래 방법을 사용하면 시간을 맞출 수 있습니다.
vim dateset.sh
press [i] for insert // (마지막에 삽입)
date --set="$1"
hwclock --systohc
press [esc] enter :wq for out
sudo apt-get update
sudo bash dateset.sh "1 OCT 2017 18:00:00" // 현재 시간을 인자로 넘김.
rm dateset.sh // 제대로 되었으면 더 이상 필요 없으니 삭제.
NAS로 스트리밍 기능 원하시는 분이 많을 텐데, Ubuntu에서 Plex나 Ampache와 같은 스트리밍 프로그램이 설치 가능합니다. 제가 관심이 없어서 길게 설명하지는 않지만, HDMI 포트가 없는 HC1에서 Plex를 사용하려면 vnc와 같은 가상 데스크톱 세션이 필요하고, Ampache는 패키지를 내려받아서 사용하면 됩니다(포트 80(http), http://NAS IP/ampache). 하지만 트랜스 코딩 성능을 제대로 뽑아주려면 인텔이나 AMD CPU를 이용해 자작 NAS를 구성하는 편이 훨씬 좋습니다. 브리스톨릿지 A12-9800E[구매처]가 NAS 용으로는 가성비와 전성비를 잘 뽑아줄 듯 싶습니다. 원격으로 NAS를 종료하려면 관리자 계정 ssh 쉘에서
sudo halt 혹은
sudo shutdown -h now
을 입력합니다.
원격 종료시 주의할 점은 오드로이드 기종은 현재 WOL 기능이 없으므로, WOL기능을 사용하기 위한 별도의 장치를 만들지 않는 이상 원격에서 한번 종료하면, 그곳에 있는 누군가가 파워를 올리지 않는 이상 다시 사용하지 못한다는 것입니다. 그러므로 신중하게 종료 명령을 입력해야 합니다. HC1이 XU4처럼 POWER on PIN이 있었더라면 아두이노로 스위치를 만들 수 있었을 텐데...
II sftp 연동 프로그램 (Windows)
1) Swish ( Windows 7,8,8.1,10 )
SSH 쉘까지 연동되는 MobaXterm의 UI가 불편하다면 [ Swish ] 라는 프로그램이 있습니다. swish 프로그램은 탐색기 UI를 사용하기 때문에 윈도우 사용자에게 충분히 매력적인 프로그램 중 하나입니다. 장점이자 단점이라면 설정한 상위 디렉토리로는 이동이 안되며, 자동 동기화(수정 후 저장 기능)를 포기한 대신 클릭 하면 거의 바로 재생됩니다. ( MobaXterm은 다운로드 받는 속도가 재생 속도보다 빠릅니다. ) 공유 계정 사용자가 쓰기에는 적합한 프로그램 같습니다. 리눅스 사용하시는 분은 거의 대부분 관리자이실 테니... 계정 만들기는 아래의 Addition2,3 을 참고하길 바랍니다.MobaXterm은 ssh기능이 있고 세세하게 컨트롤 할 수 있어 관리자가 사용하기에 적절하고 swish 프로그램은 일반 사용자나
2) Starfire ( Windows 10 only )
MS App Store에서 내려받아 사용할 수 있는 무료 SFTP 클라이언트 앱입니다. 화려한 UI를 원하는 분들이나 터치가 지원되는 윈도우 태블릿 PC를 이용하는 분들이 사용하면 좋을 것 같습니다. 단, 한 개의 MS 계정 당 최대 10개의 Starfire 앱을 설치할 수 잇습니다.
1) 계정 추가 ( Add Bookmarks )

이 때, Directory는 /로 설정해주면 됩니다.

2) re-uploading 파일의 백업 파일 저장소 등록

3) 사용법
좌측 : SFTP 계정 세션
우측 : 클라이언트 컴퓨터 세션
이 때 우측엔 location에 다운받을 경로 입력 후 엔터 눌러서 접속해야 합니다.
파일 교환 방법은 아이콘을 전송하는 방향으로 움직이면 전송됩니다.

SWISH, STARFIRE 과 같은 GUI 프로그램이 있으므로 SSH로 NAS를 만든다고 모든 것을 CLI로 수행할 필요는 없습니다. 물론 필자의 입맛에는 CLI가 맞지만...3) Firefox - FireFTP Adds on ( UNIX, Windows ) [Update : Firefox 최신버전인 Quantum에서 동작하지 않습니다. 사용하려면 56버전 이하 혹은 Waterfox 사용을 권고드립니다.]
위의 프로그램이나 Filezila와 같은 프로그램을 사용하지 않더라도 Firefox Plugin을 사용하면 Firefox 브라우저에서도 sftp 기능을 사용할 수 있습니다. NAS를 사용하고 싶지만 사정상 별도의 프로그램을 설치하지 못하고, 네트워크 드라이브를 잡지 못할 때, 비록 속도는 느리지만 유용한 Adds on입니다.
1. https://addons.mozilla.org/ko/firefox/ 에서 FireFTP 설치
2. 개발자 탭 -> FireFTP
3. Create Account
<메인 TAB >
계정이름 : 별명
호스트 : NAS IP ( 필수 )
로그인 : 로그인 계정 ID
<연결 TAB >
보안 : 없음 -> sftp
포트 : 포트 포워딩 포트 혹은 sftp 연결 포트(22)
4. 계정 이름 선택 후 연결 버튼을 눌러 접속
브라우저를 이용해서 플랫폼 무관하지만, java script라 그런지 sftp의 다운로드 속도는 상기 프로그램보다 떨어집니다. 물론 속도가 가장 빠른 것은 명령어입니다...
윈도우 10 빌드 1709 이후부터는 윈도우 앱스토어에서 Ubuntu를 설치할 수 있습니다. [우분투 설치]
[파워쉘에서 관리자 권한으로]
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
reboot ( 재시작 )
[파워쉘에서 관리자 권한으로]
ubuntu
(설치 시간이 오래걸리니 아무 것도 뜨지 않는다고 종료하지 말기 바랍니다.)
Ubuntu를 설치하면 bash 쉘에서 ssh & sfftp 명령어를 통해 NAS에 접속할 수 있습니다. 물론 네이티브는 아니지만 가상화보다는 빠른편입니다. GUI 세션도 X-server 프로그램을 사용하면 지원가능하나 아직까지는 개발 과정 중에 있습니다.
5) Shell In A Box
NAS에 SSH 서버를 설치하여, 클라이언트(사용자가) 별도로 프로그램을 설치할 필요 없이 웹 브라우저에서 SSH 서비스를 이용할 수 있는 유틸리티입니다. 간단히 SFTP 명령어 정도는 알고 있고, 부득이하게 클리이언트에서 프로그램을 추가로 설치할 수 없는 경우 매우 유용한 방법입니다.
sudo apt-get install openssl shellinabox
패키지를 설치하면 자동으로 데몬이 실행되며 기본 포트는 4200번입니다.
설정을 추가로 하고 싶다면
vim /etc/default/shellinabox 에서 추가 설정사항을 입력하면 됩니다.
예를 들어 특정 IP 에서만 서버 접근을 허용하려면
SHELLINABOX_ARGS="--o-beep -s /:SSH:172.30.1.125"
설정을 변경하면 새 설정을 적용하기 위해 Shell In A Box 서비스를 재시작합니다.
sudo service shellinaboxd start
설치 후 제대로 동작하는지 확인하려면
sudo netstat -nap | grep shellinabox
을 입력하여 pid/shellinaboxd 가 정상적으로 출력되야 합니다.
Firefox의 주소창에 https://NAS_IP_ADDRESS:PORT_NO (e.g. https://10.0.0.1:4200)을 입력한 뒤 SSH 콘솔 로그인 글자가 출력되면 완료됩니다. 그 이후는 SSH 접속 과정과 동일합니다. 해당 페이지에서 우클릭을 하면 클라이언트의 환경을 설정할 수 있고, 글씨 크기는 ctrl+마우스 휠로 결정할 수 있습니다.
이상 HDMI 없이 막강하지만 작은 크기에 전력 소모도 적은 NAS, Odroid-HC1 리뷰 및 설치 가이드였습니다. 아래 부분은 추가 설정 부분입니다.NAS의
III 총 평
가성비 ★★★★★
기가인터넷 지원, SATA3 PORT, ARM-OCTA CORE
성능 총평 ★★★☆☆
ARM은 역시 ARM. x86 계열의 자작 NAS와 대비하여 성능이 좋지 않으나, 30-40 만원대 기성 NAS보다 뛰어난 성능을 자랑)
성능
- 전송 속도 유선 ★★★★★
- 전송 속도 무선 ★★★☆☆
- 발 열 ★★★☆☆ (저전력으로 인해 전반적으로 발열량 ↓, BUT 추가 장작가능한 쿨러 없음 )
- 열 설계 ★☆☆☆☆ (금속 케이스를 통해 열발산을 시도하는 것 같으나 열공학 교수의 의견에 따르면 거의 미비함)
- 전력 소모 ★★★★★
결론
가성비가 매우 뛰어나며 성능도 준수함
아톰으로 구성된 x86 시스템보다 소모 전력이 적음(저전력)
저전력인 ARM CPU를 사용하고 있으므로 발열이 크게 나지는 않음
다만 트랜스 코딩과 같이 부하를 많이 주는 작업은 열때문에 장시간 동안 작동하기는 어려워 보임
일반적인 용도라면 24시간 동안 동작해도 전혀 상관 없음
3.5" 하드지원은 HC1의 개선버전인 HC2에서 지원
HDMI가 없으므로 초보자가 사용하기에는 난이도가 존재
클러스터 만들기 용이
참고) Sysbench 결과
1) CPU Test
[Lower is better]
Score : 1382 (with max prime 10000)
Score : 3782 (with max prime 20000)
역수치 : 264 (with max prime 20000)
Y(x) = 3.711e-06 x^2 + 0.1272 x - 216.9
( R-square 0.99, SSE : 1607, RMSE : 28.35 )
Sysbench Cpu Test Alogrithm : O(n^2), confrimed with its source code.
참고) 라즈베리파이 3의 Sysbench 점수 :
[Lower is better]
Score : 4574 (with max prime 10000)
Score : 12008 (with max prime 20000)
역수치 : 83 (with max prime 20000)
참고) Intel-Atom x5-z8350 Sysbench 점수 :
[Lower is better]
Score : 1503 (with max prime 20000)
역수치 : 665 (with max prime 20000)
Sysbench Result
x5-z8350 (1503:665) > Exynos5422 Octa (3782:264) > Cortex-A53 Quad (12008:83)
2) Memory Test -- Read
3) Memory Test -- Write
p.s. )
NAS를 위한 소프트웨어/운영체제인 OpenMediaVault도 설치하여 사용해봤지만 본인에겐 Ubuntu가 에러도 없고 깔끔했으며, Ubuntu Server와는 달리 OMV는 GUI로 설정하기 쉬운 편에 속하므로 리눅스 비사용자 분들이 NAS 서버를 운영하기에는 적합합니다.
HC1을 구매하지 않더라도 XU4의 클라우드 쉘 케이스를 이용해 [이런 식]으로도 구성할 수 있습니다.
IV Additions
※ 이 부분부터는 Odroid 제품군 뿐만이 아니라 SSH 기반으로 운용되는 서버에도 적용될 수 있는 내용입니다.
0. 설정하기
1. 하드디스크 절전
2. 사용자 만들기
3. 하드디스크 마운트
4. 접속자 보안 옵션
Addition 0 ) 자동 설정
본문과 아래 내용을 전반적으로 아우르는 간단한 스크립트 파일입니다. 해당 파일을 Ubuntu 기반 NAS에 관리자 홈 디렉토리에 업로드하여 SSH 터미널에서 sudo bash .setup.sh 입력하면 됩니다. 설정을 하는 이유와 추가적인 설정은 아래 부분을 참고하기 바랍니다.
[*] 방화벽 적용
[*] 기본적인 ssh 보안 옵션 적용
[*] ICMP disable 적용
[*] Shell In A Box 추가 (3개 방화벽 모드 적용가능 : updatemode, protectmode, firefoxtmode)
[*] 선택 : webmin, transmission(http), sftp account : 4개 방화벽 모드 : torrentmode 추가
[
setup.sh ]
Addition 1 ) 하드디스크(HDD) 절전하기 (with hdparm)
sudo vim /etc/systemd/system/hdparm.service
[Unit] Description=hdparm sleep [Service] Type=oneshot ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb [Install] WantedBy=multi-user.target
# sdb 하드디스크를 15분 후에 대기(IDLE) 상태로 만듦
(-S second * 5 (1~240) such that 1min = -S 12 )
(-S minutes * 30 ([241-251]-240) such that 30 min -S 241 )
[ 추천 옵션] : sudo hdparm -B 128 -S 180 /dev/sdb
(-B 128~254, 255 : unlimited -B 옵션 값이 클 수록 성능이 좋지만 절전이 안됨)
[ 무난한 옵션] : sudo hdparm -B 127 -S 60 /dev/sdb
sudo hdparm -B 64 -S 180 /dev/sdb
(-B 1 ~ 127, -B 옵션 값이 클 수록 성능이 졸지만 절전이 안됨.
spindown을 자주 하는 경우 HDD 수명이 단축됨)
Addition 2 ) 사용자 만들기
odroid는 슈퍼 유저 권한을 가진 관리자 계정입니다. 만일 공용 NAS인 경우, 자녀 분들이나 컴퓨터를 잘하지 못하는 분들이 시스템 파티션을 잘못 건드릴 수 있기 때문에 사용자 계정을 만들어서 사용하는 것이 안전하며 시스템을 보호하기 위해 사용자 계정을 만들어서 제한된 데이터를 할당하고 외부에서 접속하는 것이 보안에 좋습니다. 관리자 계정을 집 혹은 신뢰할 수 있는 네트워크 시스템이 아닌 다른 곳에서 사용할 때는 반드시 주의가 필요합니다. 특히 관리자 계정은 인증서를 사용하거나 가능한 복잡한 암호를 사용하여 Brute Force 공격을 예방하기 바랍니다. 회사나 기관 등에서 보안을 위해 설치한 키로거를 통해 의도하든 의도하지 않든 패스워드를 가로챌 수 있습니다. 만일 관리자 계정이 노출된다면 사생활 노출은 물론 백업한 데이터까지도 전부 잃어버릴 수 있습니다.
우선 odroid 계정에서
sudo mkdir /home/users
파티션을 가진 사용자 계정을 만들려면,
sudo useradd -m -d /home/users/[계정 이름(영어로)] 계정 이름(영어로) ( ※ []는 생략 가능 )
그런 것 구분 없이 사용자 계정을 만들려면
sudo useradd 계정 이름
명령을 ssh 터미널에 입력하면 됩니다. 계정에 비밀번호를 설정하려면,
sudo passwd 계정 이름
ssh을 통해 접속하려면 반드시 계정에 비밀번호가 있어야 합니다.(그렇게 초기설정 되어있습니다.)
사용자 계정이 관리자 계정 폴더에 접근하지 못하게 하려면,
sudo chmod 700 -R /home/odroid
새로 만든 계정으로 odroid 홈 폴더에 접속할 때, permission denied 접근할 수 없습니다.
만약 sudo useradd -m -d /home/users/ client 로 만들었다면, 사용자 계정 client는 SD 카드 내에서는 아무것도 할 수 없습니다. 오직 이미 마운트된 HDD만 이용 가능합니다.
기본적으로 users 디렉토리의 소유권은 root로 되어있으므로 관리자 계정이어도 조작이 불가능합니다. odroid 계정이 users 디렉토리에 모든 권한을 가질 수 있도록 아래 명령어를 통해 소유권을 변경합니다.
sudo chown -R odroid:odroid /home/users
SD카드 내에서 공용 파일이 필요한 경우 이렇게 사용하면 됩니다.
만일 사용자 계정을 삭제하려면,
홈 파티션이 있는 경우
sudo deluser --remove-home 삭제할 계정
홈 파티션이 없는 경우
sudo deluser 삭제할 계정
그냥
sudo deluser -r 삭제할 계정
입력해도 됩니다.
[정리]
자신의 home 디렉토리를 건드릴 수 없는 user라는 계정과 hdduser라는 그룹을 만들어보는 예제 입니다.
cd /home
sudo chown odroid:root /home
sudo chmod 751 /home # once, /home 디렉토리는 사용자가 접근할 수 없다.
sudo chmod 700 -R /home/odroid # once, 관리자 홈 디렉토리는 관리자만 볼 수 있게 한다.
# 사용자 생성
sudo mkdir /home/users # user은 원하는 사용자 이름(알파벳,숫자)
sudo useradd -m -d /home/users/ user
sudo passwd user
[암호 입력]
# 사용자 그룹 추가
sudo groupadd hdduser # 새로운 그룹 생성 hdduser은 원하는 사용자 그룹(알파벳,숫자)
sudo usermod -a -G hdduser odroid # 선택 (관리자가 필요한 그룹이면)
sudo usermod -a -G hdduser user # 그룹에 사용자 추가
sudo chown -R odroid:hdduser /home/users # 관리자가 user 영역을 sudo 없이 관리 할 수 있게 함
chmod 750 -R /home/users # user 폴더 자체에서는 사용자가 사용할 수 없다. 하위 경로에서 사용자가 쓸 수 있는 권한을 주면 된다.
# 위의 명령대로 하면 자신의 home 디렉토리를 건드릴 수 없는 사용자가 생성됩니다. 만일 홈 디렉토리 내에서 사용자에게 모든 권한을 주고 싶으면
sudo chown -R user:hdduser /home/users
chmod 750 -R /home/users
mkdir /home/users/disk
sudo chown -R odroid:hdduser /home/users/disk
chmod 770 -R /home/users/disk
다음 설정에서 여기에 마운트 포인트를 설정합니다.
Addition 3 ) 하드디스크(HDD), SSD 마운트
sudo fdisk -l # 디스크 작동 확인 & 장착 확인
2TB 이하 [
sudo fdisk /dev/sda # 파티션 생성
n (no show help msg) -> p (set primary) -> 1 ( 1 partion )
-> (파티션 1개만 사용할 경우, 입력할 필요 없음, 첫 번째 Sector 디스크 위치, default 2048 )
-> (파티션 1개만 사용할 경우, 입력할 필요 없음. 마지막 섹터 디스크 위치, default 디스크 크기 )
-> p
sudo mkfs.ext4 /dev/sda1 # 파일 시스템 생성(ext4)
]
모든 경우 사용 가능 [
sudo apt-get install parted
sudo parted /dev/sda mklabel gpt
sudo blkid # uuid 정보 얻기
...
/dev/sda1: LABEL="(아무 파티션 이름,default "")" UUID="T-H -I -N -G1" TYPE="ext4" PARTLABEL="(아무 파티션 이름,,default "")" PARTUUID="T-H-I-N-G2
...
혹은
sudo lsblk --fs
NAME FSTYPE LABEL UUID MOUNTPOINT
...
sda1 ext4 T-H -I -N -G1
...
sudo cp /etc/fstab /etc/fstab.old # 백업
sudo vim /etc/fstab # 설정 수정
press [i] for insert
UUID=T-H -I -N -G1 /원하는 마운트 위치 ext4 defaults 0 0
press [esc] :wq for out
# example :
UUID=ee7cf0a0-1922-401b-a1ae-6ec9261484c0 /home/users/disk ext4 defaults 0 0
sudo mount -a # 핫 플러그 자동 마운트
마지막으로 df -h 명령어를 통해
/dev/sda1이 정상적으로 붙어있는지 확인합니다.
최초 권한은 root:root로 되어있어 사용자가 읽기만 가능하므로 목적에 맞추어 chown -R 옵션을 통해 소유권을 변경하고 chmod -R 옵션을 통해 퍼미션을 수정합니다.
Addition 4 ) 접속자 보안 옵션
내용이 어려울 수 있습니다. 하지만 우리가 왜 SSH/SFTP를 통해 NAS에 접속하는지 귀찮더라도 다시 한번 생각해보시기 바랍니다. 보안 수칙만 잘 지키더라도 최소한 스크립트 키디의 해킹은 막을 수 있습니다.
얼마나 많은 사람이 SSH 세션에 접속해 있는가 알아볼 수 있는 명령어는
1) sudo netstat -tnpa | grep 'ESTABLISHED.*sshd'
2) sudo ps ax | grep sshd
가 있습니다. NAS가 과도하게 느려지거나, 허가 받지 않은 누군가 사용 중이라는 것을 판단할 수 있는 기본적인 명령어입니다.
응용)
sudo netstat -tnpa | grep 'ESTABLISHED.*sshd' | tr -s ' ' | cut -d ' ' -f 8
sudo ps aux | egrep 'sshd: [a-zA-Z]+@' | tr -s ' ' | cut -d ' ' -f 12
echo "alias loginuser='sudo ps aux | egrep 'sshd: [a-zA-Z]+@' | tr -s ' ' | cut -d ' ' -f 12" >> ~/.bashrc
# login한 user 리스트 확인
추가) pinky
[선택] SFTP 만 로그인 되는 계정
SSH는
쉘 접근을 허용합니다. 해커의 주 목적 중 하나가 쉘을 얻는 것인데, SSH의 경우 암호만 (키로거 등) 어떻게든 알고 있다면
쉽게 쉘을 얻을 수 있습니다. 이를 막기 위해서 가능한 사용자가 쉘 접근을 하지 못하도록 해야하며, NAS의 경우 파일 다운로드
업로드가 주 용도이기 때문에 SFTP만 이용할 수 있는 계정을 만들어도 충분합니다. 예시에서는 /home/user 홈 디렉토리를 루트로 하는 가진 client라는 계정을 만들어봅니다. sftp만 로그인되는 계정은 스스로 비밀번호 변경을 할 수 없어 관리자 계정을 통해서 비밀번호를 변경해야 합니다.
sudo useradd -s /sbin/nologin client 혹은 sudo useradd client # 계정이름=client
sudo passwd client
sudo vim /etc/ssh/sshd_config
press [i] for insert
#Subsystem sftp /usr/libexec/openssh/sftp-server 코멘트 처리하고 아래 내용 추가
Subsystem sftp internal-sftp
sshd_config 의 가장 마지막 부분에 아래 내용을 추가
Match User client
ChrootDirectory /home/user
ForceCommand internal-sftp
x11Forwarding no
[esc] enter :wq for out
sudo service ssh restart
sudo chown root:client /home/user
sudo chmod 755 /home/user
여기서 주의할 점은 sftp의 루트 디렉토리의 퍼미션은 755가 아니면 안됩니다. 계정이 sftp 내에서 write 권한을 받도록 하려면,
sudo mkdir /home/user/workspace
sudo chown client:hdduser/home/user/workspace
sudo chmod 775 /home/user/workspace
workspace 파일 내에서 사용자는 자유롭게 읽고 쓸 수 있습니다. (workspace는 규칙에 어긋나지 않는 아무 이름이어도 상관 없음)
/etc/passwd 접근이 불가능하기 때문에 사용자가 직접적으로 비밀번호 변경이 불가능하므로 관리자가 변경해 주거나 별도의 프로그램을 구성하셔야 합니다.
SSH 접속 로그 확인하는 방법 : less /var/log/auth.log
↑ Turbo FTP Client & SFTP Client App (SFTP 계정 로그인 화면)
[선택] SSH 로그인 사용자 시스템 접근 제한(1) - Permission
퍼미션 조정을 통하여 원천적으로 접근을 방지합니다. / 하위 시스템 디렉토리의 접근을 모두 제한합니다.
sudo chown root:odroid -R /*
sudo chmod 751 -R /*
sudo chown -R odroid:odroid /home/odroid/*
[ 퍼미션 복구 작업 ]
sudo chown -R odroid:odroid /home/odroid
sudo chmod 700 -R /home/odroid/*
sudo chmod 700 -R /home/odroid
.... 사용자 퍼미션 복구작업
SSH 쉘을 일반 사용자에게 제공하기 위해선 사용자가 홈 파티션 외에 엿볼수 없어야 합니다. 단, 이 방법을 사용하면 사용중 원치 않는 오류가 발생할 수 있습니다. 가장 좋은 것은 기능이 제한된 별도의 쉘을 만들어서 시스템 경로로 진입하지 못하도록 차단하는 프로그램을 만드는 것입니다.
[선택] SSH 로그인 사용자 시스템 접근 제한(2) - lshell [추천]
lshell 을 설치하여 사용자가 쉘에서 할 수 있는 명령을 제한합니다.
** on Ubuntu :
*[설치] sudo apt-get install lshell
[설정] sudo vim /etc/lshell.conf
*[등록] sudo usermod -a -G lshell username
*[변경] sudo chsh -s /usr/bin/lshell user_name
** on Debian Stretch :
git clone https://github.com/ghantoos/lshell.git
cd lshell;sudo python setup.py install --no-compile --install-scripts=/usr/bin/
sudo groupadd lshell
sudo usermod -a -G lshell username
sudo chsh -s /usr/bin/lshell user_name
설정이 어려우면 링크된 파일을 다운로드 받은 다음 복사해서 사용자 이름(username)만 변경하여 사용하면 됩니다. [
lshell.conf]
단, 절대 슈퍼유저 권한이 있는 계정(관리자)에 적용하면 안됩니다.
sudo cp -r lshell.conf /etc/
sudo sed -i 's/USER/YOUR USER NAME/g' /etc/lshell.conf
# USER 이름을 YOUR USER NAME으로 치환 (vim, nano 사용할 필요 없이 변경)
등록과 변경 과정을 거쳐야 해당 사용자로 로그인 할 경우 적용됩니다.
필자는 4개의 계정을 운영하고 있습니다.
1. 관리자 계정 : 시스템 관리자 ( SSH )
2. 일반 사용자 계정 : hdd 업로드 및 다운로드 가능/sd 카드 내 파일 다운로드 가능/sd 카드 내 쓰기 불가 (SFTP)
3. 공유 계정 : hdd 접근 불가/sd 카드 내 파일 다운로드 가능/sd 카드 내 쓰기 불가 (SFTP)
4. 작업 계정 : scp 용도 계정 (restricted-SSH)
NAS 계정을 세분화하는 것은 인터넷을 정말로 신뢰할 수 있는 곳에서만 관리자 계정으로 작업하고, 다른 장소에서는 일반 사용자 계정이나 작업 계정으로 작업을 수행하거나 서비스를 제공하기 위함입니다.
♣ SSH 설정
sudo vim /etc/ssh/sshd_config
press [i] for insert
[선택] 제한된 사용자
파일의 가장 마지막 부분에 SSH 접속을 허용한 사용자를 적습니다.
AllowUsers 허용된 사용자1 허용된 사용자2 ...
AllowGroups 허용된 그룹1 허용된 그룹2 ...
DenyUsers 허용되지 않은 사용자1 허용되지 않은 사용자2 ...
DenyGroups 허용되지 않은 그룹1 허용되지 않은 그룹2 ...
[필수] 루트 계정 제한
PermitRootLogin yes -> PermitRootLogin no
[선택] rsa 암호키 길이 증가
rsa 암호키의 길이가 늘어날 수록 암호 풀기가 어렵습니다.
ServerKeyBits 1024를 ServerKeyBits 4096로 바꿔줍니다.
[필수] 로그인 시도 횟수 & 로그인 실패 유지시간 감소
LoginGraceTime 120 -> LoginGraceTime 30
MaxAuthTries 3
[필수] Xsession(GUI Session) Disable
Xsession은 자체가 보안이 취약하기 때문에 disable로 설정합니다.
X11Forwarding yes -> X11Forwarding no
[선택] Password Disable
Brute-Force 공격을 방지합니다. Password 대신 공개 키를 사용하여 접속하므로 별도의 인증키가 필요합니다.
[필수] Spoofing 방지
TCPKeepAlive의 경우 BSD SSH manual page 에 보면 spoofing(패킷 가로채기)이 가능합니다. 이를 disable 해줌으로써 온전히 암호화된 SSH 세션에서만 Live인지 Dead인지 확인하게 합니다.
TCPKeepAlive yes -> TCPKeepAlive no
ClientAliveInterval 300
ClientAliveCountMax 3
15분 동안 ssh 세션에서 사용자 입력(클라이언트의 활동)이 없으면 자동 접속 해제합니다.
[선택] 최대 접속 숫자 제한
MaxConnections 0 이면 이론적으로 제한이 없습니다.
MaxConnections 자연수 값으로 변경하여 최대 접속 숫자를 제한 합니다.
[esc] enter :wq for out
config 설정을 마치고 나면, ssh를 재시작합니다.
sudo service ssh restart
혹은 sudo reboot
[선택] Core dump disable
프로그램 개발자이면 어떤 뜻인지 아실 것이고, 프로그래머가 아니라면 디버거를 사용할 일이 없으니 core dump 기능을 disable 하는 것이 좋습니다.
sudo bash -c "echo 'fs.suid_dumpable = 0' >> /etc/sysctl.conf"
sudo vim /etc/security/limits.conf
press [i] for insert
* soft core 0
root soft core 0
* hard core 0
before #END OF FILE
[esc] enter :wq for out
sudo sysctl -p
[Test] : sudo gdb --core=/core
단, 프로그램 개발용 데스크톱에 사용하면 디버거가 올바르게 작동하지 않으니 사용하지 마십시오.
[선택] ICMP ping disable
sudo vim /etc/sysctl.conf
press [i] for insert
# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ignore ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
[esc] enter :wq for out
sudo sysctl -p
[선택] fail2ban
로그인 실패 횟수가 많으면 해당 ip 차단
sudo iptables-restore < iptable_update.rules ( updatemode )
sudo apt-get install fail2ban
sudo iptables-restore < iptable_normal.rules ( protectmode )
sudo vim /etc/fail2ban/jail.conf
[DEFAULT]
ignoreip : 절대로 차단되지 않을 ip (내부 ip로만 사용할 것) e.g.) 127.0.0.1/8 192.30.1.1/22
bantime : 차단 시간(초 단위) e.g.) 86400 (1일 차단)
[sshd]
enabled = true
port = SSH PORT NUMBER (if 22, then let ssh)
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# 3번 실패하면 out. 숫자 조정 필요
sudo service fail2ban restart (차단 목록을 없애려면 restart)
sudo iptables-save > iptable_normal.rules
sudo netfilter-persistent save
service ipstables restart
[선택] 시스템 로그 분석
sudo apt-get install logwatch libdate-manip-perl
SEE LOG : sudo logwatch | less
sudo service logwatch restart (logwatch 초기화)
로그 파일 삭제 : sudo bash -c "cat /dev/null > /var/log/LOG_FILE"
혹은 sudo truncate -s 0 /var/log/LOG_FILE
[선택] 관리자 계정 서비스 유지
관리자 계정의 서비스가 정말로 항시 필요한 경우 설정을 바꾸어 CLI에서 자동 로그인 될 수 있도록 변경합니다. 관리자 계정 차원의 서비스가 특별히 필요하지 않은 경우라면 사용하지 않는 것을 권장합니다.
vim /etc/systemd/system/getty.target.wants/getty@tty1.service
press [i] for insert
ExecStart=-/sbin/agetty %I $TERM 을
ExecStart=-/sbin/agetty --noclear -a odroid %I $TERM로 변경합니다.
press [esc] enter :wq for out
혹은
sudo sed -i 's/ExecStart=-\/sbin\/agetty %I $TERM/ExecStart=-\/sbin\/agetty --noclear -a odroid %I $TERM/g' /etc/systemd/system/getty.target.wants/getty@tty1.service
재시작해서 ps -ef | grep odroid 명령을 수행하면
[선택] 자동 업그레이드 해제
방화벽에 따라 ssh 포트만 접근 가능하므로 Ubuntu의 자동 업그레이드 프로그램은 cpu 자원을 소비하게 되므로, 자동 업그레이드를 해제합니다. 단, 업데이트를 절대 게을리 해서는 안되며, 최소한 1달에 한 번 정도는 업데이트 하는 것을 권장합니다. 만일 방화벽을 사용하지 않을 경우 자동 업그레이드 해제를 권하지 않습니다.
sudo vim /etc/apt/apt.conf.d/10periodic
press [i] for insert // (마지막에 삽입)
APT::Periodic::Unattended-Upgrade "0";
press [esc] enter :wq for out
[선택] webmin, GUI 관리자 설치
webmin은 브라우저를 통해 리눅스 서버를 관리해주는 오픈소스 프로그램으로 SSH 대신에 사용할 수 있는 GUI입니다. 기본 포트는 10000을 사용합니다. Linux에 대해 지식 있는 분들은 webmin보다 SSH 사용하는 것이 개인적으로 좋다고 생각합니다.
< 설치 방법 >
1. sudo vim /etc/apt/sources.list
press [i] for insert // (마지막에 삽입)
deb http://download.webmin.com/download/repository sarge contrib
press [esc] enter :wq for out
혹은, sudo bash -c "echo 'deb http://download.webmin.com/download/repository sarge contrib' >> /etc/apt/sources.list"
2. wget http://www.webmin.com/jcameron-key.asc
3. sudo apt-key add jcameron-key.asc
4. sudo apt-get update
5. sudo apt-get install webmin
6. sudo service webmin start
< 접속 방법 >
https://Ubuntu Server IP addr:10000
로그인 ID : 관리자 계정 (e.g. odroid, root)
< 방화벽 추가 >
sudo iptables -A INPUT -p tcp --dport 10000 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 10000 -m state --state ESTABLISHED -j ACCEPT
< 한국어 설정 >
Webmin > Webmin Configuration > Language 에서 한국어로 변경할 수 있습니다.
< 서비스 중지 >
sudo service webmin stop
[선택] agenti, GUI NAS Controller
agenti은 브라우저를 통해 리눅스 시스템을 관리해주는 소프트웨어로 SSH 대신에 사용할 수 있는 GUI 툴입니다. 기본 포트는 8000을 사용합니다. 별도로 sftp 프로그램을 설치하기 싫은 사람들에게는 훌륭한 웹 호스팅 툴입니다. Web Control를 세부적으로 하실 분은 바로 밑 설치 방법이 아니라 좀 건너 뛰어서 설명된 ajenti-v 설치 방법 참고 바랍니다.
< 설치 방법 >
sudo 권한을 가진 ssh 세션에서
curl https://raw.githubusercontent.com/ajenti/ajenti/master/scripts/install.sh | sudo bash -s -
wget -O- https://raw.github.com/ajenti/ajenti/1.x/scripts/install-ubuntu.sh | sudo sh
을 입력하고 느긋하게 기다리면 설치됩니다.
방화벽 설정
protectmode
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 8000 -m state --state ESTABLISHED -j ACCEPT
sudo iptables-save > iptable_dash.rules
echo "alias dashmode='sudo iptables-restore < ~/iptable_dash.rules'
dashmode
이제 updatemode & protectmode & dashmode 세 가지 모드로 방화벽을 설정할 수 있습니다. dashmode와 update 모드에서만 Ajenti 서비스를 이용할 수 있습니다. protectmode는 오직 SSH으로만 접속할 수 있는 보호모드입니다. 보호모드 하나정도 보관해두는 것은 좋은 습관입니다.
접속방법 :
파이어폭스 브라우저에서
https://NAS_IP_주소:8000/
혹은 https://NAS_포트포워딩_주소:/8000번과 연결된 포트번호
를 입력하고 아이디와 비밀번호를 입력하면 됩니다. 처음에는 root로 접속합니다. 여기까지 정상적으로 따라왔다면,
root password는 odroid 계정과 동일합니다.
계정의 권한을 제한하기 위해
Plugins 탭에서
Custom users authentication 설치합니다.
Settings -> Authentication provider 에서
Custom users로 전환하고,
Users에서 새로 로그인할 사용자 아이디와 비밀번호를 추가하면 됩니다. 이때, root 계정의 패스워드는 반드시 변경해주어야 합니다. 설정 탭에서 Sidebar Entries 표시제한과 계정에게 권한 제한을 수행하면 일반 유저는 파일 매니저 기능만 사용할 수 있게 됩니다. 절대로 일반유저 설정에 있어 System Account를 root 및 관리자 계정으로 주면 안됩니다. 사용자 추가 항목을 참고하여 별도의 사용자를 만들어야 합니다. FileSystem Root는 보통 계정의 home directory로 설정합니다. (e.g. /home/client ) 관리자 계정이 아닌 이상 /로 주어서는 안됩니다.
설정을 끝냈으면 SAVE하여 저장합니다.
< 일반 유저의Ajenti 접속 화면>
Ajenti의 좀 더 많은 기능을 원한다면 추가적인 패키지가 필요합니다. ajenti-v는 ajenti 1에서만 지원합니다!
# ajenti1 & ajenti-v 설치
sudo su
wget -O- https://raw.github.com/ajenti/ajenti/1.x/scripts/install-ubuntu.sh | sudo sh
wget http://repo.ajenti.org/debian/key -O- | apt-key add -
echo "deb http://repo.ajenti.org/ng/debian main main ubuntu" >> /etc/apt/sources.list
apt-get update
apt-get install ajenti-v -y
service ajenti restart
exit
[선택] Transmission 설정(토렌트)
먼저 방화벽을 설정했다면 포트 6800번을 오픈합니다.
sudo iptables -A INPUT -p tcp --dport 6800 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 6800 -m state --state ESTABLISHED -j ACCEPT
updatemode
트랜스 미션을 설치합니다.
sudo apt install transmission-daemon
transmission-daemon -u 사용자이름(영문숫자) -v 비밀번호(영문숫자) -p 6800 -w 다운로드 경로
sudo service transmission-daemon stop
sudo vim /etc/transmission-daemon/settings.json
rpc-enalbe : false -> true
rpc-whitelist-enabled : true -> false,
만일 특정 IP만 접속하고 싶다면
rpc-whitelist에 Dotted-Decimal 형식으로 IP주소를 추가
sudo service transmission restart
모든 설정이 완료되면 인터넷 브라우저에서 http://transmission_server_ip:6800/transmission/web/ 입력하면 원격 접속 가능합니다.
SSL 설정
Transmission은 SSL을 지원하지 않으므로 Proxy Redirection을 사용하면 SSL 보안 접속이 가능합니다.
sudo apt-get install nginx
sudo openssl req -x509 -node -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt
#유효기간 1년 ( 1년 마다 갱신 )
sudo iptables -A INPUT -p tcp --dport 9091 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 9091 -m state --state ESTABLISHED -j ACCEPT
sudo vim /etc/nginx/sites-enabled/default
#
# Transmission ssl redirect
# https:9091 to http:6800
#
server {
listen 9091;
server_name YOUR SERVER NAME;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/nginx-9091.log;
location / {
proxy_read_timeout 180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Fix the .It appears that your reverse proxy set up is broken" error.
proxy_pass http://localhost:6800;
proxy_redirect http://localhost:6800; https://YOUR SERVER NAME:9091;
}
}
press [esc] enter :wq for out
sudo service nginx restart
[선택] WiFi 무선 설정
적어놓기는 하지만, 오드로이드와 같은 NAS에는 랜선을 사용할 수 없는 경우를 제외하고는 무선 설정은 절대로 권하지 않습니다. 랜선에서 연결해서 쓰는 것이 안전하고 빠릅니다.
/etc/network/interfaces 에서
기존 내용을 주석 처리하고,
현재 WiFi 디바이스 암호화 방식에 맞추어 설정합니다.
0) 일반적인 경우
auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wireless-essid [your essid]
wireless-key [your_password]
#auto eth0
iface eth0 inet dhcp
1) 가장 흔한 WPA2 DHCP ESSID 의 경우
auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid [your essid]
wpa-ap-scan 1
wpa-proto WPA RSN
wpa-pairwise TKIP CCMP
wpa-group TKIP CCMP
wpa-key-mgmt WPA-PSK
wpa-psk [your_hex_key]
#auto eth0
iface eth0 inet dhcp
2) 기업에서 많이쓰는 PEAP AES DHCP ESSID의 경우
auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid [your essid]
wpa-ap-scan 1
wpa-proto RSN
wpa-pairwise CCMP
wpa-group CCMP
wpa-eap PEAP
wpa-key-mgmt WPA-EAP
wpa-identity [your_ID]
wpa-password [your_password]
#auto eth0
iface eth0 inet dhcp
리눅스 상에서 설정을 했다면 네트워크 서비스를 다시 시작해야 합니다.
sudo /etc/init.d/networking restart
*) SFTP가 위험하다고 생각되면 자신 만의 프로그램과 프로토콜을 개발하면 됩니다 :-p (*
[*] 마치며,
제품 리뷰 요청이 오거나, 본인이 제품을 구입해서 용도에 맞게 사용하지 않는 한 당연한 일이지만 사용후기 글은 당분간 올라오지 않을 겁니다. NAS 서버를 운영하는데 앞서 다음의 기본적인 수칙은 기억해 주시기 바랍니다.
기본적인 보안 수칙
1) 사용자를 믿지 말 것.
2) 사용자의 권한을 최소화. (터널-루트를 최소화)
3) 안전하다고 판단해도 절대로 안심하지 말 것.
4) 관리자 권한은 "절대로" 함부로 개방하지 말 것.
5) 신뢰할 수 있는 데이터만 받을 것.
6) 보안 업데이트는 꾸준히 수행할 것
랜섬웨어 걸리는 사람들의 특징 :
백신 X, 출처가 불분명한 토렌트 사용, 얇은 컴퓨터 지식, 보안 요소 OFF, 업데이트 안함
NAS를 노리는 랜섬웨어도 존재하는 만큼 데이터가 소중하다면 보안을 생활화합시다.
Try Linux !
Join the Cyber World !