From b3bd877d23e578e12791c6db4ca9fd82108d75c3 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 30 Apr 2013 07:48:01 +1000 Subject: [PATCH 01/46] BF: change common.conf to handle formats of syslog -v and syslog -vv in BSD --- config/filter.d/common.conf | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/config/filter.d/common.conf b/config/filter.d/common.conf index 18bf41c5..a5fe1176 100644 --- a/config/filter.d/common.conf +++ b/config/filter.d/common.conf @@ -41,7 +41,10 @@ __hostname = \S+ # # Common line prefixes (beginnings) which could be used in filters # -# [hostname] [vserver tag] daemon_id spaces -# this can be optional (for instance if we match named native log files) -__prefix_line = \s*(?:%(__hostname)s )?(?:%(__kernel_prefix)s )?(?:@vserver_\S+ )?%(__daemon_combs_re)s?\s* - +# [bsdverbose]? [hostname] [vserver tag] daemon_id spaces +# +# bsdverbose is where syslogd is started with -v or -vv and results in <4.3> or +# appearing before the host as per testcases/files/logs/bsd/*. +# +# This can be optional (for instance if we match named native log files) +__prefix_line = \s*(<[^.]+.[^.]+>)?\s*(?:%(__hostname)s )?(?:%(__kernel_prefix)s )?(?:@vserver_\S+ )?%(__daemon_combs_re)s?\s* From cde710803367b8529cde6093232ca1151d20ddd7 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 29 Apr 2013 13:47:33 +1000 Subject: [PATCH 02/46] DOC: bsd syslog files thanks to Nick Hilliard --- testcases/files/logs/bsd/syslog-plain.txt | 3 +++ testcases/files/logs/bsd/syslog-v.txt | 10 ++++++++++ testcases/files/logs/bsd/syslog-vv.txt | 5 +++++ 3 files changed, 18 insertions(+) create mode 100644 testcases/files/logs/bsd/syslog-plain.txt create mode 100644 testcases/files/logs/bsd/syslog-v.txt create mode 100644 testcases/files/logs/bsd/syslog-vv.txt diff --git a/testcases/files/logs/bsd/syslog-plain.txt b/testcases/files/logs/bsd/syslog-plain.txt new file mode 100644 index 00000000..7dcecb2e --- /dev/null +++ b/testcases/files/logs/bsd/syslog-plain.txt @@ -0,0 +1,3 @@ +Apr 2 17:52:55 pancake sshd[55657]: Invalid user oracle from 192.0.2.100 +Apr 2 17:53:01 pancake sshd[55657]: error: PAM: authentication error for illegal user oracle from test.example.com +Apr 2 17:53:01 pancake sshd[55657]: Failed keyboard-interactive/pam for invalid user oracle from 192.0.2.100 port 48856 ssh2 diff --git a/testcases/files/logs/bsd/syslog-v.txt b/testcases/files/logs/bsd/syslog-v.txt new file mode 100644 index 00000000..319582ba --- /dev/null +++ b/testcases/files/logs/bsd/syslog-v.txt @@ -0,0 +1,10 @@ +Apr 2 17:51:27 <4.3> pancake sshd[55624]: error: PAM: authentication error for nick from test.example.com +Apr 2 17:51:32 <4.6> pancake sshd[55628]: Invalid user r00t from 192.0.2.100 +Apr 2 17:51:33 <4.3> pancake sshd[55628]: error: PAM: authentication error for illegal user r00t from test.example.com +Apr 2 17:51:33 <4.6> pancake sshd[55628]: Failed keyboard-interactive/pam for invalid user r00t from 192.0.2.100 port 46050 ssh2 +Apr 2 17:51:34 <4.3> pancake sshd[55628]: error: PAM: authentication error for illegal user r00t from test.example.com +Apr 2 17:51:34 <4.6> pancake sshd[55628]: Failed keyboard-interactive/pam for invalid user r00t from 192.0.2.100 port 46050 ssh2 +Apr 2 17:51:36 <4.3> pancake sshd[55628]: error: PAM: authentication error for illegal user r00t from test.example.com +Apr 2 17:51:36 <4.6> pancake sshd[55628]: Failed keyboard-interactive/pam for invalid user r00t from 192.0.2.100 port 46050 ssh2 +Apr 2 17:52:06 <4.6> pancake sshd[55647]: Invalid user oracle from 192.0.2.100 +Apr 2 17:52:07 <4.3> pancake sshd[55647]: error: PAM: authentication error for illegal user oracle from test.example.com diff --git a/testcases/files/logs/bsd/syslog-vv.txt b/testcases/files/logs/bsd/syslog-vv.txt new file mode 100644 index 00000000..74143226 --- /dev/null +++ b/testcases/files/logs/bsd/syslog-vv.txt @@ -0,0 +1,5 @@ +Mar 19 23:48:18 pancake sshd[55517]: Invalid user r00t from 183.60.159.20 +Mar 19 23:48:20 pancake sshd[55519]: Invalid user r00t from 183.60.159.20 +Mar 19 23:50:03 pancake sshd[55604]: Invalid user http from 183.60.159.20 +Mar 19 23:50:05 pancake sshd[55606]: Invalid user kylix from 183.60.159.20 +Mar 19 23:50:08 pancake sshd[55608]: Invalid user nagios from 183.60.159.20 From ebfab512bc7618365ea8eaf64f4039ea709c6f5b Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 May 2013 16:15:26 +1000 Subject: [PATCH 03/46] DOC: credits for bsd log --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index c80e3b3c..24a88587 100644 --- a/ChangeLog +++ b/ChangeLog @@ -50,6 +50,8 @@ Borreli, blotus: gh-70. Thanks to iGeorgeX for the idea. blotus * [96eb8986] ' and " should also be escaped in action tags Closes gh-109 + Christoph Theis, Nick Hilliard, Daniel Black + * [b3bd877d,cde71080] Make syslog -v and syslog -vv formats work on FreeBSD - New features: Yaroslav Halchenko * [9ba27353] Add support for jail.d/{confilefile} and fail2ban.d/{configfile} From b6d0e8ad9c7b688e8bc4dd375bdc897293a21320 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 May 2013 16:31:45 +1000 Subject: [PATCH 04/46] ENH: add ipfw rule for bsd using the tables. --- config/action.d/bsd-ipfw.conf | 82 +++++++++++++++++++++++++++++++++++ config/jail.conf | 13 ++++++ 2 files changed, 95 insertions(+) create mode 100644 config/action.d/bsd-ipfw.conf diff --git a/config/action.d/bsd-ipfw.conf b/config/action.d/bsd-ipfw.conf new file mode 100644 index 00000000..33f176e4 --- /dev/null +++ b/config/action.d/bsd-ipfw.conf @@ -0,0 +1,82 @@ +# Fail2Ban configuration file +# +# Author: Nick Munger +# Modified by: Ken Menzel +# Daniel Black (start/stop) +# Fabian Wenk (many ideas as per fail2ban users list) +# +# Ensure firewall_enable="YES" in the top of /etc/rc.conf +# + +[Definition] + +# Option: actionstart +# Notes.: command executed once at the start of Fail2Ban. +# Values: CMD +# +actionstart = ipfw show | fgrep -q 'table()' || ( ipfw show | awk 'BEGIN { b = 1 } { if ($1 <= b) { b = $1 + 1 } else { e = b } } END { if (e) exit e
else exit b }'; num=$?; ipfw -q add $num deny from table\(
\) to me ; echo $num > "" ) + + +# Option: actionstop +# Notes.: command executed once at the end of Fail2Ban +# Values: CMD +# +actionstop = [ -f ] && ( read num < ""
ipfw -q delete $num
rm "" ) + + +# Option: actioncheck +# Notes.: command executed once before each actionban command +# Values: CMD +# +actioncheck = + + +# Option: actionban +# Notes.: command executed when banning an IP. Take care that the +# command is executed with Fail2Ban user rights. +# Tags: See jail.conf(5) man page +# Values: CMD +# +# requires an ipfw rule like "deny ip from table(1) to me" +actionban = ipfw table
add + + +# Option: actionunban +# Notes.: command executed when unbanning an IP. Take care that the +# command is executed with Fail2Ban user rights. +# Tags: See jail.conf(5) man page +# Values: CMD +# +actionunban = ipfw table
delete + +[Init] +# Option: table +# Notes: The ipfw table to use. If a ipfw rule using this table already exists, +# this action will not create a ipfw rule to block it and the following +# options will have no effect. +# Values: NUM +table = 1 + +# Option: port +# Notes.: Specifies port to monitor. Blank indicate block all ports. +# Values: [ NUM | STRING ] +# +port = + +# Option: startstatefile +# Notes: A file to indicate that the table rule that was added. Ensure it is unique per table. +# Values: STRING +startstatefile = /var/run/fail2ban/ipfw-started-table_
+ +# Option: action +# Notes: This is the action to take for automaticly created rules. See the +# ACTION defination at the top of man ipfw for allowed values. +# "deny" and "unreach port" are probably the useful. +# Values: STRING +action = deny + +# Option: block +# Notes: This is how much to block. +# Can be "ip", "tcp", "udp" or various other options. +# Values: STRING +block = ip diff --git a/config/jail.conf b/config/jail.conf index 8b82d1d7..17c4dfe9 100644 --- a/config/jail.conf +++ b/config/jail.conf @@ -139,6 +139,19 @@ action = iptables-ipset-proto6[name=SSH, port=ssh, protocol=tcp, bantime=600] logpath = /var/log/sshd.log maxretry = 5 +# bsd-ipfw is ipfw used by BSD. It uses ipfw tables. +# table number must be unique. +# +# This will create a deny rule for that table ONLY if a rule +# for the table doesn't ready exist. +# +[ssh-bsd-ipfw] +enabled = false +filter = sshd +action = bsd-ipfw[port=ssh,table=1] +logpath = /var/log/auth.log +maxretry = 5 + # This jail demonstrates the use of wildcards in "logpath". # Moreover, it is possible to give other files on a new line. From f402609f19fcbf2467adbe9d64766fa9107aad30 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 May 2013 16:32:11 +1000 Subject: [PATCH 05/46] DOC: credits for bsd-ipfw --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index c80e3b3c..35c706cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -69,6 +69,9 @@ Borreli, blotus: * [5f2d383] Add roundcube auth filter. Closes Debian bug #699442. Daniel Black * [be06b1b] Add action for iptables-ipsets. Closes gh-102. + Nick Munger, Ken Menzel, Daniel Black, Christoph Theis & Fabian Wenk + * [b6d0e8a] Add and enhance the bsd-ipfw action from + FreeBSD ports. Soulard Morgan * [f336d9f] Add filter for webmin. Closes gh-99. - Enhancements: From 0c5a9c53e1542784b7c1ab2d41463aa464f54104 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 16 Apr 2013 21:11:06 +1000 Subject: [PATCH 06/46] ENH: pf action thanks to Nick Hilliard . --- config/action.d/pf.conf | 62 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 config/action.d/pf.conf diff --git a/config/action.d/pf.conf b/config/action.d/pf.conf new file mode 100644 index 00000000..d82cbb12 --- /dev/null +++ b/config/action.d/pf.conf @@ -0,0 +1,62 @@ +# Fail2Ban configuration file +# +# OpenBSD pf ban/unban +# +# Author: Nick Hilliard +# +# + +[Definition] + +# Option: actionstart +# Notes.: command executed once at the start of Fail2Ban. +# Values: CMD +# +# we don't enable PF automatically, as it will be enabled elsewhere +actionstart = + + +# Option: actionstop +# Notes.: command executed once at the end of Fail2Ban +# Values: CMD +# +# we don't disable PF automatically either +actionstop = + + +# Option: actioncheck +# Notes.: command executed once before each actionban command +# Values: CMD +# +actioncheck = + + +# Option: actionban +# Notes.: command executed when banning an IP. Take care that the +# command is executed with Fail2Ban user rights. +# Tags: IP address +# number of failures +#