====== Initialization Configuration ======

The Synchronet BBS (SBBS) Initialization File (''sbbs.ini'') is the mother of all Synchronet v3 configuration files and is located in the ''[[dir:ctrl]]'' directory.

===== Filename =====

The base filename of the initialization file is ''[[dir:ctrl]]/sbbs.ini''. 

The standard host/platform variations of the initialization filenames are also supported. See [[INI_files#filenaming|.ini filenaming]] for details.

===== Defaults =====

Download or view the default ''sbbs.ini'' file here: ''[[https://gitlab.synchro.net/main/sbbs/-/blob/master/ctrl/sbbs.ini|sbbs.ini]]''

===== Editing =====

When using the [[monitor:sbbsctrl|Synchronet-Win32 Control Panel]], the contents of this file are automatically updated when any of the configuration changes are made in the File->[[monitor:sbbsctrl:Properties]] menu or the various [[:server:]] configuration dialogs. Windows sysops may never need to edit this file by hand.

If a sysop needs to edit the file by hand, any decent text file editor should do the job. See [[INI files]] for more details.

===== Sections =====
  
The contents of the file are divided into multiple named sections:

===== SCFG ↔ sbbs.ini cross-reference =====

In Synchronet v3.20+ the Global / Server / Failed-Login / JavaScript settings can also be edited interactively in [[util:SCFG]] under //Servers// — values are read from and written to ''sbbs.ini''. The SCFG menu labels and the corresponding ini keys differ; this table maps them:

^ SCFG (//Servers//) menu label                   ^ ini key (this page) ^
| //Network Interfaces (IPv4/6)//                  | [[#interface|Interface]] |
| //Outbound Interface (IPv4)//                    | [[#outboundinterface|OutboundInterface]] |
| //Bind Retry Count//                             | [[#bindretrycount|BindRetryCount]] |
| //Bind Retry Delay//                             | [[#bindretrydelay|BindRetryDelay]] |
| //Sem File Check Interval//                      | [[#semfilecheckfrequency|SemFileCheckFrequency]] |
| //Log Level//                                    | [[#loglevel|LogLevel]] |
| //TLS Error Level//                              | TLSErrorLevel (per-server) |
| //Login Requirements// (Global Server Login)     | LoginARS (per-server) |
| //JavaScript Settings ›//                        | [[#javascript|JavaScript*]] |
| //Failed Login Attempts › Delay//                | [[#loginattemptdelay|LoginAttemptDelay]] |
| //Failed Login Attempts › Throttle//             | [[#loginattemptthrottle|LoginAttemptThrottle]] |
| //Failed Login Attempts › Hack Log Threshold//   | [[#loginattempthackthreshold|LoginAttemptHackThreshold]] |
| //Failed Login Attempts › Temporary Ban Threshold// | [[#loginattempttempbanthreshold|LoginAttemptTempBanThreshold]] |
| //Failed Login Attempts › Temporary Ban Duration//  | [[#loginattempttempbanduration|LoginAttemptTempBanDuration]] |
| //Failed Login Attempts › Automatic Filter Threshold// | [[#loginattemptfilterthreshold|LoginAttemptFilterThreshold]] |
| //Failed Login Attempts › Automatic Filter Duration//  | [[#loginattemptfilterduration|LoginAttemptFilterDuration]] |
| //Max Concurrent Connections › Maximum (Unauthenticated)// | [[#maxconcurrentconnections|MaxConcurrentConnections]] (per-server) |
| //Max Concurrent Connections › Auto-Filter Threshold//     | [[#maxconconnfilterthreshold|MaxConConnFilterThreshold]] (per-server) |
| //Max Concurrent Connections › Auto-Filter Duration//      | [[#maxconconnfilterduration|MaxConConnFilterDuration]] (per-server) |
| //Max Concurrent Connections › Auto-Filter Silently//      | [[#maxconconnfiltersilent|MaxConConnFilterSilent]] (per-server) |
| JavaScript › //Heap Size//                        | [[JavaScript]] (key ''MaxBytes'' / equivalent) |
| JavaScript › //Yield Interval//                   | [[JavaScript]] |
| JavaScript › //GC Interval//                      | [[JavaScript]] |
| JavaScript › //Load Path//                        | [[JavaScript]] |

The corresponding SCFG menu screens:

  ╔══════════════════════════════════════════════════════════╗
  ║                  Global Server Settings                  ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Log Level                     Informational             ║
  ║ │TLS Error Level               Debugging                 ║
  ║ │Network Interfaces (IPv4/6)   0.0.0.0,::                ║
  ║ │Outbound Interface (IPv4)     0.0.0.0                   ║
  ║ │Bind Retry Count              2                         ║
  ║ │Bind Retry Delay              15s                       ║
  ║ │Sem File Check Interval       2s                        ║
  ║ │Login Requirements                                      ║
  ║ │JavaScript Settings...                                  ║
  ║ │Failed Login Attempts...                                ║
  ╚══════════════════════════════════════════════════════════╝

  ╔══════════════════════════════════════════════════════════╗
  ║                   Failed Login Attempts                  ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Delay                         5000 ms                   ║
  ║ │Throttle                      1000 ms                   ║
  ║ │Hack Log Threshold            10                        ║
  ║ │Temporary Ban Threshold       20                        ║
  ║ │Temporary Ban Duration        10m                       ║
  ║ │Automatic Filter Threshold    0                         ║
  ║ │Automatic Filter Duration     Infinite                  ║
  ╚══════════════════════════════════════════════════════════╝

  ╔══════════════════════════════════════════════════════════╗
  ║                Max Concurrent Connections                ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Maximum (Unauthenticated)     Unlimited                 ║
  ║ │Auto-Filter Threshold         Disabled                  ║
  ║ │Auto-Filter Duration          1 day                     ║
  ║ │Auto-Filter Silently          No                        ║
  ╚══════════════════════════════════════════════════════════╝

==== [Global] ====

The ''[Global]'' section contains keys whose values will serve as default values for like-named keys in other server sections in the ''[[config:sbbs.ini]]'' file. 

The supported ''[Global]'' keys are:

^ Key                          ^ Default         ^ Description ^
| HostName                     | <none>          | Override system hostname |
| Interface                    | ''0.0.0.0,::''  | Default local network interface(s) to listen for connections on |
| OutboundInterface            | ''0''           | Default IPv4 network interface to perform outbound connections from |
| LogLevel                     | Informational   | Default minimum severity of log messages to view or log-to-disk |
| TLSErrorLevel                | Emergency       | Maximum severity of TLS-related log messages |
| BindRetryCount               | 2               | Default number of network interface/port bind retry attempts |
| BindRetryDelay               | 15              | Default number of seconds to wait between bind attempts |
| CtrlDirectory                |                 | Override default ''[[dir:ctrl]]'' directory |
| TempDirectory                | ''../temp/''    | Override default temporary file directory |
| SemFileCheckFrequency        | 2               | Default seconds between semaphore file checks |
| LoginAttemptDelay            | 5000            | Default number of milliseconds to pause after a failed login attempt |
| LoginAttemptThrottle         | 1000            | Default number of milliseconds to delay a connection from a suspicious host |
| LoginAttemptHackThreshold    | 10              | Default number of failed login attempts before logging attempt to ''hack.log'' |
| LoginAttemptTempBanThreshold | 20              | Default number of failed login attempts before temporarily banning IP address |
| LoginAttemptTempBanDuration  | 10M             | Default duration of a temporary IP address ban |
| LoginAttemptFilterThreshold  | 0               | Default number of failed login attempts before auto-filtering an IP address |
| LoginAttemptFilterDuration   | 0 (Infinite)    | Default duration of IP address filters |
| LoginRequirements            | //none//        | [[:Access:]] [[:access:requirements]] (in ARS format) for users to be allowed login |
| AnswerSound                  |                 | Default WAV file to play locally upon accepting a TCP connection |
| LoginSound                   |                 | Default WAV file to play locally upon successful user authentication |
| LogoutSound                  |                 | Default WAV file to play locally upon logout of an authenticated user |
| HangupSound                  |                 | Default WAV file to play locally upon disconnection of a TCP session |
| HackAttemptSound             |                 | Default WAV file to play locally upon a detected hack attempt |
| JavaScript*                  |                 | Default JavaScript settings, see [[JavaScript]] for details |

**More details on keys follow**:

=== HostName ===

Default: <none>

The public Internet DNS host name of this server.

If not set, the host name configured in ''[[util:SCFG]]->Networks->Internet E-mail->System Address'' will be used.

**Note**:
The ''[Global] HostName'' setting may be overridden by a ''HostName'' value in the subsequent server sections of this file.

=== Interface ===

Default: ''0.0.0.0,::'' (any/all IPv4 or IPv6 interface)

The IPv4 and/or IPv6 addresses of the network interfaces to listen on for incoming TCP/IP connections.

If multiple addresses are specified, they are to be separated by commas (this is true of all the ''*Interface'' values in this file).

The address value ''0'' or ''0.0.0.0'' indicates //all IPv4 interfaces//. The address value ''::'' indicates //all IPv6 interfaces//.

If this value is not set, any and all IPv4 and IPv6 network interfaces available will be listened to for incoming connections.

**Note**:
Although TCP port numbers may be specified (with ''//<address>//://port//'' syntax) in the ''*Interface'' values of the subsequent server sections of this file, the ''[Global] Interface'' value **must not** have any port numbers specified.

=== OutboundInterface ===

Default: ''0.0.0.0'' (any available IPv4 interface)

The IPv4 address of the network interface to use for outgoing TCP/IP connections.

=== CtrlDirectory ===

Default: ''$[[:config:env#SBBSCTRL]]''

Specify the location of the Synchronet ''[[dir:ctrl]]'' directory. Since this file is normally found in the ''[[dir:ctrl]]'' directory (e.g. by way of the ''[[:config:env#SBBSCTRL]]'' environment variable) you do not normally need to set this.

=== TempDirectory ===

Default: ''[[dir:ctrl]]/../temp''

Override the default system "temp" directory (optional).
If you do override this, do NOT use the system-wide temp dir (e.g.: ''/tmp'' or ''windows\temp''), use a subdirectory instead. Synchronet assumes it is the only user of this directory/subdirectory for its temporary files only.

**Note**:
The ''[Global] TempDirectory'' value may be overridden by a ''TempDirectory'' value in the subsequent server sections of this file.

=== SemFileCheckFrequency ===

Default: ''2'' (seconds)
Minimum: ''1'' (seconds)

The interval, in seconds, betweeen [[semfiles|semaphore file]] checks. If you want to reduce the amount of disk I/O while the BBS is idle, you can increase this value. If you set this value below 1, the BBS server threads will use the default value (2).

**Note**:
The ''[Global] SemFileCheckFrequency'' value may be overridden by a ''SemFileCheckFrequency'' value in the subsequent server sections of this file.

=== BindRetryCount ===

Default: ''2''

Set the number of times an interface //bind// will be attempted for each port (before giving up and failing to start/restart the server). An interface/port //bind// is required for listening for incoming TCP/IP connections.

Increase this value if you get errors binding to ports on reloads (especially on *nix).

**Note**:
This setting may be overridden by a ''BindRetryCount'' value in the subsequent server sections of this file.

=== BindRetryDelay ===

Default: ''15'' (seconds)
	
Delay (in seconds) between bind retries.

**Note**:
This setting may be overridden by a ''BindRetryDelay'' value in the subsequent server sections of this file.

=== LogLevel ===

Default: ''Informational''

Highest log level to actually log/print (ignore all higher/less-severe log entries).
Supported log levels in decreasing severity (ala [[:monitor:syslog]]):
  Emergency, Alert, Critical, Error, Warning, Notice, Informational, Debugging
  
**Note**:
This setting may be overridden by a ''LogLevel'' value in the subsequent server sections of this file.

=== JavaScript* ===

See [[JavaScript]] for details.

**Note**:
Each ''[Global] JavaScript*'' setting may be overridden by a corresponding ''JavaScript*'' value in the subsequent server sections of this file.

=== LoginAttemptDelay ===
Default: ''5000'' (milliseconds)

The number of milliseconds to pause after a failed login attempt.

**Note**:
Each ''[Global] LoginAttempt*'' setting may be overridden by a corresponding ''LoginAttempt*'' value in the subsequent server sections of this file.

=== LoginAttemptThrottle ===
Deafult: ''1000'' (milliseconds)

This value is multiplied by the number of consecutive unique failed login attempts and the result is the number of milliseconds to delay a connection from a suspicious host (e.g. with multiple consecutive unique failed login attempts).

=== LoginAttemptHackThreshold ===
Default: ''10'' (attempts)

The number of consecutive unique failed login attempts from the same host before adding entries to the ''hack.log'' file.

Set to ''0'' to disable automatic ''hack.log'' file entries for failed login attempts.

=== LoginAttemptTempBanThreshold ===
Default: ''20'' (attempts)

The number of consecutive unique failed login attempts from the same host before temporarily banning connections from that client (based o IP address).

Set to ''0'' to disable automatic banning.

**Note**: Failed logins using any of the filtered user IDs (from ''[[config:name.can]]'') will automatically trigger a temporary ban.

=== LoginAttemptTempBanDuration ===
Default: ''10M'' (10 minutes)

The  length (in seconds) of a temporary IP ban based on either multiple consecutive failed login attempts or any failed login attempt using a banned user ID (from ''[[config:name.can]]'').

=== LoginAttemptFilterThreshold ===
Default: ''0'' (attempts)

The number of consecutive unique failed login attempts from the same host before auto-filtering the host's IP address in the ''[[config:ip.can]]'' file.

For this auto-filtering feature to work with the Synchronet v3.16c Terminal Server (Telnet, RLogin, and SSH login attempts), the sysop must set ''[[util:SCFG]]->Nodes->Node 1->Toggle Options->Always Prompt for Password'' to "Yes".

Set to ''0'' to disable automatic filtering of IP addresses due to failed login attempts.

=== LoginAttemptFilterDuration ===
Default: ''0'' (Infinite)

The  length (in seconds) of a persistent IP ban.

==== [BBS] ====

See [[:server:terminal|Terminal Server]] for more details.

In addition to the keys listed in the ''[Global]'' section, the ''[BBS]'' section can contain the following keys with the specified default values:

=== AutoStart ===

Default: ''true''

Automatically startup the [[server:Terminal]] Server when Synchronet starts up.

=== TelnetInterface ===

Default: value of ''[Global] Interface''

The IPv4 and/or IPv6 addresses of the network interfaces to listen on for incoming Telnet connections on (''0'' for //any// IPv4 interface, and ''::'' for any IPv6 interface)).

=== TelnetPort ===

Default: ''23''

The TCP port number on which to listen for incoming Telnet connections.

=== RLoginInterface ===

Default: value of ''[Global] Interface''

The IPv4 and/or IPv6 addresses of the network interfaces to listen on for incoming RLogin connections on (''0'' for //any// interface).

=== RLoginPort ===

Default: ''513''

The TCP port number on which to listen for incoming RLogin connections.

=== SSHInterface ===

Default: value of ''[Global] Interface''

The IPv4 and/or IPv6 address of the network interfaces to listen for incoming Secure Shell (SSH) connections on (''0'' for //any// interface).

=== SSHPort ===

Default: ''22''

The TCP port number on which to listen for incoming Secure Shell (SSH) connections.

=== SSHConnectTimeout ===

Default: ''10'' (seconds)

The maximum amount of time allowed for a SecureShell (SSH) connection negotiation to complete.

=== SSHErrorLevel ===

Default: ''4'' (warning)

The maximum severity of SSH-related log messages. SSH-related log messages of higher severity (i.e. lower numeric level) will be capped at this severity level.

=== Pet40Port ===

Default: ''64''

If a connection is made to the [[:server:Terminal]] server, via any supported protocol, on this TCP port number, the terminal will be assumed to be a 40-column CBM/PETSCII (non-ANSI) terminal (e.g. Commodore 64). Setting this port number does not cause the server to //listen// on this port, so if you desire to support CBM/PETSCII terminal-connections, you will also need to add this port number to the ''TelnetInterface'' list (for example).

=== Pet80Port ===

Default: ''128''

If a connection is made to the [[:server:Terminal]] server, via any supported protocol, on this TCP port number, the terminal will be assumed to be an 80-column CBM/PETSCII (non-ANSI) terminal (e.g. Commodore 128). Setting this port number does not cause the server to //listen// on this port, so if you desire to support CBM/PETSCII terminal-connections, you will also need to add this port number to the ''TelnetInterface'' list (for example).

=== OutboundInterface ===

Default: ''0.0.0.0'' (any available IPv4 interface)

The IPv4 address of the network interface to use for outgoing TCP/IP connections (i.e. for Telnet and RLogin gateway connections).

=== FirstNode ===

Default: ''1''

The number of the first terminal server node serviced by this instance of Synchronet. The minimum value for this settings is ''1'' and the maximum is ''255''.

Normally, this value should be left at ''1''. If the sysop wanted to run multiple instances of Synchronet, all sharing the same [[:dir:|directory tree]] and data files, then multiple ''sbbs.ini'' files would be used (with host-unique [[ini_files#filenaming]]) and unique (non-overlapping) node ranges specified with the ''FirstNode'' and ''LastNode'' values in each.

=== LastNode ===

Default: ''4''

The number of the last terminal server node serviced by this instance of Synchronet. The minimum value for this settings is ''1'' and the maximum is ''255''. If this setting's value is higher than the total number of nodes configured for the BBS (i.e. in SCFG->Nodes), then it will be automatically adjusted at run time during Terminal Server startup with a logged notice:
  Specified last_node (x) > sys_nodes (y), auto-corrected

=== MaxConcurrentConnections ===

Default: ''0''

If set to a non-zero number, this will limit the number of concurrent connections to the [[server:Terminal]] Server from a common host/client IP address. [[config:ipfilter_exempt.cfg|Exempt hosts]] are not connection-limited by this setting. This setting was added in Synchronet v3.17.

=== MaxConConnFilterThreshold ===

Default: ''0''

//(v3.22+)// Number of times an IP must hit the per-IP ''MaxConcurrentConnections'' limit before being automatically added to the ''[[dir:text]]/[[config:ip.can]]'' filter file. Set to ''0'' (the default) to disable auto-filtering — connections over the limit are simply rejected, with no follow-up filtering. See [[howto:block-hackers#concurrent_connection_auto-filtering|Concurrent Connection Auto-Filtering]] for the full mechanism.

=== MaxConConnFilterDuration ===

Default: ''1d'' (1 day)

//(v3.22+)// Lifetime of an entry created by ''MaxConConnFilterThreshold'' in the ''[[dir:text]]/[[config:ip.can]]'' filter file. Set to ''0'' to filter the IP indefinitely.

=== MaxConConnFilterSilent ===

Default: ''false''

If ''true'', IPs auto-filtered for repeatedly exceeding the per-IP ''MaxConcurrentConnections'' limit are added to ''[[dir:text]]/[[config:ip-silent.can]]'' instead of ''[[config:ip.can]]'', so subsequent connections from those IPs are dropped without logging a //blocked// notice.

=== OutbufHighwaterMark ===

Default: ''0'' or ''1024'' (bytes)

=== OutbufDrainTimeout ===

Default: ''10'' (milliseconds)

=== SemFileCheckFrequency ===

Default: value of ''[Global] SemFileCheckFrequency''

=== TempDirectory ===

Default: value of ''[Global] TempDirectory''

=== HostName ===

Default: value of ''[Global] HostName''

=== ExternalTermANSI ===

Default: ''pc3'' (Linux) or ''cons25'' (FreeBSD)

When the BBS is running on a *nix-like OS, this value determines the value of the ''TERM'' environment variable that will be set when invoking interactive external programs for users with terminals supporting ANSI.

=== ExternalTermDumb ===

Default: ''dumb''

When the BBS is running on a *nix-like OS, this value determines the value of the ''TERM'' environment variable that will be set when invoking interactive external programs for users with terminals that **do not** support ANSI.

=== UseDOSemu ===

Default: ''false'' (new sysops with default file) or ''true'' (missing from file/existing sysops)

This will enable [[howto:dosemu|DOSEmu]] support for running DOS-based external programs. When you first install Synchronet, you will need to "opt in" by setting this to true in order to use DOSEmu.

=== DOSemuPath ===

Default: ''/usr/bin/dosemu.bin'' (Linux) or ''/usr/local/bin/doscmd'' (FreeBSD)

When the BBS is running on a *nix-like OS, this value determines the default path of the DOS emulator to be executed when a non-native program (e.g. 16-bit MS-DOS door game) will be invoked by the BBS.

=== DOSemuConfPath ===

Default: ''dosemu.conf''

This specifies where DOSEmu should look for the conf file. If you only specify a filename, it will look in the ''[[dir:ctrl]]'' dir. 

The order of using conf file locations is: 

  - It will look in the startup dir of the external program
  - It will use this path from sbbs.ini (if configured)
  - It use /etc/dosemu/dosemu.conf
  - It will use /etc/dosemu.conf

=== AnswerSound ===

Default: //none//

Path to a WAVE file to played (locally) when accepting incoming connections. Only supported on Windows.

=== HangupSound ===

Default: //none//

Path to a WAVE file to be played (locally) when terminating connections. Only supported on Windows.

=== Options ===

Default: ''XTRN_MINIMIZED''

Recommended: ''XTRN_MINIMIZED | ALLOW_RLOGIN | ALLOW_SSH''

Supported options, separated by the pipe (''|'') symbol:

^ Option         ^ Description ^
|XTRN_MINIMIZED  | External program windows are automatically minimized (Windows) |
|AUTO_LOGON	 | Enable automatic login based on IP address for V-exempt users (not recommended) |
|DEBUG_TELNET    | Log Telnet commands and responses (with Debug log-level messages) |
|ALLOW_SSH	 | Enable the Secure Shell (SSH) protocol for incoming connections |
|ALLOW_SFTP	 | Enable SSH File Transfers (SFTP) |
|ALLOW_RLOGIN	 | Enable the RLogin protocol for incoming connections |
|NO_QWK_EVENTS   | Disable QWK networking events |
|NO_NEWDAY_EVENTS| Disable daily events from running in this instance of Synchronet |
|NO_EVENTS	 | Disable the Events thread (all timed events) |
|NO_TELNET       | Disable Telnet support |
|NO_TELNET_GA    | Disable periodic transmissions of the Telnet "Go Ahead" command (Telnet only) |
|NO_HOST_LOOKUP  | Do not attempt hostname look-ups on incoming connections (log IP addresses only) |
|NO_SPY_SOCKETS  | Disable node spying (on *nix) |
|NO_DOS          | Disable 16-bit DOS Program support (eliminate the potential for modal error dialogs in 64-bit editions of Windows) |
|NO_RECYCLE      | Disable the ability for the terminal server to be recycled |
|GET_IDENT	 | Use the IDENT protocol on incoming connections |


==== [FTP] ====

See [[:server:ftp|FTP Server]] for more details.

==== [Mail] ====

See [[:server:mail|Mail Server]] for more details.

==== [Web] ====

See [[:server:web|Web Server]] for more details.

==== [Services] ====

^ Key           ^ Default            ^ Description ^
| iniFileName   | ''services.ini''   | Configuration file in the ''[[dir:ctrl]]'' directory that contains list of supported services |
| Interfaces    | //Global//         | Network interfaces to bind/listen |
| JavaScript*   | //Global//         | JavaScript operating parameters |
| LoginAttempt* | //Global//         | Hack attempt counter-measure configuration |
| LoginInfoSave |           | An optional [[access:requirements|ARS]] that can be used to limit which users will have their login details saved to the userbase |
| HostName      | //Global//         | Public host name |
| TempDirectory | //Global//         | Temporary file directory |
| SemFileCheckFrequency | //Global// | Frequency (interval) in seconds between semaphore file checks |
| AnswerSound    |                    | WAV file to play upon answering an incoming connection |
| HangupSound    |                    | WAV file to play upon client disconnection |
| BindRetryCount | //Global//         | Maximum of number of network interface bind retries |
| BindRetryDelay | //Global//         | Seconds between bind retry attempts |
| LogLevel       | //Global//         | Minimum severity of log messages to be logged |
| Options        | ''NO_HOST_LOOKUP'' | Option flags to apply to all services by default |

See [[:service:index|Services]] and [[:config:services.ini]] for more details.

==== [UNIX] ====

See [[:config:nix|Configuring UNIX]] for more details.
  
===== See Also =====
  * [[:config:|Configuration]]
  * [[:server:|Servers]]
 

{{tag>configuration general_config ini}}

