vps/util/admin

150 lines
4.9 KiB
Text
Raw Normal View History

#!/bin/bash
#
# curlcheck: https://playterm.org
# curlcheck: https://electribrary.electribers.com
# curlcheck: https://2wa.isvery.ninja
disk(){
space(){
df -h | awk '$6 ~ /^\/$/ {print $3" total used ("$5") of "$4}'
#echo '-------'
#ls /home | while read user; do du -hs /home/$user; done
}
"$@"
}
health(){
echo "URL ONLINE SSL TIME"
echo "- - - -"
awk '/^# curlcheck: / {print $3}' $0 | while read url; do
printf "%s" "$url" | sed 's|.*://||g'
curl -v -w 'Total: %{time_total}s\n' ${url} 2>&1 | \
awk '
BEGIN{
err="\033[5m\033[36;5;94m❌\033[0m"
ok="\033[1;36m♥\033[0m"
c["SSL"]=err
c["ONL"]=ok
c["TIM"]="?"
}
/SSL certificate verify ok/ {c["SSL"]=ok }
/Could not resolve host:/ {c["ONL"]=err }
/^Total: / {c["TIM"]=$2 }
END { printf "\r\t\t\t\t"c["ONL"]" "c["SSL"]" "c["TIM"]"\n" }
'
done
}
init(){
grep ulimit /etc/profile || echo 'ulimit -n 65535 || true' >> /etc/profile # compensate alpine's low fd's
}
proxy(){
install(){
echo -e "\n[forwarded ports]" > .ports
iptables -t nat -F # flush
iptables -t nat -X # flush
iptables -F # flush
ip6tables -F -t nat# flush
ip6tables -F # flush
ip6tables -X # flush
ip6tables -t nat -F
ip6tables -t nat -X
ip_external=$(curl -s https://checkip.amazonaws.com)
ipv6_external=$(ip addr | awk '/inet6.*scope global/ { print $2 }')
# proxies
proxyport(){
printf " %-5s => %-10s [%s]\n" $1 $2 $3 >> .ports
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $1 -j REDIRECT --to-ports $2
#ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport $1 -j REDIRECT --to-ports $2
#iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport $1 -j REDIRECT --to-ports $2
iptables -t nat -I OUTPUT -p tcp -d $ip_external --dport $1 -j REDIRECT --to-ports $2 # reverse ip
#ip6tables -t nat -I OUTPUT -p tcp -d $ipv6_external --dport $1 -j REDIRECT --to-ports $2 # reverse ip
ip6tables -A INPUT -p tcp --dport $1 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport $1 -j ACCEPT
#iptables -t nat -A POSTROUTING -p tcp --dport $2 -j MASQUERADE
#iptables -t nat -A POSTROUTING -p tcp --dport $2 -j MASQUERADE
}
proxyport 80 8080 nginx-proxy-manager
#proxyport 81 8181 nginx-proxy-manager
proxyport 443 4443 nginx-proxy-manager
#proxyport 993 9993 stalwart-mail
#proxyport 25 2225 stalwart-mail
#proxyport 465 4465 stalwart-mail
#proxyport 587 5587 nodered
#proxyport 25 5587 nodered
# block port 3000 (nginx-proxy-manager exposes it)
iptables -A INPUT -p tcp -d $ip_external --dport 3000 -j REJECT
ip6tables -A INPUT -p tcp -d $ip_external --dport 3000 -j REJECT --reject-with icmp6-adm-unreach-3
# block port 25
#iptables -A INPUT -p tcp -d $ip_external --dport 25 -j REJECT
#ip6tables -A INPUT -p tcp -d $ip_external --dport 25-j REJECT
# block irc 0.0.0.0:6667 port except for nodered docker
iptables -A INPUT -i lo -p tcp --dport 6667 -j ACCEPT
iptables -A INPUT -s 10.0.2.2 -p tcp --dport 6667 -j ACCEPT
iptables -A INPUT -p tcp --dport 6667 -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -s fd00::/64 -p tcp --dport 6667 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 6667 -j REJECT
# rateliming per ip
#iptables --new-chain RATE-LIMIT
#iptables --append RATE-LIMIT \
# --match hashlimit \
# --hashlimit-mode srcip \
# --hashlimit-upto 50/sec \
# --hashlimit-burst 20 \
# --hashlimit-name conn_rate_limit \
# --jump ACCEPT
#iptables --append RATE-LIMIT --jump DROP
rc-update add iptables
rc-update add ip6tables
/etc/init.d/iptables save
/etc/init.d/ip6tables save
}
clear
"$@"
{
iptables -t nat -L -n -v
iptables -L
ip6tables -L
} | more
cat .ports
}
logs(){
tail -qf /home/2wa/nginx-proxy-manager/data/log/*.log | grep -v favicon | sed 's|\] \[.*|]|g'
}
backup(){
cd /root
echo "$(date) ./admin backup [start]" >> .cron.log
BACKUP=backup-2wa.isvery.ninja.zip
crontab -l > crontab.root.txt
apk list -i > alpine.packages.txt
echo "$(su -c 'crontab -l' 2wa)" > crontab.2wa.txt
nice -n 19 /usr/bin/ionice -c2 -n7 zip -r $BACKUP \
/root/admin /root/crontab.* /root/alpine*.txt /root/.ssh \
/home/2wa/.ssh /home/2wa/.config /home/2wa/nginx-proxy-manager/{app.sh,data,*.key} \
/home/2wa/weechat-redbean \
/home/2wa/invoiceninja \
/home/2wa/mailtrain \
/home/2wa/stalwart-mail \
/home/2wa/node-red \
/home/2wa/ntfy \
/home/2wa/portsleep* \
/home/2wa/tcgi* \
/home/2wa/stats \
-x '*.log.*' -x '*.weecha*' -x 'postfix/*' | awk '{ printf( "\r"$0 ) } END{ print ""}'
ls -lah $BACKUP
rclone copy $BACKUP stack:backup/. --progress
echo "$(date) ./admin backup [stop]" >> /root/.cron.log
}
test -z $1 && { echo "Usage: "; grep '(){' $0; }
"$@"