summaryrefslogtreecommitdiff
path: root/opt/sshguard/MAKEPKG
diff options
context:
space:
mode:
Diffstat (limited to 'opt/sshguard/MAKEPKG')
-rw-r--r--opt/sshguard/MAKEPKG111
1 files changed, 111 insertions, 0 deletions
diff --git a/opt/sshguard/MAKEPKG b/opt/sshguard/MAKEPKG
new file mode 100644
index 0000000..0c0f3f8
--- /dev/null
+++ b/opt/sshguard/MAKEPKG
@@ -0,0 +1,111 @@
+#!/bin/mkpkg
+# description: Protect hosts from brute-force attacks by aggregating logs
+# url: https://www.sshguard.net
+
+name=sshguard
+version=2.5.1
+release=6
+depends=(nftables)
+services=(sshguard)
+permissions=(
+ /var/db/sshguard:root:root:700
+ /etc/sshguard.conf:root:root:644
+ /etc/sshguard:root:root:755
+ /etc/sshguard/whitelist:root:root:644
+)
+source=(https://downloads.sourceforge.net/project/$name/$name/$version/$name-$version.tar.gz)
+
+sha256sums=(
+ "997a1e0ec2b2165b4757c42f8948162eb534183946af52efc406885d97cb89fc"
+)
+
+build() {
+ cd $name-$version
+
+ ./configure \
+ --prefix=/usr \
+ --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/$name \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man
+
+ make
+ make DESTDIR=$PKG install
+
+ # configure has no backend switch; keep nft-sets and null only
+ for fw in firewalld hosts ipfilter ipfw ipset iptables pf; do
+ rm -f $PKG/usr/lib/$name/sshg-fw-$fw
+ done
+}
+
+post_build() {
+ install -d $PKG/etc/sshguard
+ install -d -m 700 $PKG/var/db/sshguard
+
+ # Addresses here are never blocked. Add the admin's LAN, static IP and
+ # VPN subnet, or a few failed logins can lock the admin out.
+ printf '%s\n' \
+ '# one address or CIDR block per line' \
+ '127.0.0.0/8' \
+ '::1/128' \
+ > $PKG/etc/sshguard/whitelist
+
+ printf '%s\n' \
+ '# rawnix sshguard.conf' \
+ 'BACKEND="/usr/lib/sshguard/sshg-fw-nft-sets"' \
+ '# sshd logs via svlogd -tt; sshg-parser does not understand that prefix.' \
+ '# Strip it with a shell read loop: every line is written immediately.' \
+ '# (awk here buffered all output despite fflush(), so nothing reached' \
+ '# the parser and nothing was ever banned.)' \
+ 'LOGREADER="LANG=C tail -F -n 0 /var/log/sshd/current | while read -r _ts line; do printf '"'"'%s\n'"'"' \"\$line\"; done"' \
+ 'THRESHOLD=30' \
+ 'BLOCK_TIME=120' \
+ 'DETECTION_TIME=1800' \
+ 'BLACKLIST_FILE=200:/var/db/sshguard/blacklist.db' \
+ 'WHITELIST_FILE=/etc/sshguard/whitelist' \
+ 'SSHGUARD_USER=nobody' \
+ > $PKG/etc/sshguard.conf
+
+ # runit service
+ install -d $PKG/etc/sv/sshguard/log
+
+ # The sshguard wrapper ends with trap "kill 0" EXIT, which signals its
+ # whole process group. Run it in its own group (chpst -P) so that a stop
+ # or restart cannot take runsv and the log svlogd down with it.
+ printf '%s\n' \
+ '#!/bin/sh' \
+ 'exec 2>&1' \
+ 'exec chpst -P sshguard' \
+ > $PKG/etc/sv/sshguard/run
+
+ # On restart the old backend deletes its tables from its own exit trap.
+ # Wait for it, so the next fw_init does not race that cleanup
+ # ("Could not initialize firewall").
+ printf '%s\n' \
+ '#!/bin/sh' \
+ 'i=0' \
+ 'while pgrep -f /usr/lib/sshguard/sshg-fw-nft-sets >/dev/null && [ $i -lt 20 ]; do' \
+ ' sleep 0.25; i=$((i+1))' \
+ 'done' \
+ 'nft delete table ip sshguard 2>/dev/null' \
+ 'nft delete table ip6 sshguard 2>/dev/null' \
+ 'exit 0' \
+ > $PKG/etc/sv/sshguard/finish
+
+ printf '%s\n' \
+ '#!/bin/sh' \
+ 'mkdir -p /var/log/sshguard' \
+ 'exec svlogd -tt /var/log/sshguard' \
+ > $PKG/etc/sv/sshguard/log/run
+
+ chmod 755 $PKG/etc/sv/sshguard/run
+ chmod 755 $PKG/etc/sv/sshguard/finish
+ chmod 755 $PKG/etc/sv/sshguard/log/run
+}
+
+signify() {
+ untrusted comment: public key
+ RWTZ9IduCSQ/mL8337TEUinPwT92xFEUpD92hkS7IxcOnzTt9QdpohT3
+}
+
+# vim: filetype=sh