mirror of https://github.com/postgres/postgres
parent
d53c1255d9
commit
fe7a32fc87
@ -0,0 +1,14 @@ |
||||
# contrib/auth_delay/Makefile
|
||||
|
||||
MODULES = auth_delay
|
||||
|
||||
ifdef USE_PGXS |
||||
PG_CONFIG = pg_config
|
||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||
include $(PGXS) |
||||
else |
||||
subdir = contrib/auth_delay
|
||||
top_builddir = ../..
|
||||
include $(top_builddir)/src/Makefile.global |
||||
include $(top_srcdir)/contrib/contrib-global.mk |
||||
endif |
@ -0,0 +1,70 @@ |
||||
/* -------------------------------------------------------------------------
|
||||
* |
||||
* auth_delay.c |
||||
* |
||||
* Copyright (C) 2010, PostgreSQL Global Development Group |
||||
* |
||||
* IDENTIFICATION |
||||
* contrib/auth_delay/auth_delay.c |
||||
* |
||||
* ------------------------------------------------------------------------- |
||||
*/ |
||||
#include "postgres.h" |
||||
|
||||
#include "libpq/auth.h" |
||||
#include "port.h" |
||||
#include "utils/guc.h" |
||||
#include "utils/timestamp.h" |
||||
|
||||
PG_MODULE_MAGIC; |
||||
|
||||
void _PG_init(void); |
||||
|
||||
/* GUC Variables */ |
||||
static int auth_delay_milliseconds; |
||||
|
||||
/* Original Hook */ |
||||
static ClientAuthentication_hook_type original_client_auth_hook = NULL; |
||||
|
||||
/*
|
||||
* Check authentication |
||||
*/ |
||||
static void |
||||
auth_delay_checks(Port *port, int status) |
||||
{ |
||||
/*
|
||||
* Any other plugins which use ClientAuthentication_hook. |
||||
*/ |
||||
if (original_client_auth_hook) |
||||
original_client_auth_hook(port, status); |
||||
|
||||
/*
|
||||
* Inject a short delay if authentication failed. |
||||
*/ |
||||
if (status != STATUS_OK) |
||||
{ |
||||
pg_usleep(1000L * auth_delay_milliseconds); |
||||
} |
||||
} |
||||
|
||||
/*
|
||||
* Module Load Callback |
||||
*/ |
||||
void |
||||
_PG_init(void) |
||||
{ |
||||
/* Define custome GUC variables */ |
||||
DefineCustomIntVariable("auth_delay.milliseconds", |
||||
"Milliseconds to delay before reporting authentication failure", |
||||
NULL, |
||||
&auth_delay_milliseconds, |
||||
0, |
||||
0, INT_MAX, |
||||
PGC_SIGHUP, |
||||
GUC_UNIT_MS, |
||||
NULL, |
||||
NULL); |
||||
/* Install Hooks */ |
||||
original_client_auth_hook = ClientAuthentication_hook; |
||||
ClientAuthentication_hook = auth_delay_checks; |
||||
} |
@ -0,0 +1,67 @@ |
||||
<!-- doc/src/sgml/auth-delay.sgml --> |
||||
|
||||
<sect1 id="auth-delay"> |
||||
<title>auth_delay</title> |
||||
|
||||
<indexterm zone="auth-delay"> |
||||
<primary>auth_delay</primary> |
||||
</indexterm> |
||||
|
||||
<para> |
||||
<filename>auth_delay</filename> causes the server to pause briefly before |
||||
reporting authentication failure, to make brute-force attacks on database |
||||
passwords more difficult. Note that it does nothing to prevent |
||||
denial-of-service attacks, and may even exacerbate them, since processes |
||||
that are waiting before reporting authentication failure will still consume |
||||
connection slots. |
||||
</para> |
||||
|
||||
<para> |
||||
In order to function, this module must be loaded via |
||||
<xref linkend="guc-shared-preload-libraries"> in <filename>postgresql.conf</>. |
||||
</para> |
||||
|
||||
<sect2> |
||||
<title>Configuration parameters</title> |
||||
|
||||
<variablelist> |
||||
<varlistentry> |
||||
<term> |
||||
<varname>auth_delay.milliseconds</varname> (<type>int</type>) |
||||
</term> |
||||
<indexterm> |
||||
<primary><varname>auth_delay.milliseconds</> configuration parameter</primary> |
||||
</indexterm> |
||||
<listitem> |
||||
<para> |
||||
The number of milliseconds to wait before reporting an authentication |
||||
failure. The default is 0. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
</variablelist> |
||||
|
||||
<para> |
||||
In order to set these parameters in your <filename>postgresql.conf</> file, |
||||
you will need to add <literal>auth_delay</> to |
||||
<xref linkend="guc-custom-variable-classes">. Typical usage might be: |
||||
</para> |
||||
|
||||
<programlisting> |
||||
# postgresql.conf |
||||
shared_preload_libraries = 'auth_delay' |
||||
|
||||
custom_variable_classes = 'auth_delay' |
||||
auth_delay.milliseconds = '500' |
||||
</programlisting> |
||||
</sect2> |
||||
|
||||
<sect2> |
||||
<title>Author</title> |
||||
|
||||
<para> |
||||
KaiGai Kohei <email>kaigai@ak.jp.nec.com</email> |
||||
</para> |
||||
</sect2> |
||||
|
||||
</sect1> |
Loading…
Reference in new issue