Callers can download files from your board with any FTP program, such as FileZilla, WinSCP, lftp or curl. They log in with their own BBS name and password and see one folder for each file area they may use. It is download only: there is no upload, delete or rename, and no real folder of your disk is ever visible.
USERS.BBS by the same code the web portal uses. Level 0 users and deleted accounts never get in.<area number> - <area name>, shown only if the caller's level and flags allow that area. Each lists the files named in that area's listing that exist on disk. A file that is on disk but not in the listing is not visible.FREEFILE.CTL, and the IGNORE flag. A file is charged only when its last byte was delivered, so a dropped connection costs nothing. Resume works. The FTP command SITE ALLOWANCE shows what is left today.
PBDispatch owns the FTP port and starts one PBFtp.exe for each caller, so a download in progress survives restarting PBDispatch.
Figure 1. Network > FTP Server in PBConfig. In this picture plain FTP and sharing with the QWK hub are both ticked; neither is on by default.
The screen is laid out in sections. On the left are FTP server (enable, plain FTP, sharing with the QWK hub, port, session limits, lowest level, wrong passwords, greeting name) and Certificate (TLS). On the right are Network (passive mode), Downloads and security, Users who may not use FTP (one name per line) and Folders and log. Leave the user database folder empty to use <system folder>\MSGBASE\. The two boxes under Downloads and security are both on by default: the first applies the board's download limits, counters and log, and the second requires data connections to resume the TLS session. Un-tick the second only if a caller's FTP program cannot connect.
auto hands out the address the caller connected to, which is right on a LAN and wrong behind NAT. If you skip this, callers connect but cannot list or download.Tools > FTP Sessions… in PBDispatch lists who is connected and says whether the port is really open (NOT LISTENING if not).
Port 21 and the passive range 50100 to 50200 are the defaults. The range was chosen to avoid the PBLink QWK hub's passive range (50000 to 50040). The SSH server uses 22. The hub's built-in FTP server also defaults to port 21, so on one PC with default settings the second one to start fails. Give one of them another port, or share the port as below.
The two servers can share one port, the one in PBFTP.CFG, with the caller's first command deciding which gets the call: AUTH TLS goes to PBFtp, a user name that is one of the hub's node IDs goes to the hub, and any other user name goes to PBFtp as plain FTP (if allowed).
127.0.0.1, and keep its passive range apart from PBFtp's. Save and restart the hub.
Keep hub node IDs different from BBS user names. Hub nodes use plain FTP, so a node whose software tries AUTH TLS first would reach PBFtp and could not log in as a node. If the hub is stopped, node calls get 421 and BBS callers are not affected.
PBConfig writes the file. If it does not exist, FTP is off. If it has a mistake, the log names the line and FTP stays off.
| Setting | Meaning | Default |
|---|---|---|
enabled | yes or no. | yes |
port | Control port. | 21 |
allowplain | Also accept unencrypted FTP. | no |
hubroute, hubcfg | Share the port with the QWK hub, and where the hub's config is. | no |
maxsessions, maxperip | Limits (1 to 64) for everybody, and per address. | 8, 5 |
syspath, msgpath | The data folder, and where USERS.BBS lives. | |
certfile, keyfile | PEM files. Optional when allowplain yes. | |
passiveports | low-high | 50100-50200 |
externaladdress | auto, an IPv4 address or a DNS name. | auto |
bbsname, banner | Text in the greeting. | |
logfile | Session log (connects, logins, downloads, refusals). | |
idletimeout, transfertimeout | Seconds without a command, or a stalled transfer. | 300, 120 |
sessionreuse | Data connections must resume the control TLS session. | yes |
downloadaccounting | Apply the board's download rules. | yes |
minlevel | Lowest security level that may use FTP. | 1 |
denyuser | A user who may not use FTP. Repeatable. | |
maxloginattempts | Wrong passwords per connection (1 to 10). | 3 |
ftplib, some old or embedded clients) and get a 522 error. Setting sessionreuse no lets them in at a small cost in safety. FileZilla, WinSCP, lftp and curl do not need it.minlevel) or by name (denyuser). Account expiry dates are not checked.USERS.BBS. Charges go to the same ledger the web portal uses, and ProBoard.exe adds them to the user's record at their next logon. Until then the limit still holds.From the ProBoard folder:
PBFtp.exe -cfg Configs\PBFTP.CFG -test netstat -ano | findstr ":21 " curl --ssl-reqd --insecure -u name:password ftp://localhost:21/
The first checks everything without a network connection; every line should say OK. The second shows whether PBDispatch is listening. The third lists the root over TLS (–insecure only because of a self-signed certificate). Test from the same PC first, then another PC, then from outside. If login works but a listing hangs, the cause is the passive range or the external address.