Skip to content

Releases: PowerDNS/weakforced

Release 2.4.1-alpha1

15 Apr 14:01
v2.4.1-alpha1
a1878ed
Compare
Choose a tag to compare
Release 2.4.1-alpha1 Pre-release
Pre-release

Release Notes for OX Abuse Shield 2.4.1 (Alpha1)

New Features

  • Dynamic management of siblings via Lua functions and REST API
  • Optional per-sibling encryption keys
  • Packaging for Amazon Linux in pdns-builder

Bug Fixes/Changes

  • None

Dynamic Management of Siblings via Lua functions

Before this release, siblings could only be defined as part of the startup configuration;
there was no way to add or remove siblings dynamically while wforce was running. With this
release all sibling management functions in Lua can be used from the console to add/remove
siblings at runtime. In addition, per-sibling encryption keys can optionally be specified.

The complete set of sibling management functions is as follows:

  • setSiblings()
  • setSiblingsWithKey() (New)
  • addSibling()
  • addSiblingWithKey() (New)
  • removeSibling() (New)

For full details, see the wforce.conf man page.

Dynamic Management of Siblings via REST API

New REST API endpoints enable siblings to be managed dynamically.

The new REST API endpoints are as follows:

  • /?command=addSibling
  • /?command=removeSibling
  • /?command=setSibling

For more details see the wforce OpenAPI specification, which is available at https://powerdns.github.io/weakforced/

Note that the REST API does not currently support TLS natively, so use of a HTTPS reverse proxy on localhost
is strongly recommended when specifying per-sibling encryption keys.

Optional Per-Sibling Encryption Keys

All the methods of managing siblings (Lua or REST API) enable per-sibling encryption keys to be set.
Encryption keys are are 32-byte strings that are Base-64 encoded before passing to the sibling
management functions or REST API.

Release 2.4.0

05 Aug 13:35
v2.4.0
46f30d9
Compare
Choose a tag to compare

Release Notes for OX Abuse Shield 2.4.0

New Features

  • New wf_dump_entries tool to dump stats DBs to file
  • Support for new "forwarding" type in replication messages
  • Support for Prometheus via the new /metrics REST endpoint
  • Add Date, Last-Modified and Cache-Control headers to all responses
  • Session-ID now logged for allow/report commands
  • Improved logging to show line numbers for Lua errors
  • Enable TCP keepalive for redis connections
  • Configurable timeout for R/W on redis connections

Bug Fixes/Changes

  • Fix duplicate command stats under some circumstances

New wf_dump_entries Tool

New tool to dump the contents of Stats DBs for debugging purposes.
man wforce_dump_entries for more information.

Forwarding Type in Replication Messages

Replication messages now have a 'forwarding' flag, which is used to
indicate when a message has been forwarded. This can be used to
prevent forwarding loops.

Support for Prometheus Metrics

Both the wforce and trackalert daemons support native Prometheus
metrics via the new /metrics REST API endpoint. This endpoint follows
the format described
here.

The prometheus metrics deprecate the existing metrics functionality
including the following console commands:

  • showPerfStats()
  • showCommandStats()
  • showCustomStats()

as well as the following REST API endpoints:

  • /?command=stats

The prometheus metrics include metrics for many components that were
not previously instrumented, including:

  • Redis statistics
  • DNS Queries
  • Whitelists and blacklists

New HTTP Response Headers

All HTTP responses now include the following headers:

  • Last-Modified
  • Date
  • Cache-Control

Last-Modified and Date headers will always reflect the current
date/time as seen by the wforce server.

Session-ID Logging

The allow and report logs will now contain session_id information.

Improved Logging for Lua Errors

The Lua wrapper code has been updated to provide better traceback
information, including line numbers, for Lua errors. This helps when
writing Lua policy that triggers a Lua exception.

Enable TCP keepalive for redis connections

Redis connections could be timed-out by middleboxes, which would not
be detected because keepalive was not enabled for Redis
connections. Now it is enabled (always).

Configurable timeout for R/W on redis connections

Previously reads from and writes to Redis were subject to the
underlying socket timeout defaults. Now the timeout defaults to 100000
microseconds, and is configurable with new Lua functions:
blacklistPersistRWTimeout() and whitelistPersistRWTimeout(). See
wforce.conf for more details.

Fix Duplicate Command Stats

Under certain circumstances, relating to EOF handling when sockets are
closed, REST API command statistics would be double counted. This has
been fixed by refactoring the EOF handling code.

Release 2.4.0-rc1

03 Aug 11:19
v2.4.0-rc1
387da7a
Compare
Choose a tag to compare
Release 2.4.0-rc1 Pre-release
Pre-release

Release Notes for OX Abuse Shield 2.4.0

New Features

  • New wf_dump_entries tool to dump stats DBs to file
  • Support for new "forwarding" type in replication messages
  • Support for Prometheus via the new /metrics REST endpoint
  • Add Date, Last-Modified and Cache-Control headers to all responses
  • Session-ID now logged for allow/report commands
  • Improved logging to show line numbers for Lua errors
  • Enable TCP keepalive for redis connections
  • Configurable timeout for R/W on redis connections

Bug Fixes/Changes

  • Fix duplicate command stats under some circumstances

New wf_dump_entries Tool

New tool to dump the contents of Stats DBs for debugging purposes.
man wforce_dump_entries for more information.

Forwarding Type in Replication Messages

Replication messages now have a 'forwarding' flag, which is used to
indicate when a message has been forwarded. This can be used to
prevent forwarding loops.

Support for Prometheus Metrics

Both the wforce and trackalert daemons support native Prometheus
metrics via the new /metrics REST API endpoint. This endpoint follows
the format described
here.

The prometheus metrics deprecate the existing metrics functionality
including the following console commands:

  • showPerfStats()
  • showCommandStats()
  • showCustomStats()

as well as the following REST API endpoints:

  • /?command=stats

The prometheus metrics include metrics for many components that were
not previously instrumented, including:

  • Redis statistics
  • DNS Queries
  • Whitelists and blacklists

New HTTP Response Headers

All HTTP responses now include the following headers:

  • Last-Modified
  • Date
  • Cache-Control

Last-Modified and Date headers will always reflect the current
date/time as seen by the wforce server.

Session-ID Logging

The allow and report logs will now contain session_id information.

Improved Logging for Lua Errors

The Lua wrapper code has been updated to provide better traceback
information, including line numbers, for Lua errors. This helps when
writing Lua policy that triggers a Lua exception.

Enable TCP keepalive for redis connections

Redis connections could be timed-out by middleboxes, which would not
be detected because keepalive was not enabled for Redis
connections. Now it is enabled (always).

Configurable timeout for R/W on redis connections

Previously reads from and writes to Redis were subject to the
underlying socket timeout defaults. Now the timeout defaults to 100000
microseconds, and is configurable with new Lua functions:
blacklistPersistRWTimeout() and whitelistPersistRWTimeout(). See
wforce.conf for more details.

Fix Duplicate Command Stats

Under certain circumstances, relating to EOF handling when sockets are
closed, REST API command statistics would be double counted. This has
been fixed by refactoring the EOF handling code.

Release 2.2.2

13 Mar 16:11
v2.2.2
28fd1b1
Compare
Choose a tag to compare

Release Notes for OX Abuse Shield 2.2.2

Bug Fixes/Changes

  • Fix control socket leak when client closes connection immediately

New Features

  • Support building debian buster packages
  • StatsDBs can now be sharded for better performance (man wforce.conf
    for more info)
  • StatsDB expiry thread now runs more often by default
  • StatsDB expiry thread sleep time is now configurable (man
    wforce.conf for more info)
  • Support for Kafka REST Proxy in webhooks (man wforce_webhook for
    more info)

Release 2.2.1

25 Nov 14:37
v2.2.1
be21f49
Compare
Choose a tag to compare

Release Notes for OX Abuse Shield 2.2.1

Bug Fixes/Changes

  • Fix wforce crash in Sibling send thread triggered by syncDB operation

Release 2.2.0

25 Nov 14:37
v2.2.0
6c3d361
Compare
Choose a tag to compare

Release Notes for OX Abuse Shield 2.0.0

New Features

  • Lookup individual GeoIP2 values (Unsigned Integer, String,
    Double/Float and Boolean)
  • Add session_id to wforce LoginTuple
  • The Report API is now deployable via proper packaging, systemd and gunicorn
  • Custom GET Endpoints supporting non-JSON return values
  • New Kibana Reports and Dashboard to view effectiveness of wforce
    policy
  • New "type" field added to built-in webhooks
  • Built-in whitelists added in addition to built-in blacklists
  • New checkBlacklist and checkWhitelist functions in Lua
  • Built-in black/whitelisting can be disabled and checked from Lua
    instead
  • Thread names support
  • Built-In Blacklist and Whitelist return messages are configurable
  • Support TCP Keepalive

Bug Fixes/Changes

  • Fix typo in wforce.conf.example blackistLogin->blacklistLogin
  • Python3 support throughout wforce (regression tests and deployment)
  • Uses "bytes" instead of "string" in replication, which avoids
    protobuf errors for non-UTF-8 StatsDB keys or values.
  • Remove ctpl from wforce
  • Sibling threads now use explicit std::queue instead of ctpl
  • Only connect to TCP siblings when necessary (not on startup) to
    prevent delays on startup.
  • Updated logstash.conf file for ELK integration

Lookup Individual GeoIP2 Values

Previously the GeoIP2 support was limited to retrieving City and
County DB information, with a fixed set of fields returned. However
this meant that other DBs (e.g. ISPs, Anonymizers etc.) could not be
queried, as well as additional fields in City or Country DBs.

Now there are four new Lua functions to query arbitrary fields in the
Maxmind DBs:

  • lookupStringValue
  • lookupDoubleValue
  • lookupUIntValue
  • lookupBoolValue

For example:

local citydb = getGeoIP2DB("City")
local city_name = citydb:lookupStringValue(newCA(ip_address), {"city", "names", "en"})
local city_lat = citydb:lookupDoubleValue(newCA(ip_address), {"location", "latitude"})
local city_long = citydb:lookupDoubleValue(newCA(ip_address), {"location", "longitude"})
local accuracy = citydb:lookupUIntValue(newCA(ip_address), {"location", "accuracy_radius"})
local eu = citydb:lookupBoolValue(newCA(ip_address), {"country", "is_in_european_union"})

Add session_id to wforce LoginTuple

It can be useful for wforce to recognise when multiple logins belong
to the same session. Therefore a new field "session_id" is added to
the LoginTuple table, which allows a session id to be passed to
wforce. This field is optional, so if empty it should be ignored. For
example:

local session_id = lt.session_id

Deployable Report API

Previously the Report API was supplied as an experimental feature,
which was supplied as a Flask application, but without support for running
in production, packaging etc.

Now the Report API is fully deployable; it is packaged in a new
package "wforce-report-api", and can be started/stopped via
systemd. For example:

systemctl enable wforce-report-api
systemctl start wforce-report-api

The Report API is still a Flash application, which runs under
gunicorn, and the configuration and deployment settings are
configurable.

Report API configuration is via:

/etc/wforce-report-api/wforce-report-api-instance.conf

Gunicorn configuration is via:

/etc/wforce-report-api/wforce-report-api-web.conf

It is recommended to run Gunicorn behind an nginx proxy in a
production deployment.

Custom GET Endpoints

The existing Custom Endpoint functionality is based only on POST
commands, and requires return values to be json-encoded. This presents
problems with more limited clients such as firewalls or other network
equipment, which only support HTTP GET, and cannot parse json-encoded
return values.

The Custom GET endpoints solve this issue by allowing endpoints to be
created which are based on HTTP GET, and which return data using
the text/plain content type.

Custom GET endpoints do not take any parameters, so there is no way to
pass data to the endpoints.

For example the following function uses the new getIPBlacklist()
functionality to return a text version of the IP blacklist:

function returnTextBlacklist()
    local ipbl = getIPBlacklist()
    local ret_table = {}
    for i,j in pairs(ipbl)
    do
        for k,v in pairs(j)
        do
            if k == "ip"
            then
                table.insert(ret_table, v)
            end
        end
    end
    local s =  table.concat(ret_table, "\n") .. "\n"
    unblacklistIP(newCA("1.2.3.4"))
    return s
end

setCustomGetEndpoint("textBlacklist", returnTextBlacklist)

New Kibana Reports and Dashboard

New Kibana Reports and Dashboard have been added to the
kibana_saved_objects.json file. These reports are based on "allow"
webhooks sent to elasticsearch.

New "type" field added to built-in webhooks

The built-in webhooks add a "type" field to the webhook json to make
it easier to search for specific webhook types in elasticsearch. The
type field can have the following values:

  • wforce_report
  • wforce_allow
  • wforce_reset
  • wforce_expireblwl
  • wforce_addblwl
  • wforce_delblwl

Built-in Whitelists

In addition to the built-in blacklists there are now built-in
whitelists. Entries can be added and deleted from the built-in
whitelists using either the REST API or using Lua commands.

For example using the REST API:

curl -XPOST --data '{ "ip":"1.2.3.4" }' -u user:pass http://localhost:8084/?command=addWLEntry

For example using Lua:

whitelistIP(lt.remote, 3600, "This is the reason why it is blacklisted")

New checkBlacklist and checkWhitelist functions in Lua

New functions to check the built-in black and whitelists are available
from Lua:

  • checkBlacklistIP
  • checkBlacklistLogin
  • checkBlacklistIPLogin
  • checkWhitelistIP
  • checkWhitelistLogin
  • checkWhitelistIPLogin

See the wforce.conf man page for more details.

Built-in Black/Whitelisting can be disabled

The built-in black/whitelisting functionality can be disabled so that
the checks can instead be performed from Lua. This is achieved with
the following Lua commands:

disableBuiltinBlacklists()
disableBuiltinWhitelists()

Thread Names Support

Every thread type in wforce is now named, so that top -H for example
will show individual thread names. This can be very useful for
diagnosing when particular threads are CPU-bound and could benefit
from increasing the size of the thread pool for example.

Built-In Blacklist return messages are configurable

The following new functions enable the return messages for built-in blacklists to be configured:

  • setBlacklistIPRetMsg
  • setBlacklistLoginRetMsg
  • setBlackistIPLoginRetMsg

See the wforce.conf man page for more details.

Support TCP Keepalive

The wforce daemon previously did not enable TCP keepalive on
accepted sockets. The TCP keepalive socketoption is now enabled for
all sockets.

Release 2.2.0-beta1

18 Sep 16:26
v2.2.0-beta1
3bb9a7e
Compare
Choose a tag to compare
Release 2.2.0-beta1 Pre-release
Pre-release

Release Notes for OX Abuse Shield 2.2.0-beta1

New Features

  • Lookup individual GeoIP2 values (Unsigned Integer, String,
    Double/Float and Boolean)
  • Add session_id to wforce LoginTuple
  • The Report API is now deployable via proper packaging, systemd and gunicorn
  • Custom GET Endpoints supporting non-JSON return values
  • New Kibana Reports and Dashboard to view effectiveness of wforce
    policy
  • New "type" field added to built-in webhooks
  • Built-in whitelists added in addition to built-in blacklists
  • New checkBlacklist and checkWhitelist functions in Lua
  • Built-in black/whitelisting can be disabled and checked from Lua
    instead
  • Thread names support
  • Built-In Blacklist and Whitelist return messages are configurable
  • Support TCP Keepalive

Bug Fixes/Changes

  • Fix typo in wforce.conf.example blackistLogin->blacklistLogin
  • Python3 support throughout wforce (regression tests and deployment)
  • Uses "bytes" instead of "string" in replication, which avoids
    protobuf errors for non-UTF-8 StatsDB keys or values.
  • Remove ctpl from wforce
  • Sibling threads now use explicit std::queue instead of ctpl
  • Only connect to TCP siblings when necessary (not on startup) to
    prevent delays on startup.
  • Updated logstash.conf file for ELK integration

Lookup Individual GeoIP2 Values

Previously the GeoIP2 support was limited to retrieving City and
County DB information, with a fixed set of fields returned. However
this meant that other DBs (e.g. ISPs, Anonymizers etc.) could not be
queried, as well as additional fields in City or Country DBs.

Now there are four new Lua functions to query arbitrary fields in the
Maxmind DBs:

  • lookupStringValue
  • lookupDoubleValue
  • lookupUIntValue
  • lookupBoolValue

For example:

local citydb = getGeoIP2DB("City")
local city_name = citydb:lookupStringValue(newCA(ip_address), {"city", "names", "en"})
local city_lat = citydb:lookupDoubleValue(newCA(ip_address), {"location", "latitude"})
local city_long = citydb:lookupDoubleValue(newCA(ip_address), {"location", "longitude"})
local accuracy = citydb:lookupUIntValue(newCA(ip_address), {"location", "accuracy_radius"})
local eu = citydb:lookupBoolValue(newCA(ip_address), {"country", "is_in_european_union"})

Add session_id to wforce LoginTuple

It can be useful for wforce to recognise when multiple logins belong
to the same session. Therefore a new field "session_id" is added to
the LoginTuple table, which allows a session id to be passed to
wforce. This field is optional, so if empty it should be ignored. For
example:

local session_id = lt.session_id

Deployable Report API

Previously the Report API was supplied as an experimental feature,
which was supplied as a Flask application, but without support for running
in production, packaging etc.

Now the Report API is fully deployable; it is packaged in a new
package "wforce-report-api", and can be started/stopped via
systemd. For example:

systemctl enable wforce-report-api
systemctl start wforce-report-api

The Report API is still a Flash application, which runs under
gunicorn, and the configuration and deployment settings are
configurable.

Report API configuration is via:

/etc/wforce-report-api/wforce-report-api-instance.conf

Gunicorn configuration is via:

/etc/wforce-report-api/wforce-report-api-web.conf

It is recommended to run Gunicorn behind an nginx proxy in a
production deployment.

Custom GET Endpoints

The existing Custom Endpoint functionality is based only on POST
commands, and requires return values to be json-encoded. This presents
problems with more limited clients such as firewalls or other network
equipment, which only support HTTP GET, and cannot parse json-encoded
return values.

The Custom GET endpoints solve this issue by allowing endpoints to be
created which are based on HTTP GET, and which return data using
the text/plain content type.

Custom GET endpoints do not take any parameters, so there is no way to
pass data to the endpoints.

For example the following function uses the new getIPBlacklist()
functionality to return a text version of the IP blacklist:

function returnTextBlacklist()
    local ipbl = getIPBlacklist()
    local ret_table = {}
    for i,j in pairs(ipbl)
    do
        for k,v in pairs(j)
        do
            if k == "ip"
            then
                table.insert(ret_table, v)
            end
        end
    end
    local s =  table.concat(ret_table, "\n") .. "\n"
    unblacklistIP(newCA("1.2.3.4"))
    return s
end

setCustomGetEndpoint("textBlacklist", returnTextBlacklist)

New Kibana Reports and Dashboard

New Kibana Reports and Dashboard have been added to the
kibana_saved_objects.json file. These reports are based on "allow"
webhooks sent to elasticsearch.

New "type" field added to built-in webhooks

The built-in webhooks add a "type" field to the webhook json to make
it easier to search for specific webhook types in elasticsearch. The
type field can have the following values:

  • wforce_report
  • wforce_allow
  • wforce_reset
  • wforce_expireblwl
  • wforce_addblwl
  • wforce_delblwl

Built-in Whitelists

In addition to the built-in blacklists there are now built-in
whitelists. Entries can be added and deleted from the built-in
whitelists using either the REST API or using Lua commands.

For example using the REST API:

curl -XPOST --data '{ "ip":"1.2.3.4" }' -u user:pass http://localhost:8084/?command=addWLEntry

For example using Lua:

whitelistIP(lt.remote, 3600, "This is the reason why it is blacklisted")

New checkBlacklist and checkWhitelist functions in Lua

New functions to check the built-in black and whitelists are available
from Lua:

  • checkBlacklistIP
  • checkBlacklistLogin
  • checkBlacklistIPLogin
  • checkWhitelistIP
  • checkWhitelistLogin
  • checkWhitelistIPLogin

See the wforce.conf man page for more details.

Built-in Black/Whitelisting can be disabled

The built-in black/whitelisting functionality can be disabled so that
the checks can instead be performed from Lua. This is achieved with
the following Lua commands:

disableBuiltinBlacklists()
disableBuiltinWhitelists()

Thread Names Support

Every thread type in wforce is now named, so that top -H for example
will show individual thread names. This can be very useful for
diagnosing when particular threads are CPU-bound and could benefit
from increasing the size of the thread pool for example.

Built-In Blacklist return messages are configurable

The following new functions enable the return messages for built-in blacklists to be configured:

  • setBlacklistIPRetMsg
  • setBlacklistLoginRetMsg
  • setBlackistIPLoginRetMsg

See the wforce.conf man page for more details.

Support TCP Keepalive

The wforce daemon previously did not enable TCP keepalive on
accepted sockets. The TCP keepalive socketoption is now enabled for
all sockets.

Release 2.0.1

16 Apr 09:52
v2.0.1
6add14a
Compare
Choose a tag to compare

Release Notes for 2.0.1

New Features/Bug Fixes

  • Fix issue where blacklisted is always true in getDBStats output
  • Fix issue where threadnames were not displayed correctly
  • Fix issue where siblings defined as tcp were connected to on startup
  • Fix issue where non-UTF-8 login names would cause protobuf erros

Fix blacklisted always true in getDBStats output

Fix unitialized variable causing getDBStats command to always return
blacklisted: true.

Fix Threadnames Display Issue

Threadn support was implemented, but wasn't working due to compile
dependency issues. This is now fixed meaning that top will show thread
names when called with the -H option for example.

Fix Sibling TCP Connect Issue on Startup

Support for sibling using tcp was added in 2.0.0, however when
siblings are defined as TCP, wforce was attempting to connect to them
on startup. If several wforce servers were started at the same time,
this would cause a delay while each tries to connect to the other over
TCP but fails. This fix delays TCP connection until the first
replication attempt. Note that any static blacklist entries in the
config will cause a replication attempt on startup and this will
trigger the same startup delay behaviour. Thus it is not recommended to
create static blacklist entries in the config.

Fix non-UTF-8 Login Name Issue

Replication of data used the protobuf "string" type, which gets
validated on parsing to ensure it is a UTF-8 string. However, certain
fields such as login can contain non-UTF-8 characters, so this fix
changes to use the "bytes" type instead. This fix is backwards
compatible because string and bytes types are identical on the wire.

Release v2.0.0

11 Dec 13:46
v2.0.0
6b5dd9a
Compare
Choose a tag to compare

Release Notes for OX Abuse Shield 2.0.0

New Features/Bug Fixes

  • Fix extra : at the end of custom log lines when kv table is empty
  • Return additional info about blacklist in allow and getDBStats RESTAPI functions
  • New Lua functions to remove blacklist entries
  • Add configuration setting "setNumWebHookConnsPerThread"
  • Add configuration setting "setWebHookTimeoutSecs"
  • Add support for querying replication status in showStringStatsDB()
  • Add sibling received success/fail stats to siblings() command
  • New custom stats framework
  • New stats for all commands, including custom commands
  • GeoIP2 support (MMDB-style DBs)
  • New twResetField() function for statsDBs
  • Configurable accuracy for HLL and CountMin types
  • DB Synchronization for newly started wforce instances
  • Support for replication over TCP
  • Customizable log facility via a command line option
  • New trackalert daemon
  • Logstash Configuration and Elasticsearch Templates
  • Kibana Reports and Dashboards
  • Report API

Fix Extra : at end of Custom Log Lines

The Lua infoLog, errorLog etc. functions would previously, when called
as 'errorLog("foo", {})' log:

foo :

Now the same call will log only:

foo

Return additional info about blacklist in allow and getDBStats REST API functions

The allow command will now return additional information when an
IP/Login is blacklisted. The 'r_attrs' object will contain four new
fields:

  • expiration - A string showing the date/time when the blacklist will
    expire
  • reason - A string stating why the blacklist was created
  • key - What was blacllisted, i.e. either ip, login or iplogin
  • blacklisted - This will be set to 1

The getDBStats command will return additional information about
blacklisted objects:

  • bl_expire - A string showing the date/time when the blacklist will
    expire
  • lb_reason - A string stating why the blacklist was created

New Lua functions to remove blacklist entries

The following new Lua functions are available:

  • unblacklistNetmask
  • unblacklistIP
  • unblacklistLogin
  • unblacklistIPLogin

See the wforce.conf manpage for more details.

New Configuration Setting setNumWebHookConnsPerThread

The webhook support has been completely refactored in order to achieve
much higher performance with fewer resources. Previously a very high
number of webhook threads was required to achieve good performance,
whereas now a much smaller number of threads can achieve the same
performance.

The previous per-webhook configuration key "num_conns" is no longer
supported. Instead the global configuration setting
"setNumWebHookConnsPerThread" is used.

For example:

            setNumWebHookConnsPerThread(10)

The default is 10 connections per webhook thread.

Add configuration setting "setWebHookTimeoutSecs"

The function setWebHookTimeoutSecs() is used to control the time for
webhook requests, e.g.:

setWebHookTimeoutSecs(2)

Support for querying replication status in showStringStatsDB()

The showStringStatsDB() command now shows whether each StatsDB is
configured for replication or not.

For example:

            > showStringStatsDB()
            DB Name        Repl? Win Size/No Max Size  Cur Size  Field Name       Type
            MyDB1          yes   1/15        524288    0         countLogins      int
                                                                 diffPasswords    hll
            MyDB2          no    600/6       5000      2093      diffIPs          hll

Add Sibling received success/fail stats to siblings() command

The siblings() command now shows success and failure stats about
received messages as well as sent messages.

For example:

    > siblings()
    Address                             Send Successes  Send Failures  Rcv Successes   Rcv Failures     Note
    127.0.0.1:4001                      0               0              17              0                
    127.0.0.1:4002                      0               0              0               0                Self

New Custom Stats Framework

Two new functions, "addCustomStat" and "incCustomStat" can be used
to keep track of custom statistics. A new custom counter is created
with "addCustomStat", e.g.

addCustomStat("custom_stat1")

Custom statistics are counters which track statistics over a 5 minute
period. Every 5 minutes, the current values of all the custom stats
counters are logged to the wforce log file, before the counters are reset.

Stats can be incremented with the "incCustomStat" command:

incCustomStat("custom_stat1")

New stats for all commands

Previously there were no statistics logged for all the REST API
commands; only allow and report commands. Now all REST API commands
are tracked and statistics are reported, including for custom
endpoints created from Lua.

For example:

command stats last 300 secs: addBLEntry=42 allow=393827 allow_allowed=299221 allow_blacklisted=3224 allow_denied=9884 allow_tarpitted=8373 delBLEntry=3 getBL=3949 getDBStats=3229 ping=83764 report=38473 reset=0 stats=0 syncDBs=0 syncDone=0 

custom stats last 300 secs: customFunc1=3401

GeoIP2 support (MMDB-style DBs)

Maxmind are in the process of deprecating the GeoIP Legacy DB support,
therefore this release supports GeoIP2 format databases, i.e. the MMDB
format.

This release therefore deprecates the GeoIP legacy functions, which
will be removed in a later release. The following functions are
deprecated:

  • initGeoIPDB()
  • initGeoIPCityDB()
  • initGeoIPISPDB()
  • lookupCountry()
  • lookupISP()
  • lookupCity()

Due to differences in the way that the GeoIP2 API works, GeoIP
Databases must be opened by specifying the filename of the database to
be used. For example:

newGeoIP2DB("CityDB", "/usr/share/GeoIP/GeoLite2-City.mmdb")

To retrieve a GeoIP DB to conduct queries against, use the following
command:

local citydb = getGeoIP2DB("CityDB")

Once a database has been assigned to a local variable, it can be
queried, for example:

    my_country = countrydb:lookupCountry(newCA("8.8.8.8"))
my_country = countrydb:lookupCountry(lt.remote)

local my_isp = ispdb:lookupISP(newCA("128.243.16.21"))

local gip_record = citydb:lookupCity(lt.remote)
    local my_city = gip_record.city
    local my_latitude = gip_record.latitude

For full details see "man wforce.conf".

New twResetField() function for statsDBs

The twReset() function can be used to reset all the fields for a given
key, but previously there was no way to reset an individual field. Now
the function "twResetField()" can be used to achieve this, e.g.:

statsdb:twResetField(lt.login, "countLogins")

Configurable accuracy for HLL and CountMin types

The HLL and CountMin types of StatsDB entries are probablistic data
structures, which trade accuracy for memory usage. Previously the
accuracy (and thus memory usage) was hardcoded, however now their
accuracy can be tuned. Increasing accuracy however means a
(potentially very large) increase in memory usage, so extreme care
must be taken before modifying these parameters.

The function setHLLBits() can be used to change the accuracy of the
HLL type. The value supplied can be between 4 and 30, with the default
value being 6.

The function setCountMinBits() can be used to set the accuracy of the
CountMin type.

See the wforce.conf manpage for full details.

DB Synchronization for newly started wforce instances

Normally when a wforce instance starts, it has a "fresh" set of Stats
DBs, and therefore can take a reasonable period of time (an hour or
more depending on the policy) before it starts giving the same answers
as other wforce servers in a cluster which have been running for some
time. This issue is now addressed with the ability to tell a wforce
server to find another server which has been running for longer than a
configurable period of time, from which it can download the entire set
of Stats DBs. While a server is in the process of downloading the
Stats DBs from another server, it is in a "warmup" state; this fact is
reflected in a new return value from the "ping" REST API endpoint.

In order to enable this feature, the "addSyncHosts()" function must be
used, once for each host that will be contacted on startup, for
example:

    -- Add 10.2.3.1:8084 as a sync host,
    -- and use the password "super"
    -- Send the DB dump to 10.2.1.1:4001
    -- and let me know on 10.2.1.1:8084 when the dump is finished
    addSyncHost("10.2.3.1:8084", "super", "10.2.1.1:4001", "10.2.1.1:8084") 

The default time that the sync hosts must have been "up" for is 3600
seconds, however that can be configured using
"setMinSyncHostUptime()", e.g.:

    setMinSyncHostUptime(1800)

The replication of data between the sync host and the wforce instance
that is starting up is always performed over TCP.

See wforce.conf for full details.

Support for replication over TCP

The addSiblings() and setSiblings() functions now take an extra
(optional) parameter that specifies whether the replication should use
UDP or TCP. The default is UDP. If the protocol is specified, the port
must also be specified.

For example:

setSiblings({"127.0.1.2", "127.0.1.3:4004", "127.0.2.23:4004:tcp"})
addSibling("192.168.1.23")
    addSibling("192.168.1.23:4001:udp")
    addSibling("192.168.1.23:4003:tcp")

Customizable log facility via a command line option

The new "-f" or "--facility" command line option can be used to set
the syslog facility used for wforce logging.

For example:

wforce -f "local0"

New trackalert daemon

A new daem...

Read more

Release v2.0.0-rc1

26 Nov 13:33
v2.0.0-rc1
931be87
Compare
Choose a tag to compare
Release v2.0.0-rc1 Pre-release
Pre-release

Release Notes for OX Abuse Shield 2.0.0

New Features/Bug Fixes

  • Fix extra : at the end of custom log lines when kv table is empty
  • Return additional info about blacklist in allow and getDBStats RESTAPI functions
  • New Lua functions to remove blacklist entries
  • Add configuration setting "setNumWebHookConnsPerThread"
  • Add configuration setting "setWebHookTimeoutSecs"
  • Add support for querying replication status in showStringStatsDB()
  • Add sibling received success/fail stats to siblings() command
  • New custom stats framework
  • New stats for all commands, including custom commands
  • GeoIP2 support (MMDB-style DBs)
  • New twResetField() function for statsDBs
  • Configurable accuracy for HLL and CountMin types
  • DB Synchronization for newly started wforce instances
  • Support for replication over TCP
  • Customizable log facility via a command line option
  • New trackalert daemon
  • Logstash Configuration and Elasticsearch Templates
  • Kibana Reports and Dashboards
  • Report API

Fix Extra : at end of Custom Log Lines

The Lua infoLog, errorLog etc. functions would previously, when called
as 'errorLog("foo", {})' log:

foo :

Now the same call will log only:

foo

Return additional info about blacklist in allow and getDBStats REST API functions

The allow command will now return additional information when an
IP/Login is blacklisted. The 'r_attrs' object will contain four new
fields:

  • expiration - A string showing the date/time when the blacklist will
    expire
  • reason - A string stating why the blacklist was created
  • key - What was blacllisted, i.e. either ip, login or iplogin
  • blacklisted - This will be set to 1

The getDBStats command will return additional information about
blacklisted objects:

  • bl_expire - A string showing the date/time when the blacklist will
    expire
  • lb_reason - A string stating why the blacklist was created

New Lua functions to remove blacklist entries

The following new Lua functions are available:

  • unblacklistNetmask
  • unblacklistIP
  • unblacklistLogin
  • unblacklistIPLogin

See the wforce.conf manpage for more details.

New Configuration Setting setNumWebHookConnsPerThread

The webhook support has been completely refactored in order to achieve
much higher performance with fewer resources. Previously a very high
number of webhook threads was required to achieve good performance,
whereas now a much smaller number of threads can achieve the same
performance.

The previous per-webhook configuration key "num_conns" is no longer
supported. Instead the global configuration setting
"setNumWebHookConnsPerThread" is used.

For example:

            setNumWebHookConnsPerThread(10)

The default is 10 connections per webhook thread.

Add configuration setting "setWebHookTimeoutSecs"

The function setWebHookTimeoutSecs() is used to control the time for
webhook requests, e.g.:

setWebHookTimeoutSecs(2)

Support for querying replication status in showStringStatsDB()

The showStringStatsDB() command now shows whether each StatsDB is
configured for replication or not.

For example:

            > showStringStatsDB()
            DB Name        Repl? Win Size/No Max Size  Cur Size  Field Name       Type
            MyDB1          yes   1/15        524288    0         countLogins      int
                                                                 diffPasswords    hll
            MyDB2          no    600/6       5000      2093      diffIPs          hll

Add Sibling received success/fail stats to siblings() command

The siblings() command now shows success and failure stats about
received messages as well as sent messages.

For example:

    > siblings()
    Address                             Send Successes  Send Failures  Rcv Successes   Rcv Failures     Note
    127.0.0.1:4001                      0               0              17              0                
    127.0.0.1:4002                      0               0              0               0                Self

New Custom Stats Framework

Two new functions, "addCustomStat" and "incCustomStat" can be used
to keep track of custom statistics. A new custom counter is created
with "addCustomStat", e.g.

addCustomStat("custom_stat1")

Custom statistics are counters which track statistics over a 5 minute
period. Every 5 minutes, the current values of all the custom stats
counters are logged to the wforce log file, before the counters are reset.

Stats can be incremented with the "incCustomStat" command:

incCustomStat("custom_stat1")

New stats for all commands

Previously there were no statistics logged for all the REST API
commands; only allow and report commands. Now all REST API commands
are tracked and statistics are reported, including for custom
endpoints created from Lua.

For example:

command stats last 300 secs: addBLEntry=42 allow=393827 allow_allowed=299221 allow_blacklisted=3224 allow_denied=9884 allow_tarpitted=8373 delBLEntry=3 getBL=3949 getDBStats=3229 ping=83764 report=38473 reset=0 stats=0 syncDBs=0 syncDone=0 

custom stats last 300 secs: customFunc1=3401

GeoIP2 support (MMDB-style DBs)

Maxmind are in the process of deprecating the GeoIP Legacy DB support,
therefore this release supports GeoIP2 format databases, i.e. the MMDB
format.

This release therefore deprecates the GeoIP legacy functions, which
will be removed in a later release. The following functions are
deprecated:

  • initGeoIPDB()
  • initGeoIPCityDB()
  • initGeoIPISPDB()
  • lookupCountry()
  • lookupISP()
  • lookupCity()

Due to differences in the way that the GeoIP2 API works, GeoIP
Databases must be opened by specifying the filename of the database to
be used. For example:

newGeoIP2DB("CityDB", "/usr/share/GeoIP/GeoLite2-City.mmdb")

To retrieve a GeoIP DB to conduct queries against, use the following
command:

local citydb = getGeoIP2DB("CityDB")

Once a database has been assigned to a local variable, it can be
queried, for example:

    my_country = countrydb:lookupCountry(newCA("8.8.8.8"))
my_country = countrydb:lookupCountry(lt.remote)

local my_isp = ispdb:lookupISP(newCA("128.243.16.21"))

local gip_record = citydb:lookupCity(lt.remote)
    local my_city = gip_record.city
    local my_latitude = gip_record.latitude

For full details see "man wforce.conf".

New twResetField() function for statsDBs

The twReset() function can be used to reset all the fields for a given
key, but previously there was no way to reset an individual field. Now
the function "twResetField()" can be used to achieve this, e.g.:

statsdb:twResetField(lt.login, "countLogins")

Configurable accuracy for HLL and CountMin types

The HLL and CountMin types of StatsDB entries are probablistic data
structures, which trade accuracy for memory usage. Previously the
accuracy (and thus memory usage) was hardcoded, however now their
accuracy can be tuned. Increasing accuracy however means a
(potentially very large) increase in memory usage, so extreme care
must be taken before modifying these parameters.

The function setHLLBits() can be used to change the accuracy of the
HLL type. The value supplied can be between 4 and 30, with the default
value being 6.

The function setCountMinBits() can be used to set the accuracy of the
CountMin type.

See the wforce.conf manpage for full details.

DB Synchronization for newly started wforce instances

Normally when a wforce instance starts, it has a "fresh" set of Stats
DBs, and therefore can take a reasonable period of time (an hour or
more depending on the policy) before it starts giving the same answers
as other wforce servers in a cluster which have been running for some
time. This issue is now addressed with the ability to tell a wforce
server to find another server which has been running for longer than a
configurable period of time, from which it can download the entire set
of Stats DBs. While a server is in the process of downloading the
Stats DBs from another server, it is in a "warmup" state; this fact is
reflected in a new return value from the "ping" REST API endpoint.

In order to enable this feature, the "addSyncHosts()" function must be
used, once for each host that will be contacted on startup, for
example:

    -- Add 10.2.3.1:8084 as a sync host,
    -- and use the password "super"
    -- Send the DB dump to 10.2.1.1:4001
    -- and let me know on 10.2.1.1:8084 when the dump is finished
    addSyncHost("10.2.3.1:8084", "super", "10.2.1.1:4001", "10.2.1.1:8084") 

The default time that the sync hosts must have been "up" for is 3600
seconds, however that can be configured using
"setMinSyncHostUptime()", e.g.:

    setMinSyncHostUptime(1800)

The replication of data between the sync host and the wforce instance
that is starting up is always performed over TCP.

See wforce.conf for full details.

Support for replication over TCP

The addSiblings() and setSiblings() functions now take an extra
(optional) parameter that specifies whether the replication should use
UDP or TCP. The default is UDP. If the protocol is specified, the port
must also be specified.

For example:

setSiblings({"127.0.1.2", "127.0.1.3:4004", "127.0.2.23:4004:tcp"})
addSibling("192.168.1.23")
    addSibling("192.168.1.23:4001:udp")
    addSibling("192.168.1.23:4003:tcp")

Customizable log facility via a command line option

The new "-f" or "--facility" command line option can be used to set
the syslog facility used for wforce logging.

For example:

wforce -f "local0"

New trackalert daemon

A new daem...

Read more