무료 웹 팩스 솔루션 ‘NSFAX v0.1.7′

작성일 :

필자는 2020년부터 HylaFAX+를 활용해 팩스를 송수신해 왔으며, 언제 어디서나 손쉽게 팩스를 관리할 수 있도록 Apache와 PHP 기반의 NSFAX를 직접 개발하여 사용하고 있습니다. 오랜 기간 실제 환경에서 충분한 검증을 거친 만큼, 누구나 불편 없이 사용할 수 있는 수준이라 판단되어 본 블로그를 통해 배포하게 되었습니다.

NSFAX 소개

NSFAX는 Faxy 0.2.2를 기반으로 제작된 무료 웹 팩스 솔루션으로, 최신 PHP 버전 대응과 함께 강화된 보안 체계 적용을 통해 안정성을 높였습니다. 또한 모바일 페이지 지원, 다국어 지원(영어, 한국어), 연락처 관리, 사용자 관리, 그룹 권한 관리, 팩스 실시간 수신 알림 등 다양한 기능을 추가로 제공해 상용 웹 팩스 솔루션에 준하는 나만의 팩스 서버를 손쉽게 구축할 수 있습니다. 참고로 NSFAX는 팩스 서버를 웹 기반으로 관리하고 이용할 수 있도록 지원해주는 솔루션으로, 직접적인 팩스 송수신 기능은 제공하지 않습니다. 실제 팩스 송수신은 HylaFAX+를 통해 이루어지는 점 참고 부탁드립니다.

NSFAX 필수 구성 요소

• 운영체제 : Linux
- Ubuntu 20.04 ~ 24.04에서 실사용 테스트 완료되었습니다.

• 팩스 엔진 : HylaFAX+
- 일반 HylaFAX와는 호환되지 않으니 설치 시 반드시 + 버전을 확인해야 합니다.
- NSFAX는 HylaFAX+ 7.0.11 버전을 기준으로 개발되었습니다.

• 웹 서버 : Apache
- NSFAX는 .htaccess 설정을 통해 데이터 폴더에 대한 외부 접근을 엄격하게 차단하고 있습니다.
- 반드시 HTTPS를 사용해야 합니다.

• PHP : PHP 8.1 이상
- php.ini에서 첨부 파일 크기를 적절하게 조정하세요. (100MB 권장)
- php-gd, php-mbstring, php-curl 모듈 필수.

• 이미지 변환 도구
- ImageMagick : 팩스 송수신 파일의 이미지 변환 및 크기 조정 처리.
- Ghostscript : PDF 규격 문서를 팩스 규격으로 변환.

NSFAX의 모든 기능을 안정적으로 사용하고 높은 보안 수준을 유지하기 위해서는 위 구성 요소가 반드시 필요합니다. 하나라도 누락될 경우 일부 또는 전체 기능이 정상적으로 동작하지 않을 수 있습니다. 또한 NSFAX는 모든 파일을 메타(meta) 기반으로 관리하므로, 수천건 이상의 팩스를 보관하거나 동시 접속이 많은 환경에서는 성능 저하나 부하가 발생할 수 있습니다.

NSFAX 다운로드

앞서 언급한 필수 구성 요소가 모두 준비되었다면, 회색 상자에 제공된 링크를 통해 누구나 무료로 NSFAX를 내려받아 사용할 수 있습니다. NSFAX의 설치 및 운영하는 과정에서 발생할 수 있는 데이터 손실을 포함한 모든 문제에 대한 책임은 사용자에게 있으며, 안정적인 운영을 위해 사전 테스트 환경에서 충분한 검증을 수행한 후 실제 운영 환경에 적용하는 것을 권장합니다.

NSFAX 설치 방법

#1. 소스 코드 복사

sudo chown -R www-data:www-data /var/www/nsfax
sudo find /var/www/nsfax -type d -exec chmod 755 {} \;
sudo find /var/www/nsfax -type f -exec chmod 644 {} \;

NSFAX를 웹 루트 디렉토리(/var/www)에 업로드한 후, 회색 상자의 내용을 참고하여 소유자는 www-data로 설정하고 디렉토리는 755, 파일은 644 권한을 부여합니다. 디렉토리 및 파일 권한을 777로 설정할 경우 외부 공격자나 악성 프로세스에 의해 파일 변조, 웹쉘 업로드 등과 같은 보안 취약점이 발생할 수 있으므로 사용을 권장하지 않습니다.

#2. PUSH 서비스 이용을 위한 키 생성

cd /var/www/nsfax
php vapid.php

PUSH 서비스를 사용하기 위해 vapid.php를 실행하여 Public Key와 Private Key를 생성한 후, 생성된 키 값을 별도로 기록해 둡니다. PUSH 서비스를 사용하지 않을 계획이라면 해당 과정을 생략할 수 있지만, 비교적 간단한 작업이므로 향후 PUSH 사용을 고려해 미리 생성해 두는 것을 권장합니다.

#3. config.php 파일 수정

define('FAX_VIEW_SECRET','코드입력');
define('META_KEY','코드입력');
define('PUSH_PUBLIC_KEY','코드입력');
define('PUSH_PRIVATE_KEY','코드입력');
define('PUSH_SUBJECT','mailto:이메일@yourdomain.com');
$applicationBaseUri="https://yourdomain.com";
$applicationBaseDir="/";
$applicationSpoolDir="/var/spool/hylafax/recvq/";
$applicationArchivePath="/var/www/nsfax/data/inbox/";
$applicationOutboxPath="/var/www/nsfax/data/outbox/";

config.php 파일을 텍스트 편집기로 열어, 회색 상자에 기재한 항목을 사용자 환경에 맞게 수정합니다. FAX_VIEW_SECRET과 META_KEY는 외부에서 유추할 수 없는 수준의 강력한 값으로 설정하는 것을 권장합니다. 또한 PUSH_PUBLIC_KEY와 PUSH_PRIVATE_KEY는 앞 단계에서 생성한 Public Key와 Private Key를 각각 입력합니다.

#4. crontab을 이용한 상태 동기화

* * * * * /usr/bin/php /var/www/nsfax/include/cron/fax_converter.php >/dev/null 2>&1
* * * * * /usr/bin/php /var/www/nsfax/include/cron/fax_schedule.php >/dev/null 2>&1
* * * * * /usr/bin/php /var/www/nsfax/include/cron/fax_status.php >/dev/null 2>&1

NSFAX의 모든 기능을 정상적으로 사용하기 위해서는 crontab -e를 통해 매분 단위로 상태를 동기화하도록 설정해야 합니다. 해당 PHP 스크립트는 PDF 변환(fax_converter.php), 예약 전송(fax_schedule.php), 상태 갱신(fax_status.php) 작업을 자동으로 처리합니다.

#5. 관리자 계정 추가

NSFAX에 기본 계정(admin / admin)으로 로그인한 후 Settings(설정) → Section(구분) → Account Management(계정 관리) → Add(추가) 메뉴로 이동하여 관리자 권한(Admin Group)의 새 계정을 생성합니다. 이후 생성한 계정으로 재로그인한 뒤 기본 계정(admin)을 삭제하여 비인가 접근을 차단하시기 바랍니다.

NSFAX 유의사항

#1. 보안 관련 유의사항

1. 기본 계정(admin)은 반드시 삭제해야 합니다.
2. config.php의 FAX_VIEW_SECRET, META_KEY는 외부에서 유추할 수 없는 수준의 강력한 값으로 설정해야 합니다.
3. data 폴더는 외부 접근할 수 없도록 반드시 차단해야 합니다. NSFAX는 .htaccess를 통해 해당 경로에 대한 외부 접근을 제한하고 있으나, Nginx 환경에서는 .htaccess를 지원하지 않으므로 가상 호스트 설정에서 외부 접근 제한을 구성해야 합니다.
4. HTTPS를 사용하지 않을 경우 NSFAX의 접속이 불가능하며, 세션 탈취 등의 보안 문제가 발생할 수 있으므로 반드시 HTTPS 환경에서 운영해야 합니다.
5. 파일 업로드 기능 사용 시 웹쉘 업로드와 같은 보안 공격에 주의해야 합니다.

본문에서 이미 언급한 내용이지만 팩스는 개인정보를 포함한 내용을 포함한 문서를 주고받는 경우가 많아 보안에 각별한 주의가 필요하므로 다시 한번 강조하게 되었습니다.

#2. 문제 해결

• 팩스가 보이지 않는 경우
- config.php에서 applicationArchivePath의 경로가 정확하게 입력되었는지 확인해주세요.
- config.php에서 applicationOutboxPath의 경로가 정확하게 입력되었는지 확인해주세요.
- config.php에서 applicationSpoolDir의 경로가 정확하게 입력되었는지 확인해주세요.
- crontab에 fax_converter.php가 정상 등록되었는지 확인해주세요.

• 팩스 예약 전송이 되지 않는 경우
- NSFAX가 설치된 서버의 시간이 현재 시간과 일치하지는지 확인해주세요.
- crontab에 fax_schedule.php가 정상 등록되었는지 확인해주세요.
- 과거 시간으로 예약하지 않았는지 확인해주세요.

• 발신 팩스 상태의 아이콘이 변경되지 않는 경우
- crontab에 fax_status.php가 정상 등록되었는지 확인해주세요.
- HylaFAX+의 상태를 확인해주세요.

• 파일 첨부가 되지 않거나, 실패하는 경우
- php.ini의 upload_max_filesize와 post_max_size를 확인해주세요.
- PDF, TIFF, 이미지 형식이 아닌 파일을 첨부하지 않았는지 확인해주세요.

• PUSH 알림이 작동하지 않는 경우
- config.php에서 PUSH_PRIVATE_KEY를 입력했는지 확인해주세요.
- config.php에서 PUSH_PUBLIC_KEY를 입력했는지 확인해주세요.
- config.php에서 PUSH_SUBJECT를 입력했는지 확인해주세요.
- 브라우저 알림이 허용되어 있는지 확인해주세요.
- HTTPS를 사용 중인지 확인해주세요.

• NSFAX 웹 페이지에 접속할 수 없는 경우
- applicationBaseUri, applicationBaseDir가 재대로 입력되었는지 확인해주세요.
- NSFAX의 소유자 및 권한이 정확하게 변경되었는지 확인해주세요.
- HTTPS를 사용 중인지 확인해주세요.

본문에서 이미 언급한 내용이지만 자주 문의될 것으로 예상되는 사항에 대한 해결 방법을 요약하여 정리하였으니 이용에 참고하시기 바랍니다. 또한 상기 내용을 확인했음에도 문제가 지속되는 경우, 댓글로 문의해주시면 해결에 도움을 드리겠습니다.

NSFAX 사용방법

#1. 로그인

NSFAX의 로그인 페이지는 쿠키와 서버에 저장된 해시 기반 토큰을 활용한 자동 로그인 기능을 지원합니다. 이 방식은 세션 만료 이후에도 로그인 상태를 유지할 수 있어 사용자 편의성을 높이면서도 우수한 보안성을 제공하며, 로그인 상태는 최대 30일간 유지됩니다.

#2. 대시보드

대시보드에서는 최근 수신 및 발신 팩스, 수신 및 발신 대기열, 최근 팩스 활동, 디스크 사용량, 팩스 상태와 같은 시스템 현황과 팩스 처리 상태를 한눈에 파악할 수 있습니다. 팩스 상태 표시는 단일 모뎀 사용을 기준으로 구성되어 있으므로, 2개 이상의 모뎀을 사용하는 경우에는 ttyACM0 Connect(ttyACM0 연결) 항목을 사용자 환경에 맞게 수정해야 합니다.

#3. 수신 팩스함

수신 팩스함에서는 수신 팩스 보기, 폴더 구성, 메모, 검색 기능을 통해 수신 팩스를 체계적으로 관리할 수 있으며, 상세 화면에서는 수신 정보 확인 및 PDF/TIFF 파일 다운로드 기능을 이용할 수 있습니다. 팩스 수신 정보는 HylaFAX+ 7.0.11 버전의 xferfaxlog 로그를 기반으로 제공되며, 향후 버전에서 로그 체계가 변경될 경우 일부 정보가 정상적으로 표시되지 않을 수 있습니다.

#4. 발신 팩스함

발신 팩스함에서는 발신 팩스 보기, 예약 팩스 보기, 폴더 구성, 메모, 검색 기능을 통해 발신 팩스를 체계적으로 관리할 수 있으며, 상세 화면에서는 발신 정보 확인 및 PDF/TIFF 다운로드, 팩스 재전송, 예약 팩스 취소 기능을 이용할 수 있습니다. 팩스 발신 정보는 HylaFAX+ 7.0.11 버전의 xferfaxlog 로그를 기반으로 제공되며, 향후 버전에서 로그 체계가 변경될 경우 일부 정보가 정상적으로 표시되지 않을 수 있습니다.

#5. 팩스 전송

팩스 전송에서는 첨부 파일 업로드, 수신자 입력, 메모 작성, 예약 전송, 우선순위 설정을 통해 효율적인 전송이 가능합니다. 첨부 파일은 PDF, TIFF, 이미지 형식을 다중 선택할 수 있으며, 여러 명의 수신자(연락처)를 동시에 지정해 동일한 내용을 여러 곳에 한 번에 전송할 수 있습니다. 특히 예약 전송 기능을 이용하면 사용자가 지정한 날짜와 시간에 맞춰 자동으로 팩스 전송이 이루어 업무 효율성을 더욱 높일 수 있습니다.

#6. 연락처

연락처는 공용 그룹과 사용자 그룹으로 구분하여 관리할 수 있습니다. 공용 그룹은 모든 사용자와 공유되는 연락처이며, 사용자 그룹은 각 사용자에게만 표시되는 개인 연락처입니다. 이를 통해 조직 단위와 개인 단위의 연락처를 효율적으로 관리할 수 있습니다.

#7. 설정

설정 화면은 User Profile(사용자 정보), System Settings(시스템 설정), Group Permissions(그룹 권한), Account Management(계정 관리)로 구성되어 있으며, 사용자 환경에 맞게 설정을 구성할 수 있습니다. 개별 사용자 계정에 정보를 관리하는 User Profile(사용자 정보)은 각 개인 사용자별로 설정에 접근할 수 있지만, 그 외 메뉴는 관리자 권한을 가진 사용자만 접근할 수 있습니다.

PUSH 알림 사용방법

NSFAX는 별도의 앱 설치 없이 minishlink/web-push 라이브러리를 활용한 브라우저 기반 웹 푸시 알림을 지원하며, 아래와 같은 방법으로 알림을 수신할 수 있습니다.

#1. 안드로이드

1. Chrome 브라우저에서 NSFAX에 접속합니다.
2. 로그인 후 표시되는 알림 허용 팝업에서 ‘허용’을 선택합니다.
3. 이후 팩스 수신 또는 상태 변경 시 브라우저 알림으로 실시간 수신이 가능합니다.

필자가 안드로이드 스마트폰을 직접 사용하지 않아, 안드로이드 12 기반 앱 플레이어에서 Chrome 브라우저를 통한 테스트만 진행된 점 참고 부탁드립니다.

#2. 아이폰/아이패드

1. Safari 브라우저에서 NSFAX에 접속합니다.
2. 하단 공유 버튼을 눌러 ‘홈 화면에 추가’를 선택합니다.
3. 홈 화면에 추가된 아이콘을 통해 NSFAX를 실행합니다.
4. 실행 후 알림 허용을 선택하면 PUSH 알림을 수신할 수 있습니다.

iOS 16.4 이상이 설치된 아이폰 및 아이패드에서는 Safari로 NSFAX에 접속한 뒤,하단 공유 버튼을 눌러 [홈 화면에 추가] 기능을 통해 웹 앱 형태로 홈 화면에 아이콘을 추가해야만 웹 푸시 알림을 수신할 수 있습니다.

관련 글 읽기

의견

의견을 남겨주세요.

Please enter your comment!
Please enter your name here

최근 작성 글