whitelist Plugin
Purpose
The whitelist plugin for libcharon checks a successfully authenticated
peer identity against an in-memory whitelist. Only identities listed are allowed
to connect wheras connection attempts with other identities get rejected using
AUTHENTICATION_FAILED.
The plugin is disabled by default and can be enabled with the
./configure option
--enable-whitelist
Implementation
Any identity successfully authenticated using any authentication method in every authentication round gets checked against a whitelist. Only whitelisted identities get accepted. The whitelist is held in-memory in a hashtable to have good lookup times. The whitelist is volatile and listed identities get lost during a daemon restart.
To manipulate the whitelist, a UNIX socket exports an interface to add/list/remove whitelisted identities. A simple command line frontend is provided to manipulate the whitelist.
Configuration
The whitelist plugin is configured using the following options in the
charon.plugins.whitelist
section of strongswan.conf:
| Key | Default | Description | 
|---|---|---|
enabled  | 
  | 
Enable whitelist checking  | 
socket  | 
Socket provided by the whitelist plugin.
   | 
This enabled option can be changed during runtime using the
whitelist enable|disable commands (see below).
Manage Whitelist
The whitelist ipsec utility usually invoked by
/usr/libexec/ipsec/whitelist ...
can be used to manipulate the whitelist while the daemon is running. It supports the following operations:
| Command | Description | 
|---|---|
  | 
Add a single identity to the whitelist  | 
  | 
Remove a single identity from the whitelist  | 
  | 
Add identities read from a newline separated file, by default stdin  | 
  | 
Remove identities read from a newline separated file, by default stdin  | 
  | 
Flush identities from the whitelist, optionally matching an identity with wildcards  | 
  | 
List whitelisted identities, optionally matching an identity with wildcards  | 
  | 
Enable whitelist checking  | 
  | 
Disable whitelist checking  | 
Socket interface
The whitelist socket interface definition can be found here:
src/libcharon/plugins/whitelist/whitelist_msg.h.
The whitelist tool demonstrating how the interface can be used:
src/libcharon/plugins/whitelist/whitelist.c