구축

파일서버(네트워크 공유)구축하기 - FreeBSD13, Samba4

T8.CO.KR 2026. 8. 4. 15:58

(참고) 2023년 01월 쯤에 작성된 글임

Windows나 Windows Server로 공유폴더를 운영하는 데에 랜섬웨어 피해가 잦다.

보안에 취약한 설정과 그 이용 방법을 따른 데다가 공유폴더는 랜섬웨어의 주요 타켓인 탓이다.

또한 백업은 왜 그리 간과되는지 모르겠다.

회사에서 월급을 얼마나 탄다고 압박에 똥줄타던 전산담당 직원이 자기 돈으로 0.5BTC를 사서보낸 건에는 그저 무력감이 들 수밖에 없었다.

이참에 Windows로 하는 공유폴더 파일서버는 단 한 대라도 줄인다.

NAS는 대게 임베디드 기기라 성능이 떨어지며 불필요한 서비스들이 있다.

RedHat계열 리눅스는 CentOS가 그리된 후 아직 자리를 못잡았다.

Ubuntu는 최근 22.04에 실망했다.

하여 꾸준하며 안정성이 좋은 FreeBSD로 파일서버(SMB/CIFS)를 구축한다.

여태까지 공급한 이 서버의 댓수가 적다면 적고 많다면 그런 편이지만 랜섬웨어에 당한 적은 없다.

저용량 SSD(운영체제/UFS)와 고용량 HDD(데이터/ZFS)가 1개씩은 최소로 있어야 한다.

컴잘알못도 직접 따라할 수 있도록 안내한다.

1. 설치 미디어로 부팅한다.

1EM1_2dqeB0ow-Wasr7pPSZRYudJDo9uS=w1305-h751-iv1

2. 기본 키보드로 한다.

1T3vguxojvoxP_SgwdqiEn4h9hJFmdEYk=w843-h751-iv1

3. 호스트 이름을 짓는다.

1qvYveVtFbLmoOPykxbLSh-_0pneJTf_3=w843-h751-iv1

4. 포트와 소스를 스페이스 키로 선택하여 추가한다.

15sv3D5ow2xorWJBOazBnAYFtaP4QNGV7=w993-h751-iv1

5. 운영체제 설치 디스크의 파일시스템은 UFS로 한다. 

16e0bJ2eM_uT8PxcikdRkHcZVbCZ_sjUl=w993-h751-iv1

6. 디스크의 나열 순서은 메인보드의 포트 순서이다.

12eDN3Zg1-YVjDEtM9zOQfm3LjR4JRBw1=w993-h751-iv1

7. 단일 운영체제가 바람직하다.

1-O3eXfXWfg1_usXUJz6n5SdBKeNZ0tJQ=w993-h751-iv1

8. 기존에 뭔 데이터들이 있었으면 지워도 되는지 한 번 생각한다.

1_SXlt2HiTk5pGNo2RYm7pCk2o6aLDhTt=w993-h751-iv1

9. 메인보드의 공장 초기가 BIOS이면 MBR, UEFI라면 GPT를 선택한다.

17bZ00CXQmRlWQo583PgnwNyECmrb4iYP=w993-h751-iv1

10. 수동으로 파티션할 이유가 없다.

1jbHsCpsyo9t757gT_msUzkNv0qZfRPtT=w993-h751-iv1

11. 기존 디스크의 내용을 지워도 되는지 확인이다.

1o9tj2WsN3K6LX6UM5LdAoilWHKhAhQ0C=w993-h751-iv1

12. 설치중인 모습이다.

17cM_B2B1mSUREkZ5EtWpQ12HnlyVkrkZ=w993-h751-iv1

13. root 암호를 설정한다. 입력은 나타나지 않는다.

1cmPEMeopSWpLd5sdgRKZSIXfbbElHEhm=w993-h751-iv1

14. 네트워크 어댑터 나열 순서는 메인보드에 따르며 랜선이 꼽혀있는 것을 선택한다.

1h6o3RpFlCZmJbuKe9Df1OW8JVXwtO2Tv=w993-h751-iv1

15. 거이 모든 네트워크가 IPv4이다.

1w4aHtVtUAIq-gGkuuxqbxSQXeSOLe383=w993-h751-iv1

16. 대체로 서버는 유동 IP로 운영하지 않는다. 

151ABctWEWEmVtOVcgHQV7T_-cDlxYrzu=w993-h751-iv1

17. 네트워크 어댑터에 고정 IP를 설정한다.

1kgQnCkSfNj9fOfGRVa7lVNIrcMi2edtw=w993-h751-iv1

18. IPv6은 필요없다.

1DdU8tFMaKTnAMur3EVmT74nUHucr9V-R=w993-h751-iv1

19. 네임서버는 아무거나 써도 상관없으나 가급적 이용하고 있는 ISP 것을 넣는다.

1-zr1AEfRp-SsCn0VTyTZDlDBMfm1iaLp=w993-h751-iv1

20. 메인보드 시간을 UTC로 할 필요는 없다.

1NcWIuG9MxTUpFaIRjbkisJjlov9qZLPp=w993-h751-iv1

21. 로컬 시간설정1

1EALt76E3vJMjFwe2sVey5iIe7uSGKU7n=w993-h751-iv1

22. 로컬 시간설정2

157gJS0LEjGLoBFbwguSNeIctsuuIRhO_=w993-h751-iv1

23. 로컬 시간을 KST로 설정한다. 

128_P5Mxg6G0sb5GNr5Cym6gJRPotZ1pO=w993-h751-iv1

24. 운영체제 배포 기준은 UTC이므로 시간대에 따라서 하루가 더 빠르게 나타날 수 있다. *화살표 키로 날짜를 맞추고 Set Date 한다.

1FbecSVeHp1WEmPo4EAYOElnleziZQ-R_=w993-h751-iv1

25. 시간도 위와 마찬가지이다.

1biDQBLOJfztvgElniA2q7s1q19KjR4yo=w993-h751-iv1

26. 일단 기본으로 선택된 것만 있으면 된다.

1DLh2cCv-dSjpRcq6pWKPQG6EWr_97Urd=w993-h751-iv1

26. SMTP를 써야 할 환경이 아니며 /tmp는 비우는 게 좋다. *스페이스바로 선택한다.

1GgKrKcaEDr5Fz2ISI1DH8U5BcrCu9Xfz=w993-h751-iv1

27. root 외 운영 및 관리자용 계정을 따로 만든다.

16uFE1hpPt1Iou65bDqRjG5UZ1rqscinF=w993-h751-iv1

28. 관리자 계정 이름을 짓는다.

13xq1cGDGT_KdJrSjdhWB2jti7bknf5Pw=w993-h751-iv1

29. 입력하는 데 말고는 기본으로 선택된 것에 ↵(그냥 엔터)이다.

1RBtVB9J0gjvPY2GKDqtt8nDSsJQjNkex=w993-h751-iv1

30. 관리자 계정을 wheel 그룹에 추가한다. *wheel은 Windows에 Administrators 그룹과 같은 거다.

1L285yC9RzrXoP0I1gfzzfXbGXWPtPr-c=w993-h751-iv1

31. 암호를 설정한다.

1L285yC9RzrXoP0I1gfzzfXbGXWPtPr-c=w993-h751-iv1

32. 계정 생성을 마친다.

1smZpLvHcb8EqZs88i-5o5RIsTupH0dsA=w993-h751-iv1

33. 운영체제 설치에 따른 관련 설정을 마친다.

1OGwxV9Nwhe-xuZn9uKC72cFtCK6g4llz=w993-h751-iv1

34. 설정을 끝냈으니 수정할 필요없다.

1NWhP3_jM5X0CKhGqQz8G_AaTkG6OF3nG=w993-h751-iv1

35. 재부팅시키고 설치 미디어(USB 또는 DVD)를 뺀다.

1qm7tyLP2vSMl-4kJobY48ZSu_uScFLRT=w993-h751-iv1

36. 부팅되면 콘솔에서 root로 로그인한다.

10ZASCMwEsi82YOhRnzBHmocEDIymbG0n=w993-h751-iv1

37. ee 편집기로 SSH설정에 들어간다. *vi로 해도 된다.

1c5FIYRmZwV5-aFo-8du0EA78VSVYt_g6=w993-h751-iv1

38. SSH 포트를 바꾼다. *#(주석)을 지우고 SSH임을 유추할 수 없는 숫자가 좋다.

1DTw33gYvteWmQ1if_tjGQhFNUFhFVai5=w993-h751-iv1

39. PermitRootLogin no 줄의 주석을 지워 root 로그인을 막고 관리자 계정만 SSH에 접속할 수 있도록 아래처럼 추가한다.

1LQbkYaCf085juINLlOr3u7HhwoxfZTR0=w993-h751-iv1

40. 빈암호는 허용하지 않는다. *굳이 키로 로그인할 필요없다.

1Ii2rmJyhWEbP41Fw51i6rU1hlCaHMeB5=w993-h751-iv1

41. sFTP는 일단 이용할 필요가 없으니 주석을 단다.

1EOzPIQ48QEjapy6m2Vc-8fhpExA95qLa=w993-h751-iv1

42. ee 편집기를 마감할 때는 esc 키를 누른다. *a)leave editor 메뉴가 편집기 종료이다.

1OMJtv2Lwoc0Ech2ku-lUr3yTnd8Cf2lG=w993-h751-iv1

43. a)save changes 를 선택해야 설정한 게 저장된다. *이후, ee 편집기의 사용법은 이와 같다.

18OflHH13iWINp1O7UuF0HqXtE3ejIhw1=w993-h751-iv1

44. SSH를 재시작하여 변경된 설정을 서비스되도록 한다. *콘솔에서 logout을 입력하고 나온다.

1JeiWYDQhef8UyHI48MSYJaV1xQCp3zlt=w993-h751-iv1

45. PuTTY같은 터미널 툴로 서버에 다시 접속해서 문자셋을 설정하러 간다. *su를 입력하여 root로 전환한다.

1y5b01n5RofscEu_OKcMH3ixd5sG1aA6G=w993-h751-iv1

46. 서버의 언어 인더페이스를 한국어로 설정한다.

1dCvk1diZR0OQixpCpP29dlr724bO0NQi=w993-h751-iv1

47. esc 키를 누르면 관련 메뉴가 나온다. *커서가 a)leave editor에 기본으로 선택돼 있으니 ↵(그냥 엔터)이다.

1v_RgLjdJMPGqhGtCDERGKc7BSbeWpoFB=w993-h751-iv1

48. ↵(엔터)로 저장한다.

1vKh8n28JETQoITgQZh61km-C7clxdTbd=w993-h751-iv1

49. 서버를 재시작한다.

1uP2XZTU7RXgL1IlUHuAfRGmxFDQc9ThP=w993-h751-iv1

50. 다시 로그인하여 문자셋이 UTF-8로 나오는지 본다.

1LWTetzgCilwFUJU0tjUbpPuo9UBX19oZ=w993-h751-iv1

51. FreeBSD 업데이트 패치를 가져온다. *su를 입력하여 이하, root 권한으로 한다.

1_4DTTP4MervV9OrWLvRbY0lLew4veaRz=w993-h751-iv1

52. FreeBSD 업데이트를 설치한 후 최신 포트컬렉션을 가져와서 푼다. *포트는 바이너리와 패키지의 합본이다.

1YollVc4lcQv8N1O9frihJrGBPFWzCP-A=w993-h751-iv1

53. 포트에서 이용가능한 samba 버전을 확인하고 해당 디렉터리로 가서 옵션을 확인한다. *최근 것 samba는 그냥 베타라고 보면 된다.

1sO3aGlQ5OZG3KORtheMYMyhfQe9pEs8D=w993-h751-iv1

54. 이런 옵션으로 컴파일된다는 것만 확인하고 make BATCH=yes install clean 을 입력한다. *최초 설치이므로 디펜던시들 때문에 1시간 가량 걸릴 수 있다. 

1AWos9j1MBGiymBxpIE8UT_F5OWUGKtpk=w993-h751-iv1

55. sysrc zfs_enable=YES를 입력하여 zfs를 사용할 수 있도록 한다. */etc/rc.conf에 추가된다.

56. geom disk list를 입력해서 장착된 디스크들을 확인한다. *ada0, ada1가 나온다.

57. zpool create data /dev/ada1을 입력하여 ada1을 data라는 풀을 만든다. *data는 알아서 짓는 풀 이름이다.

58. df -HT를 입력하여 제 용량이 나오는지 확인한다.

59. pw groupadd -n share를 입력하여 share라는 그룹을 하나 만든다. *share는 역시 알아서 짓는 그룹 이름이다.

60. mkdir /data/share를 입력해서 공유에 사용할 share라는 디렉터리를 하나 만든다. *share 또한 알아서 짓는 디렉터리 이름이다.

61. chown :share /data/share && chmod 770 /data/share를 입력하여 share 디렉터리 권한은 조정한다.

62. ee /usr/local/etc/smb4.conf를 입력하여 다음 내용으로 samba 설정 파일을 만든다.

[global]

 workgroup = WORKGROUP

 netbios name = fileServer

 server string = Samba %v

 server min protocol = SMB2

 client min protocol = SMB2

 security = user

 encrypt passwords = Yes

 passdb backend = smbpasswd

 guest ok = No

 socket options = TCP_NODELAY IPTOS_LOWDELAY IPTOS_THROUGHPUT SO_KEEPALIVE SO_RCVBUF=65536 SO_SNDBUF=65536

 aio read size = 16384

 aio write size = 16384

 strict locking = No

 strict sync = No

 log level = 3

 log file = /var/log/samba4/log.%m

 max log size = 0

 unix charset = UTF-8 

 dos charset = CP949

 hide files = /Thumbs.db/._*/.DS_Store/:2eDS_Store/desktop.ini/DESKTOP.INI/*.tmp/:2eTemporaryItems/.TemporaryItems/Temporary Items/Network Trash Folder/TheFindByContentFolder/TheVolumeSettingsFolder/.VolumeIcon.icns/Icon?/.FBCIndex/.FBCLockFolder/.AppleDB/.AppleDesktop/.AppleDouble/

 hide dot files = Yes

 veto files = /lost+found/

 delete veto files = Yes

 local master = No

 dns proxy = No

 wins support = Yes

 idmap config * : backend = tdb

 map archive = No

 unix extensions = No

 store dos attributes = Yes

 map acl inherit = Yes

 nt acl support = Yes

 inherit acls = No

 inherit owner = No

 directory mask = 0770

 create mask = 0660

 posix locking = Yes

 load printers = No

 disable spoolss = Yes

 show add printer wizard = No

 vfs objects = full_audit

 full_audit:prefix = %u|%I

 full_audit:success = unlinkat

[share]

 comment = share

 path = /data/share

 read list = @share

 write list = @share

 read only = No

63. 위, smb4.conf 부연

 -. Windows, OSX 혼용 환경을 반영했다.

 -. hide files = /Thumbs.db/._*/.DS_Store/부터 /.AppleDesktop/.AppleDouble/까지는 1줄이다.

 -. 디렉터리, 파일의 삭제만 syslog로 로깅한다. *생성, 나열, 읽기, 전송, 수정 등은 로그 부담으로 로깅하지 않고 만약을 위한 것(악의적인 행위)만이다.

64. sysrc samba_server_enable=YES를 입력하여 samba를 시작에 등록한다.

65. service samba_server start로 samba 파일서비스를 시작한다.

66. adduser로 FreeBSD 사용자를 아래처럼 만든 후 pdbedit로 samba에 등록한다. *아래 eel은 역시 알아서 짓는 사용자명이다. 꼭 share 그룹에도 넣어줘야 한다.

1LiREhhDm3xKbgKsnjTOjprQ47jYcuzAV=w993-h751-iv1

*네트워크 공유폴더를 이용하는 사용자들을 계속 이렇게 추가한다.

67. ee /etc/newsyslog.conf해서 messages의 Count 수를 조정한다. *공유에서 디렉터리와 파일 삭제를 기록한 로그파일의 저장 개수이다.

1tpTHLKnuyY2V3Yl_IdnEpfAhLN1X-9he=w993-h751-iv1

68. 로그 로테이션을 설치한다.

cd /usr/ports/sysutils/logrotate

make install clean

cp /usr/local/etc/logrotate.conf.sample /usr/local/etc/logrotate.conf

ee /usr/local/etc/logrotate.conf *다음처럼 주석한다. 

1vdNvzNLFvvqBTPmUea1c9ZslEBCOQvw-=w993-h751-iv1

ee /etc/crontab 해서 0 0 * * * root /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf > /dev/null 2>&1 줄을 추가한다.

69. ee /usr/local/etc/logrotate.d/samba4 해서 다음 내용을 넣는다. *삼바 로그순환 설정이다.

/var/log/samba4/log.* {

  monthly

  rotate 10

  create

  nocompress

  missingok

  sharedscripts

  notifempty

    endscript

}

70. ee /etc/crontab 해서 다음 두 줄을 추가한다. *zfs 스냅샷 자동 생성과 삭제이다. data는 앞에서 임의로 지었던 풀이름이며 90일치 유지이다. 

0 12 * * * root /sbin/zfs snapshot data@`date +\%Y-\%m-\%d` > /dev/null

0 11 * * * root /sbin/zfs destroy data@`date -d -90days +\%Y-\%m-\%d` > /dev/null

71. 방화벽을 구성한다. *ipfw로 한다.

sysrc firewall_enable=YES

sysrc firewall_type=/etc/ipfw.rules

ee /etc/ipfw.rules *다음 4줄을 넣는다. 41722은 바꾼 SSH 포트이다.

add allow tcp from any to me 41722 setup keep-state

add allow tcp from any to any 139,445 setup keep-state

add allow udp from any to any 137,138 keep-state

add deny all from any to any

72. reboot를 입력하여 서버를 재시작한다.

73. Windows 탐색기 바로가기 주소란에 \\서버주소 또는 file://서버주소 식으로 입력한다.

1wpoLTFIk7l72Kh8xsM7V7wOcqtzeBb7u=w1284-h884-iv1

74. 로그인한다.

1-Iv_gnHPX8oX0cTfM5YDlQhpqn3PZj6c=w972-h884-iv1

75. 공유 디렉터리가 나와야 한다.

1Yh01ozWH_USOYOg_A_xV4mjfFvOKShpr=w972-h884-iv1

76. 파일을 업로드, 삭제, 다운로드, 폴더 생성과 삭제 등을 테스트한다.

1d8OPxgggSVWBiguhM6r5e7NYg_rdAv8G=w972-h884-iv2

끝, 세부적이고 소소한 것들은 댓글에 있는지 찾아본다.

'구축' 카테고리의 다른 글

원격(IDC 코로케이션) 백업서버구축  (0) 2026.08.12
Windows 아파치 웹서버 구축(Apaceh, PHP, MariaDB)  (0) 2026.08.04
Windows - MariaDB 설치  (0) 2023.11.30
Windows - PHP 설치  (0) 2023.11.29
Windows - Apache 설치  (0) 2023.11.26