Title | Nephthys |
Version | V1.1 |
Description | Nephthys is a native mod for unreal1 engine based servers which entends IpDrv by efficient attack blocking, banning, player logging and other features. |
Release Date | 05.09.2005 |
Authors | Winged Unicorn, Zora |
Email Address | winged_unicorn@legendofvandora.net, zzora@gamebox.net |
Filenames | Nephthys.zip |
DLLs | Nephthys.dll, IpDrv.dll |
Scripts | Nephthys.u |
Game Compatibility | Unreal 224v, Unreal 225f, Unreal 226b (Gold), Unreal 226f, Unreal Tournament, Deus Ex, Rune |
OS Compatibility | Windows 95, Windows 98/ME, Windows 2000, Windows XP, Windows NT 4, Linux (Wine) |
IpDrv.*
files of your Unreal\System
folderUnreal.ini
file of your Unreal\System
folderUnreal\System
folder, depending on the installed patch. Upgrading from older Nephthys version: see below!Unreal.ini
file:;ServerActors=IpServer.UdpServerQuery
ServerActors=Nephthys.NptServerQuery
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=...
ServerActors=Nephthys.NptServerUplink MasterServerAddress=...
Nephthys.ini
file (it holds your ban table which you would lose by overwriting). Instead, after start of your server, set the following options manually (see option list below for details):
Value | Description |
---|---|
ESM_Off | Don't show this event. If you just like to enjoy playing without getting informed how Nephthys works, then use this value everywhere. |
ESM_Silent | Show this event without beep. If you think Nephthys beeps too much, then use this value instead of ESM_Beep. |
ESM_Beep | Show this event and beep. If you usually ignore the chat and want to be beeped by Nephthys' events, then use this value instead of ESM_Silent. |
Option | Default | Description |
---|---|---|
ConnCountForDRJA TimeDeltaForDRJA |
10 10 |
Max. number of new connections per TimeDeltaForDRJA seconds counted for all IPs, more than this is considered to be a DRJA (distributed repetitive join attempt) attack, resulting in ignorance of all further join attempts until the attack is over. Set ConnCountForDRJA to at least MaxPlayers * 1½ to allow proper map travels for all players. |
ShowDRJA | ESM_Beep | How to show detected DRJA attacks to all admins |
Option | Default | Description |
---|---|---|
bAutoBanRJA | false | Whether to add a ban rule for this IP automatically |
ConnCountForRJA TimeDeltaForRJA |
5 10 |
Max. number of new connections per TimeDeltaForRJA seconds counted for a single IP, more than this is considered to be a RJA (repetitive join attempt) attack, resulting in ignorance of all further join attempts from this IP until the attack is over. Set ConnCountForRJA to at least (max. remote lan players) * 1½ to allow proper map travels for all remote lan players. |
ShowRJA | ESM_Beep | How to show detected RJA attacks to all admins |
Option | Default | Description |
---|---|---|
BanTable | all empty | All defined banning rules. Never change a setting here directly, or server will crash! Use the Ban commands instead. |
ShowBan | ESM_Beep | How to show any change of the ban table to all admins |
ShowSuspect | ESM_Silent | How to show any matching rules not applied due to (temporary) deactivation to all admins |
Option | Default | Description |
---|---|---|
ShowCmdError | ESM_Beep | How to show errors while executing remote admin commands. If your server is always accessible by server console you may set this option to ESM_Off. |
ShowCmdResult | ESM_Silent | How to show results of remote admin commands. If your server is always accessible by server console you may set this option to ESM_Off. |
Option | Default | Description |
---|---|---|
bKillDoubles | true | Whether to kill double connections to players with same IP / Name to get rid of unused (bandwidth eating) connections quickly. This may cause players with same IP having to connect one after each other, not both at once. See also KillDoubleDelay. |
bRejectAfterGameEnd | false | Whether to reject new connections when the game is ended (GameType.bGameEnded == true). This may cause a server to reject all connections if the map doesn't switch automatically after the game ended. |
bRejectBlankName | false | Whether to reject connection attempts of players without a given name, with empty name or name including space characters. |
bRejectEmptyClass | false | Whether to reject connection attempts of players without any player class or with empty player class. |
bRejectEmptyPassword | true | (not available for 224v) Whether to reject connection attempts of players with empty passwords to avoid server crashes. Most custom game types reject those attempts already by giving appropriate messages to the players. Nephthys checks it too to protect a server even without any other server mod running or with server mods which don't check that. Nephthys closes the connection immediately (after a custom game type sent the message to the player). |
HoldConnSeconds | 10 | How long (in seconds) to hold information about a connection after it is closed. This information is needed e.g. to detect RJA attempts, but also to avoid false alarms of Zombie (reconnect) bug attacks. |
KillDoubleDelay | 10 | How long (in seconds) bKillDoubles is disabled after a map change. This allows remote LAN players to travel at once into new map. Compatibility with Nephthys V1.0: 0. |
RecvErrorsToClose | 2 | Connection is closed after this number of successive receive errors. Usually 1 should do well, but some routers / PCs (?) seem to send single ICMP error messages spuriously. Set this to 0 to turn it off (not recommended). Compatibility with Nephthys V1.0: 0. |
ShowBlock | ESM_Beep | How to show connection blocks to all admins. |
ShowKick | ESM_Beep | How to show kicks to all admins. |
ShowLogin | ESM_Off | How to show player logins to all admins. This is usually done by the game type. |
ShowLogout | ESM_Off | How to show player logouts to all admins. This is usually done by the game type. |
ShowNew | ESM_Silent | How to show upcoming connections to all admins. |
ShowPreLogin | ESM_Beep | How to show player prelogins to all admins. |
Option | Default | Description |
---|---|---|
bUscriptAPI | false | Whether to support the UnrealScript event interface. If there are mods using Nephthys' events this option has to be true, otherwise this option should stay false for better performance. |
Option | Default | Description |
---|---|---|
LogTable | all empty | All logged players. Never change a setting here directly, or server will crash! Use the Log commands instead. |
MaxLogTableEntries | 1000 | Limit for entry number in log table. On load oldest entries get deleted. Large log tables need much time to be saved and searched through. Small log tables can't store "old" players. Find an applicable value for your server. Use 0 to turn this option off (log table may grow endlessly). |
ShowLog | ESM_Beep | How to show any change of the log table to all admins |
Option | Default | Description |
---|---|---|
bAllowUploads | true | If this is set to false no player may download missing packages. |
bLimitUploadBandwidth | true |
Turns on the automatic upload bandwidth limitation algorithm. Upload is limited to the remaining available bandwidth calculated by MaxClientRate * (MaxPlayers + MaxSpectators) * UploadThrottle. If you prefer to play undisturbed by downloaders, this option should be set to true. If you prefer to get the downloader in as fast as possible (waiting until download/lag has stopped), this option should be set to false. To setup all your server's bandwidth values correctly use this small Netspeed Calculator (requires JavaScript to be enabled): |
MaxUploadPackageSize | -1 | Max. number of bytes a package may have to be allowed to be uploaded. Greater amount is blocked before start. -1 = no limit |
MaxUploadSize | -1 | Max. number of bytes a connection may download in sum. Greater amount is blocked before start. -1 = no limit |
ShowPublicUploads | ESM_Off | How to show a lag warning due to uploads to all players but admins. |
ShowUploads | ESM_Beep | How to show info about uploads to all admins. |
UploadThrottle | 1.0 | Multiplyer for automatic upload bandwidth limitation (needs bLimitUploadBandwidth=true). Values > 0.0 but < 1.0 will make downloads slower with less lag for online players, values > 1.0 will make download faster with increasing lag for online players, values <= 0.0 will disable uploads. See bLimitUploadBandwidth for more details. |
Option | Default | Description |
---|---|---|
bLogAllRequests | false | debug only, never set this to true for usual play! |
bLogRejected | false | log attacker requests |
bLogInvalidRequests | false | log mal-formed requests |
bLogSendText | false | debug only: log all replies sent |
bLogSendFail | true | log failing sends |
MaxRequestsForRUA TimeDeltaForRUA |
7 1 |
max. number of requests per TimeDeltaForRUA seconds a single IP may do, more than this is considered to be a RUA (repetitive uplink attempt) attack. This is a DoS (denial of service) attack attempt. |
bBanRUA | false | whether to ban an RUA attacking IP automatically |
MaxRequestsForDRUA TimeDeltaForDRUA |
20 1 |
max. numer of requests per TimeDeltaForDRUA seconds counted of all IPs, more than this is considered to be a DRUA (distributed repetitive uplink attempt) attack, resulting in ignorance of all further requests. This is a DoS (denial of service) attack attempt. |
ServerActors=Nephthys.NptServerUplink MasterServerAddress=<domain or IP address of (your) new master server> MasterServerPort=<port>
[UBrowserAll]
ListFactories[0]=UBrowser.UBrowserGSpyFact,MasterServerAddress=<domain or IP address of (your) new master server>,MasterServerTCPPort=<port>,GameName=unreal
Option | Default | Description |
---|---|---|
AddServerRule | all empty | generic additional informations given to the client as reply to server rule requests |
.Tag | the key for the information (e.g. "Policy") | |
.Value | the information itself (e.g. "No cussing!") | |
bReportPlayers | true | include players in detailed info |
bReportSpectators | false | include spectators in detailed info |
bReportBots | false | include bots in detailed info |
bReportCameras | false | include cameras in detailed info |
bReportOthers | false | include all other score board entry relevant actors in detailed info |
bCountRealPlayersOnly | true | whether to count real players in server list only (= don't count spectators, etc.) or to count all of the checked above in server list |
Option | Default | Description |
---|---|---|
bLogAllRequests | false | debug only, never set this to true for usual play! |
bLogRejected | false | log attacker requests |
bLogInvalidRequests | false | log mal-formed requests |
bLogInvalidSends | true | log mal-formed replies |
bLogSendText | false | debug only: log all replies sent |
bLogSendFail | true | log failing sends |
MaxRequestsForRQA TimeDeltaForRQA |
7 1 |
max. number of requests per TimeDeltaForRQA seconds a single IP may do, more than this is considered to be a RQA (repetitive query attempt) attack. This is a DoS (denial of service) attack attempt. |
bBanRQA | false | whether to ban an RQA attacking IP automatically |
MaxRequestsForDRQA TimeDeltaForDRQA |
20 1 |
max. numer of requests per TimeDeltaForDRQA seconds counted of all IPs, more than this is considered to be a DRQA (distributed repetitive query attempt) attack, resulting in ignorance of all further requests. This is a DoS (denial of service) attack attempt. |
Command | Description |
---|---|
Help | Show a brief summary of all commands |
Status [<conn#>] | Show a brief summary of all handled connections [a detailed info of given connection] |
Ban list [<banentry> [<bansort> [<count>]]] | List ban table [only <banentry>s [sorted by <bansort> [max. <count> entries]]] |
Ban remove <banentry> | Remove ban table <banentry>s Hint: Use ban list with same <banentry> parameters prior to ban remove to avoid unwanted deletions |
Ban change <banentry> <banpar> | Change a single ban table <banentry> Hint: Use ban list with same <banentry> parameters prior to ban change to avoid unwanted changes |
Ban new <banpar> | Insert a new ban table entry, even if some banpars match an existing entry |
Kick <ip>[:<port>]|N=<Name> | Kick a given player. You may kick downloaders by giving the IP! |
Log list [<logentry> [<logsort> [<count>]]] | List log table [only <logentry>s [sorted by <logsort> [max. <count> entries]]] |
Log remove <logentry> [<name>] | Remove log table <logentry>s [only the exact <name> from the entry] |
Log range <logentry> <ipStart>[-<ipEnd>]|#<slotStart>-<slotEnd>[,Mask] | Expand log table entry to IP range / re-range <logentry>.
New range may include other entries, but must not intersect any entry. Giving ",Mask" will expand the selected range to boundaries of powers by 2 (see <logentry>). If you're unsure what this option does then don't use it! Anyways, it's recommended to use "log list" with this required mask prior to applying it with "log range". |
Log merge <logentry> [Mask] | Merge successive <logentry>s with same name(s) [and expand them by mask calculation]. It's a shortcut to range multiple log table entries of dyn. IP players into one single entry. |
Tag | Description |
---|---|
<banentry> | <ipStart>-<ipEnd> | #<slotStart>[-<slotEnd>] | N=<name> | L=<LastUsedStart>[-<LastUsedEnd>] | C=<comment> | M=<message> | R=<reference> | Drop More than 1 search criteria may be given separated by comma "," Name, Comment, Message, Reference: selects only ban entries including the given string LastUsed: The timestamp of the last time the ban rule was applied (setup by Nephthys automatically). You may omit time and/or day if not needed, e.g. 2004/08-2004/09 Drop: selects only ban entries with DropCount > 0 |
<bansort> | [-]<LastUsed> | [-]<Reference> LastUsed: sort the listed ban entries by their LastUsed information Reference: sort the listed ban entries by their Reference information precede the sort criterion with a minus sign to reverse the sort direction |
<banpar> | {IP=<ip>[-<ip>] | Name=<string> | | Expires=<stamp> | Mode=Always,OffWhenAdmin,ReserveName,Off | bStealth=0,1 | Message=<string> | Reference=<string> | Comment=<string> | Next=#<slot>}+ IP: IP address (range) to ban, given as ddd.ddd.ddd.ddd Name: only for name bans (= ban if name matches) or name reservation bans (= ban if name matches but IP (range) doesn't match) Expires: time stamp when this ban entry becomes disabled automatically and becomes shown as "suspect" if configured. Note that it isn't removed automatically! Mode: Always: ban entry active always; OffWhenAdmin: ban entry active only if no admin is logged in; ReserveName (IP (range) and Name requrired): Name is useable for given IP (range) only; Off: disabled (is shown as "suspect" if configured) bStealth: 0: connection is allowed to query and to attempt PreLogin. The banned player is allowed to request a server info (name, players, scores, etc. are returned) and if the player tries to connect, Nephthys will let the player pass to PreLogin (so the admin (you) can see the Name of the player - important if you ban IP ranges) and closes the connection after that. A higher mod has the possibility to send a (specific, see below) message to the player concerning the ban reason before Nephthys closes the connection. 1: no traffic from connection is accepted, i.e. the server will reject any server info request, so the server is invisible in the banned player's server list. Also, if the player tries to connect manually by entering "open IP", Nephthys won't reply anything (just like a firewall: all network packets from the banned players are dropped). Message (isn't considered for applying a ban; only usable by extending uscript interface): message the player gets shown when banned Reference (isn't considered for applying a ban): user defineable reference to the reason why this ban was setup (default and automatically inserted ban enties: current time stamp - see server log at this stamp for details) Comment (isn't considered for applying a ban): user defineable comment which should hold a reminder for the admin why this ban was setup. Next (may affect which ban is applied): If given the new or changed ban entry is placed before the given ban number, else it's appended at the end of the ban table (ban new) or it keeps it's place (ban change). Since for ban application the ban table is scanned by slot number 0 to higher numbers, ban entries at the end of the ban table may be hidden behind a ban entry in a lower position. |
<logentry> | <ipStart>-<ipEnd> | #<slotStart>[-<slotEnd> | N=<name> | L=<LastUsedStart>[-<LastUsedEnd>] | Admin | Drop | Kick[,Mask] Name: selects only log entries including the given string LastUsed: omit time and/or day if not needed, e.g. 2004/08-2004/09 Admin: selects only log entries detected as admins Drop: selects only log entries with DropCount > 0 Kick: selects only log entries with KickCount > 0 Mask (requires IP range or slot (range): extend IP range to powers of 2. E.g. range 1.2.3.24-1.2.3.129,Mask becomes 1.2.3.0-1.2.3.255 and range 1.2.3.24-1.2.8.24,Mask becomes 1.2.0.0-1.2.15.255 etc. This might be useful when experimentally setting up IP ranges for logged names of dynamic IP address ranges. |
<logsort> | [-]<LastUsed> LastUsed: sort the listed log entries by their LastUsed information precede the sort criterion with a minus sign to reverse the sort direction |
<string> | replace blanks with %20, % with %25 |
<stamp> | yyyy[/mm[/dd[%20hh[:mm[:ss]]]]] Note that all time comparisons are simple string comparisons, i.e. "2004/12/31" < "2005/02/25" because "4" < "5" (as expected) but "31.12.2004" > "25.02.2005" because "3" > "2" (not wanted) |
Command | Item | Description |
---|---|---|
log list | P[reLogin] | counts how often a player reached the PreLogin state (before download / join). |
log list | L[ogin] | counts how often a player reached the Login state (successful join). |
log list | K[ick] | counts how often a player was kicked (manually). |
log list | D[rop] | counts how often a player's connection was dropped (invalid join parameters, stealth ban). |
ban list | S[tealthCount] | counts how often a stealth ban was applied. This value won't count for non-stealth bans, but may (re-) start to count if you change the stealth mode of a ban entry. |
ban list | D[ropCount] | counts how often a non-stealth ban was applied, i.e. how often the player was blocked in PreLogin. This value won't count for stealth bans, but may (re-) start to count if you change the stealth mode of a ban entry. |
Unreal\System\Nephthys.ini
file every now and then ;-)bUscriptAPI=true
needs to be configured
(should either be given as installation instruction in your end user manual
or make your mod set it during BeginPlay!).Description: | Called when connection is rejected before opening. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space or "" if not logged yet |
Description: | Called when connection is just opened, PreLogin() not yet passed. Data may be received or sent from now on. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space or "" if not logged yet |
|
Outputs: | MoreInfo | If the uscript mod can gain some more informations about this connection it may be stored here. These informations can be obtained later by calls to GetPlayerInfo() or GetConnectionInfo(). |
Description: | Called when connection is closed before PreLogin(), e.g. due to invalid join parameters or a recognized attack. Since the connection was closed now, no data may be sent or received any more. | |
Parameters: | Addr | IP:Port of the current connection |
Name | The current name of the join attempt or "" if not analysed yet |
|
Names | All known names for connection's IP separated by space or "" if not logged yet |
Description: | Called after a new player passed PreLogin(). | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space | |
Outputs: | Error | To reject the join attempt at this place the uscript mod must set up an error message which gets logged. Although the connection gets dropped after that, the message isn't transmitted to the client. Use the game type's PreLogin() function to do so. |
Description: | Called when new connection started to load a file. | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space | |
FileName | The complete name of the file, including the device (drive letter) and all folder names. | |
FileSize | The size of the file in bytes. |
Description: | Called after new player passed Login(). | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space | |
Outputs: | Error | To reject the join attempt at this place the uscript mod must set up an error message which gets logged. Although the connection gets dropped after that, the message isn't transmitted to the client. Use the game type's Login() function to do so. |
Description: | called when an established connection is closed (kick). | |
Parameters: | Addr | IP:Port of the current connection |
RequestURL | The complete URL of the join attempt | |
Names | All known names for connection's IP separated by space |
Description: | Called after a player passed Logout(). | |
Parameters: | Addr | IP:Port of the current connection |
Name | The name of the join attempt (might not be the name the player used at last) | |
Names | All known names for connection's IP separated by space |
Description: | Called when a connection is considered to be RJA attacking. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space | |
count | Number of new connections resulting in attack detection | |
TimeDelta | The time needed to open the connections. |
Description: | Called when a RJA attack has stopped. This event can be called some time after the attack really stopped. | |
Parameters: | Addr | IP:Port of the current connection |
Names | All known names for connection's IP separated by space | |
count | Number of new connections during attack | |
TimeDelta | The duration of the attack. |
Description: | Called when a connection is considered to be DRJA attacking. | |
Parameters: | count | Number of new connections resulting in attack detection |
TimeDelta | The time needed to open the connections. |
Description: | Called when a DRJA attack has stopped. This event can be called some time after the attack really stopped. | |
Parameters: | count | Number of new connections during attack |
TimeDelta | The duration of the attack. |
bUscriptAPI
doesn't matter.Description: | Determine whether an IP and/or name is banned. To implement ban checking in the game type's PreLogin() or Login() a call of GetConnectionInfo() followed by a call of this function gains the information needed to return a (ban rule customized) message to the client. | |
Outputs: | message | If a ban rule matches and it provides a message it's returned here, else "" . |
Parameters: | ip | If given: determine whether this IP is banned. At least ip or name must be given. To match a name reservation ban ip and name must be given. |
name | If given: determine whether this name is banned. At least ip or name must be given. To match a name reservation ban ip and name must be given. | |
bStealth | If bStealth!=false (i.e. =true or omitted) only stealth ban rules are considered, all non-stealth ban rules aren't applied |
|
bCount | Whether to count the ban appliance (depending on bStealth) | |
Returns: | The description of the matched ban rule or "" if none matched. |
Description: | Insert a new stealth ban rule, valid always and forever, or set an existing ban rule to always valid and append the comment. | |
Parameters: | ip | If given: ban this IP. Either ip or name must be given. |
name | If given: ban this name. Either ip or name must be given. | |
comment | Additional comment for this rule (e.g. reason). | |
AppendIfNot | If an existing ban rule matches the parameters and it doesn't include any of the (space separated) words given here, the new comment is appended to the old comment (with space as separator). Otherwise the old comment is replaced by the new comment. Note that existing ban rules aren't set to stealth. | |
Returns: | A message what has been done. |
Description: | Read the ban information of a given ban number as a printed string. | |
Parameters: | slot | The ban number to examine. |
Returns: | The description of the matched ban rule or "" if none matched. |
Description: | Gets informations about a given player or the event causing connection. | |
Parameters: | PP | The PlayerPawn to obtain the informations for. Called from within the game type's PreLogin(), Login() and PostLogin() functions this parameter may be set to none to obtain informations about the connection causing the event call of PreLogin(), Login() resp. PostLogin().Called from any other context this parameter has to refer to an existing PlayerPawn, else this function will fail. |
Outputs: | Addr | Current IP:Port of the player. |
State | State of the connection. | |
Names | All known names for connection's IP separated by space | |
MoreInfo | More informations as given by event ConnectionOpened() | |
Returns: | Whether it worked out good (true ) or bad (false , e.g. no connection for PlayerPawn). |
Description: | Kicks by a given PlayerPawn, IP:Port or IP. The traffic is stopped immediately, the connection is closed as soon as possible. | |
Parameters: | PP | If given: the PlayerPawn to kick. Either PP or Addr must be given. |
Addr | If given: IP:Port or IP to kick. If only IP is given all connections matching this IP are kicked. | |
Returns: | Whether it worked out good (true ) or bad (false , e.g. no connection for PlayerPawn or IP currently not online). |
Description: | Log a new name for a given IP. E.g. this may be called in case of name changes. | |
Parameters: | ip | The IP to log. |
name | The name to log. | |
Returns: | A message what has been done. |
Description: | Executes a command as if given by npt <command>. | |
Parameters: | cmd | The command string to execute. |
Description: | Gets informations about a given connection. | |
Parameters: | Addr | IP:Port of the connection to examine. |
Outputs: | PP | PlayerPawn using this connection or none if not connected yet / anymore. |
State | State of the connection. | |
Names | All known names for the connection separated by space | |
MoreInfo | More informations as given by event ConnectionOpened() | |
UploadFilename | The complete name of the file currently uploading, including the device (drive letter) and all folder names or "" if connection isn't uploading. |
|
UploadTransfered | Number of bytes already uploaded or 0 if connection isn't uploading. | |
UploadTotalSize | The size of the file in bytes or 0 if connection isn't uploading. | |
Returns: | Whether it worked out good (true ) or bad (false , e.g. no connection for Addr). |