alias bigfile='cd /; find . -type f -size +3M'
Show current jail bans in fail2ban
alias fail='/usr/bin/fail2ban-client banned | tr "]" "\n" | tr ":" "\n" | column'
Shortcut for terminal history
alias h='history'
Quick check on apache2 log
alias htlog='tail -f -n 50 /var/log/apache2/access.log | ccze -A'
Show who is connecting to mailserver
alias mailfrom='grep connect /var/log/syslog | awk "{print $6}"'
Quick check on syslog
alias mess='tail -f -n 50 /var/log/syslog | ccze -A'
Quick check on email log
alias mmess='tail -f -n 50 /var/log/mail.log | ccze -A'
Display spam stats
alias spam='/usr/bin/rspamc stat; tail /var/log/rspamd/rspamd.log | ccze -A'
Update the system
alias update='apt-get update; apt-get upgrade'
$IPT -A INPUT -s 69.5.169.0/24 -j DROP #394 20260427
$IPT -A INPUT -s 85.217.149.0/24 -j DROP #273 20260427
$IPT -A INPUT -s 31.14.254.0/24 -j DROP #121 20260427
$IPT -A INPUT -s 36.255.97.0/24 -j DROP #120 20260427
$IPT -A INPUT -s 64.62.197.0/24 -j DROP #109 20260427
$IPT -A INPUT -s 5.226.140.0/24 -j DROP #104 20260427
$IPT -A INPUT -s 199.45.154.0/24 -j DROP #101 20260427
$IPT -A INPUT -s 185.242.226.0/24 -j DROP #94 20260427
$IPT -A INPUT -s 45.205.1.0/24 -j DROP #90 20260427
$IPT -A INPUT -s 43.228.157.0/24 -j DROP #86 20260427
$IPT -A INPUT -s 79.124.56.0/24 -j DROP #81 20260427
$IPT -A INPUT -s 81.19.216.0/24 -j DROP #80 20260427
$IPT -A INPUT -s 91.230.168.0/24 -j DROP #78 20260427
$IPT -A INPUT -s 45.87.249.0/24 -j DROP #77 20260427
$IPT -A INPUT -s 185.223.235.0/24 -j DROP #76 20260427
$IPT -A INPUT -s 87.121.84.0/24 -j DROP #72 20260427
$IPT -A INPUT -s 89.21.67.0/24 -j DROP #72 20260427
$IPT -A INPUT -s 195.184.76.0/24 -j DROP #71 20260427
$IPT -A INPUT -s 91.191.209.0/24 -j DROP #71 20260427
$IPT -A INPUT -s 91.231.89.0/24 -j DROP #69 20260427
/usr/bin/grep "Firewall:" /var/log/syslog | awk '{for(i=1;i<=NF;i++) if($i ~ /^SRC=/){split($i,a,"="); split(a[2],ip,"."); print ip[1]"."ip[2]"."ip[3]".0/24"}}' | sort | uniq -c | awk -v IPT="$IPT" -v DATE="$(date +%Y%m%d)" '{print "$IPT -A INPUT -s " $2 " -j DROP #" $1 " " DATE}' | sort -t'#' -k2,2nr | head -20 2>/dev/null
Simple backup script dumps major directories into a gzip temp file for download; requires local web server. It does expose sensitive files for a short period and there are probably better ways to handle the password for SQL dump or the logic. There are also better ways to backup depending on your server setup. ↓
View
# Variables - get the date
YEAR=$(date +%Y);
MONTH=$(date +%m);
DAY=$(date +%d);
# Create a salt to randomize the backup file name
SALT=$(cat /dev/urandom | tr -dc 'a-z0-9' | head -c 6);
# Use bold in bash
BOLD=$(tput bold)
NORMAL=$(tput sgr0)
# Initial instructions
echo "Today's date is ${BOLD}"$YEAR$MONTH$DAY, "${NORMAL}this script will ${BOLD}delete the following files${NORMAL} and create new ones:";
ls -la /var/backups/tmp/*$YEAR*
read -r -p "Press Y to contiunue? [y/N]" response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]
then
# Cleanup of the old backups
rm -rf /var/backups/tmp/*$YEAR*
# Backup selected directories to /var/backups
echo "${BOLD}Backing up etc${NORMAL}";
tar -c --totals /etc | pv -s $(du -sb /etc | awk '{print $1}') | gzip -9 > /var/backups/tmp/etc.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up home${NORMAL}";
tar -c --totals /home | pv -s $(du -sb /home | awk '{print $1}') | gzip -9 > /var/backups/tmp/home.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up root${NORMAL}";
tar -c --totals /root | pv -s $(du -sb /root | awk '{print $1}')0 | gzip -9 > /var/backups/tmp/root.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up var-lib${NORMAL}";
tar -c --totals /var/lib | pv -s $(du -sb /var/lib | awk '{print $1}') | gzip -9 > /var/backups/tmp/var-lib.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up var-local${NORMAL}";
tar -c --totals /var/local | pv -s $(du -sb /var/local | awk '{print $1}') | gzip -9 > /var/backups/tmp/var-local.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up var-log${NORMAL}";
tar -c --totals /var/log | pv -s $(du -sb /var/log | awk '{print $1}') | gzip -9 > /var/backups/tmp/var-log.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up var-www${NORMAL}";
tar -c --totals /var/www | pv -s $(du -sb /var/www | awk '{print $1}') | gzip -9 > /var/backups/tmp/var-www.$YEAR$MONTH$DAY.tgz
echo "${BOLD}Backing up sql${NORMAL}";
mysqldump -u root --password='YOURPASSWORD' --all-databases > /var/backups/tmp/mysql.$YEAR$MONTH$DAY.sql
tar -c --totals /var/backups/tmp/mysql.$YEAR$MONTH$DAY.sql | gzip -1 > /var/backups/tmp/mysql.$YEAR$MONTH$DAY.tgz
rm /var/backups/tmp/mysql.$YEAR$MONTH$DAY.sql
#Create a downloadable backup file then delete it
echo "${BOLD}Packaging it all up:${NORMAL}";
tar -c --totals /var/backups/tmp/*$YEAR$MONTH$DAY* | pv -s $(du -sb /var/backups/tmp/ | awk '{print $1}') | gzip -9 > /var/www/html/tmp/backup.$YEAR$MONTH$DAY.$SALT.tgz
read -n 1 -s -r -p "Go get the backup file at [ ${BOLD}https://YOURWEBSITE/tmp/backup.$YEAR$MONTH$DAY.$SALT.tgz${NORMAL} ] then select any key to delete it from the server..."
rm /var/www/html/tmp/backup.$YEAR$MONTH$DAY.$SALT.tgz
echo "${BOLD}File removed!${NORMAL}";
echo "${BOLD}Contents of html/tmp:${NORMAL}";
ls -la /var/www/html/tmp/
echo "${BOLD}Contents of /var/backups/tmp:${NORMAL}";
ls -la /var/backups/tmp/
echo "${BOLD}Your monthly backup is now complete.${NORMAL}";
else
echo "Process cancelled!";
Nice table of fail2ban jails ↓
View
JAIL Curr Failed Tot Failed Curr Banned Tot Banned
------------------------------------------------------------------------------
apache-auth 0 0 0 0
apache-badbots 0 0 0 0
apache-botsearch 0 0 3 3
apache-fakegooglebot 0 0 0 0
apache-modsecurity 0 0 0 0
apache-nohome 0 0 0 0
apache-noscript 0 96 30 34
apache-overflows 0 0 0 0
apache-shellshock 0 0 0 0
courier-auth 0 0 0 0
cyrus-imap 0 0 0 0
dovecot 39 705 62 66
pam-generic 39 703 43 45
php-url-fopen 0 0 1 1
postfix 6 7 3 3
postfix-rbl 0 0 0 0
postfix-sasl 39 693 17 17
sendmail-auth 0 0 0 0
sendmail-reject 0 0 0 0
sieve 0 0 0 0
sshd 6 21 151 161
xinetd-fail 0 0 0 0
#!/bin/perl
# Prints a nice table of fail2ban jail stats
open(J, "fail2ban-client status |") || die;
while (
Sample rc.firewall ↓
View
#!/bin/bash
# IPTABLES Firewall
# --------------------------------------------------
# Kernel hardening
# --------------------------------------------------
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# --------------------------------------------------
# Binary
# --------------------------------------------------
IPT="/usr/sbin/iptables"
# Trusted admin IPs
HOME="" #add your IP or rdns
WORK="" #add your IP or rdns
# --------------------------------------------------
# Flush old rules
# --------------------------------------------------
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F
# --------------------------------------------------
# Default policies
# --------------------------------------------------
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# --------------------------------------------------
# Custom chains
# --------------------------------------------------
$IPT -N LOGDROP
$IPT -A LOGDROP -m limit --limit 5/min --limit-burst 10 \
-j LOG --log-prefix "Firewall: " --log-level 6
$IPT -A LOGDROP -j DROP
# --------------------------------------------------
# Base accepts / sanity
# --------------------------------------------------
# Allow loopback with only localhost source
$IPT -I INPUT 1 -i lo -s 127.0.0.1/8 -d 127.0.0.1/8 -j ACCEPT
$IPT -I OUTPUT 1 -o lo -s 127.0.0.1/8 -d 127.0.0.1/8 -j ACCEPT
#$IPT -A OUTPUT -o lo ! -s 127.0.0.1/32 -j DROP #This may be blocking mail outbound
# Allow venet0 traffic only from assigned public IP
#$IPT -A OUTPUT -o venet0 -m addrtype ! --src-type LOCAL -j DROP #This may be blocking mail outbound
$IPT -I OUTPUT 1 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -I OUTPUT 1 -o venet0 -s 107.161.30.34 -j ACCEPT #change to your host IP
$IPT -A OUTPUT -o venet0 -s 107.161.30.34/32 -j ACCEPT #change to your host IP
$IPT -A OUTPUT -o venet0 ! -s 107.161.30.34/32 -j LOG #change to your host IP
# Drop invalid
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
# Allow established traffic
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Drop suspicious NEW tcp packets not SYN
$IPT -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
# Drop fragments
$IPT -A INPUT -f -j DROP
# --------------------------------------------------
# Persistent hostile networks (optional)
# --------------------------------------------------
$IPT -A INPUT -s 45.142.193.0/24 -j DROP #2630 20260424
$IPT -A INPUT -s 79.124.62.0/24 -j DROP #1430 20260424
$IPT -A INPUT -s 167.94.146.0/24 -j DROP #822 20260424
# --------------------------------------------------
# Quiet garbage drops
# --------------------------------------------------
# DHCP
$IPT -A INPUT -p udp --dport 67:68 -j DROP
# RPC
$IPT -A INPUT -p tcp --dport 111 -j DROP
# NetBIOS / SMB
$IPT -A INPUT -p tcp --dport 445 -j DROP
$IPT -A INPUT -p tcp --dport 135:139 -j DROP
$IPT -A INPUT -p udp --dport 135:139 -j DROP
# --------------------------------------------------
# ICMP
# --------------------------------------------------
$IPT -A INPUT -p icmp -m limit --limit 5/sec -j ACCEPT
# --------------------------------------------------
# SSH protection
# --------------------------------------------------
# Drop brute force attempts
$IPT -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m recent --update --seconds 60 --hitcount 6 --name SSH -j DROP
# Track new attempts
$IPT -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m recent --set --name SSH
# Allow SSH
$IPT -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
# --------------------------------------------------
# Public Web
# --------------------------------------------------
$IPT -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
# --------------------------------------------------
# Mail server
# --------------------------------------------------
$IPT -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW -j ACCEPT
$IPT -A INPUT -p tcp --dport 465 -m conntrack --ctstate NEW -j ACCEPT
$IPT -A INPUT -p tcp --dport 587 -m conntrack --ctstate NEW -j ACCEPT
$IPT -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW -j ACCEPT
# --------------------------------------------------
# Restricted admin services
# --------------------------------------------------
# sample
$IPT -A INPUT -p tcp -s $HOME --dport 1234 -m conntrack --ctstate NEW -j ACCEPT
$IPT -A INPUT -p tcp -s $WORK --dport 1234 -m conntrack --ctstate NEW -j ACCEPT
# --------------------------------------------------
# Final log/drop
# --------------------------------------------------
$IPT -A INPUT -j LOGDROP
# reload fail2ban iptables jails
/usr/bin/systemctl restart fail2ban