diff --git a/config/action.d/pf.conf b/config/action.d/pf.conf index effd080c..5710eb8e 100644 --- a/config/action.d/pf.conf +++ b/config/action.d/pf.conf @@ -16,7 +16,7 @@ # we don't enable PF automatically; to enable run pfctl -e # or add `pf_enable="YES"` to /etc/rc.conf (tested on FreeBSD) actionstart = echo "table <-> persist counters" | pfctl -f- - echo "block proto from <-> to any port " | pfctl -f- + echo "block proto from <-> to any" | pfctl -f- # Option: actionstop @@ -71,9 +71,19 @@ tablename = f2b # protocol = tcp -# Option: port -# Notes.: the port to block, defaults to any -# Values: [ STRING ] -# -port = any +# Option: port +# Notes.: specifies port to monitor +# Values: [ NUM | STRING ] Default: +# +port = telnet + +# Option: actiontype +# Notes.: defines additions to the blocking rule +# Values: leave empty to block all attempts from the host +actiontype = + +# Option: multiport +# Notes.: addition to block access only to specific ports +# Usage.: use in jail config: "banaction = pf[actiontype=]" +multiport = port diff --git a/fail2ban/tests/servertestcase.py b/fail2ban/tests/servertestcase.py index 1809933c..ac9927bb 100644 --- a/fail2ban/tests/servertestcase.py +++ b/fail2ban/tests/servertestcase.py @@ -1372,12 +1372,12 @@ class ServerConfigReaderTests(LogCaptureTestCase): r"`echo -2001:db8:: > /proc/net/xt_recent/f2b-j-w-iptables-xtre6`", ), }), - # pf -- + # pf allports -- ('j-w-pf', 'pf[name=%(__name__)s]', { 'ip4': (), 'ip6': (), 'start': ( '`echo "table persist counters" | pfctl -f-`', - '`echo "block proto tcp from to any port any" | pfctl -f-`', + '`echo "block proto tcp from to any" | pfctl -f-`', ), 'stop': ( '`pfctl -sr 2>/dev/null | grep -v f2b-j-w-pf | pfctl -f-`', @@ -1391,6 +1391,25 @@ class ServerConfigReaderTests(LogCaptureTestCase): 'ip6-ban': ("`pfctl -t f2b-j-w-pf -T add 2001:db8::`",), 'ip6-unban': ("`pfctl -t f2b-j-w-pf -T delete 2001:db8::`",), }), + # pf multiport -- + ('j-w-pf-mp', 'pf[actiontype=][name=%(__name__)s, port=http]', { + 'ip4': (), 'ip6': (), + 'start': ( + '`echo "table persist counters" | pfctl -f-`', + '`echo "block proto tcp from to any port http" | pfctl -f-`', + ), + 'stop': ( + '`pfctl -sr 2>/dev/null | grep -v f2b-j-w-pf-mp | pfctl -f-`', + '`pfctl -t f2b-j-w-pf-mp -T flush`', + '`pfctl -t f2b-j-w-pf-mp -T kill`', + ), + 'ip4-check': ("`pfctl -sr | grep -q f2b-j-w-pf-mp`",), + 'ip6-check': ("`pfctl -sr | grep -q f2b-j-w-pf-mp`",), + 'ip4-ban': ("`pfctl -t f2b-j-w-pf-mp -T add 192.0.2.1`",), + 'ip4-unban': ("`pfctl -t f2b-j-w-pf-mp -T delete 192.0.2.1`",), + 'ip6-ban': ("`pfctl -t f2b-j-w-pf-mp -T add 2001:db8::`",), + 'ip6-unban': ("`pfctl -t f2b-j-w-pf-mp -T delete 2001:db8::`",), + }), # firewallcmd-multiport -- ('j-w-fwcmd-mp', 'firewallcmd-multiport[name=%(__name__)s, bantime="600", port="http,https", protocol="tcp", chain="INPUT"]', { 'ip4': (' ipv4 ', 'icmp-port-unreachable'), 'ip6': (' ipv6 ', 'icmp6-port-unreachable'),