Update 2025-04-13_16:21:50
This commit is contained in:
42
bind_add_slave_zone.sh
Executable file
42
bind_add_slave_zone.sh
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
# Version 01.0
|
||||||
|
# Script to add a new slave zone to /etc/bind/named.conf.local on ns2.dynproxy.net
|
||||||
|
# Script Name: bind_add_slave_zone.sh
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
NAMED_CONF="/etc/bind/named.conf.local"
|
||||||
|
CACHE_DIR="/var/cache/bind"
|
||||||
|
|
||||||
|
# Check if a domain name argument is provided
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 <domain.tld>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOMAIN=$1
|
||||||
|
ZONE_FILE="$CACHE_DIR/db.$DOMAIN"
|
||||||
|
|
||||||
|
# Check if the zone configuration already exists
|
||||||
|
if grep -q "zone \"$DOMAIN\"" $NAMED_CONF; then
|
||||||
|
echo "Zone $DOMAIN already exists in $NAMED_CONF. Aborting!"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Append zone configuration to named.conf.local
|
||||||
|
echo "Adding slave zone configuration for $DOMAIN to $NAMED_CONF"
|
||||||
|
cat <<EOF >> $NAMED_CONF
|
||||||
|
zone "$DOMAIN" {
|
||||||
|
type slave;
|
||||||
|
file "$ZONE_FILE";
|
||||||
|
masters { 23.88.113.138; };
|
||||||
|
allow-transfer { key "ns3-key"; };
|
||||||
|
};
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Reload BIND configuration
|
||||||
|
echo "Reloading BIND configuration"
|
||||||
|
rndc reload
|
||||||
|
|
||||||
|
# Success message
|
||||||
|
echo "Slave zone for $DOMAIN has been added successfully"
|
||||||
|
|
46
calculate_bitrate.sh
Executable file
46
calculate_bitrate.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if the folder is provided as an argument
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 <folder_with_videos>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VIDEO_FOLDER="$1"
|
||||||
|
OUTPUT_FILE="bitrates.txt"
|
||||||
|
TOTAL_BITRATE=0
|
||||||
|
VIDEO_COUNT=0
|
||||||
|
|
||||||
|
# Clear or create the output file
|
||||||
|
> "$OUTPUT_FILE"
|
||||||
|
|
||||||
|
# Function to get bitrate of a video in Mbps
|
||||||
|
get_bitrate() {
|
||||||
|
local video_file="$1"
|
||||||
|
bitrate_kbps=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 "$video_file" | head -n 1)
|
||||||
|
if [[ "$bitrate_kbps" =~ ^[0-9]+$ ]]; then
|
||||||
|
bitrate_mbps=$(echo "scale=2; $bitrate_kbps / 1000 / 1000" | bc)
|
||||||
|
echo "$bitrate_mbps"
|
||||||
|
else
|
||||||
|
echo "0"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Iterate through each video file in the folder
|
||||||
|
for video_file in "$VIDEO_FOLDER"/*; do
|
||||||
|
if [ -f "$video_file" ]; then
|
||||||
|
bitrate=$(get_bitrate "$video_file")
|
||||||
|
echo "File: $video_file - Bitrate: ${bitrate} Mbps" | tee -a "$OUTPUT_FILE"
|
||||||
|
TOTAL_BITRATE=$(echo "$TOTAL_BITRATE + $bitrate" | bc)
|
||||||
|
((VIDEO_COUNT++))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Calculate the average bitrate
|
||||||
|
if [ "$VIDEO_COUNT" -gt 0 ]; then
|
||||||
|
AVERAGE_BITRATE=$(echo "scale=2; $TOTAL_BITRATE / $VIDEO_COUNT" | bc)
|
||||||
|
echo "Average Bitrate: $AVERAGE_BITRATE Mbps" | tee -a "$OUTPUT_FILE"
|
||||||
|
else
|
||||||
|
echo "No video files found in the specified folder." | tee -a "$OUTPUT_FILE"
|
||||||
|
fi
|
||||||
|
|
6
dnsbl.sh
Executable file
6
dnsbl.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cat /var/log/dnsbl-ipset/blacklist.log | cut -d ' ' -f1 | sort | uniq -c | sort -nr | mail -s "dnsbl blacklist.log 32 weekly Report `date`" srvlogz@bubuit.net
|
||||||
|
cat /var/log/dnsbl-ipset/blacklist.log | cut -d ' ' -f1 | awk -F\. '{print $1"."$2"."$3"."}' | sort | uniq -c | sort -nr | mail -s "dnsbl blacklist.log 24 weekly Report `date`" srvlogz@bubuit.net
|
||||||
|
cat /var/log/dnsbl-ipset/blacklist.log | cut -d ' ' -f1 | awk -F\. '{print $1"."$2"."}' | sort | uniq -c | sort -nr | mail -s "dnsbl blacklist.log 16 weekly Report `date`" srvlogz@bubuit.net
|
||||||
|
rm /var/log/dnsbl-ipset/blacklist.log
|
10
f2b-c_s-div.sh
Executable file
10
f2b-c_s-div.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
F2BRULES="recidive sshd"
|
||||||
|
echo $F2BRULES
|
||||||
|
|
||||||
|
for i in $F2BRULES; do
|
||||||
|
echo $i
|
||||||
|
fail2ban-client status $i
|
||||||
|
echo ""
|
||||||
|
done
|
10
f2b-c_s-drupal.sh
Executable file
10
f2b-c_s-drupal.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
F2BRULES="apache-badbots drupal-auth"
|
||||||
|
echo $F2BRULES
|
||||||
|
|
||||||
|
for i in $F2BRULES; do
|
||||||
|
echo $i
|
||||||
|
fail2ban-client status $i
|
||||||
|
echo ""
|
||||||
|
done
|
10
f2b-c_s-mail.sh
Executable file
10
f2b-c_s-mail.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
F2BRULES="dovecot dovecot-pop3impap postfix-flood-attack postfix-rbl postfix postfix-sasl"
|
||||||
|
echo $F2BRULES
|
||||||
|
|
||||||
|
for i in $F2BRULES; do
|
||||||
|
echo $i
|
||||||
|
fail2ban-client status $i
|
||||||
|
echo ""
|
||||||
|
done
|
10
f2b-c_s-proxy.sh
Executable file
10
f2b-c_s-proxy.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
F2BRULES="nginx-401 nginx-http-auth nginx-nohome nginx-noproxy nginx-noscript"
|
||||||
|
echo $F2BRULES
|
||||||
|
|
||||||
|
for i in $F2BRULES; do
|
||||||
|
echo $i
|
||||||
|
fail2ban-client status $i
|
||||||
|
echo ""
|
||||||
|
done
|
53
f2b-ip.sh
Executable file
53
f2b-ip.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
# Function to extract the list of jails
|
||||||
|
extract_jail_list() {
|
||||||
|
# Run fail2ban-client status and extract the jail list
|
||||||
|
JAIL_LIST=$(fail2ban-client status | awk -F'\t' '/Jail list/ {print $2}' | tr ',' '\n' | tr -d ' ')
|
||||||
|
|
||||||
|
# Check if jail list is empty
|
||||||
|
if [[ -z "$JAIL_LIST" ]]; then
|
||||||
|
echo "No jails found."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$JAIL_LIST"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to extract and print all banned IPs
|
||||||
|
extract_and_print_all_banned_ips() {
|
||||||
|
JAIL_LIST=$(extract_jail_list)
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ALL_BANNED_IPS=""
|
||||||
|
|
||||||
|
for JAIL in ${(f)JAIL_LIST}; do
|
||||||
|
STATUS_OUTPUT=$(fail2ban-client status $JAIL)
|
||||||
|
|
||||||
|
# Extract the banned IPs
|
||||||
|
BANNED_IP_LIST=$(echo "$STATUS_OUTPUT" | grep -oP '(?<=Banned IP list:\t).*')
|
||||||
|
if [[ -n "$BANNED_IP_LIST" ]]; then
|
||||||
|
ALL_BANNED_IPS+="$BANNED_IP_LIST "
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Print all found IPs
|
||||||
|
echo "$ALL_BANNED_IPS" | tr ' ' '\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to filter the IPs based on the provided argument
|
||||||
|
filter_ips() {
|
||||||
|
SEARCH_IP=$1
|
||||||
|
extract_and_print_all_banned_ips | grep "$SEARCH_IP"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main execution
|
||||||
|
if [[ $# -gt 0 ]]; then
|
||||||
|
filter_ips $1
|
||||||
|
else
|
||||||
|
extract_and_print_all_banned_ips
|
||||||
|
fi
|
||||||
|
|
8
f2b-jails.sh
Executable file
8
f2b-jails.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for i in dovecot dovecot-pop3impap nginx-401 nginx-http-auth nginx-nohome nginx-noproxy nginx-noscript postfix postfix-flood-attack postfix-rbl postfix-sasl recidive sshd
|
||||||
|
do
|
||||||
|
echo " "
|
||||||
|
fail2ban-client status $i
|
||||||
|
echo " "
|
||||||
|
done
|
7
f2b-status.sh
Executable file
7
f2b-status.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
list=$(fail2ban-client status | grep list | cut -d ":" -f2 | tr -d ',')
|
||||||
|
|
||||||
|
for i in $list; do
|
||||||
|
fail2ban-client status $i
|
||||||
|
done
|
36
firehol-reload-netset-blacklist.sh
Executable file
36
firehol-reload-netset-blacklist.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Define your ipset name
|
||||||
|
IPSET_NAME="blacklist"
|
||||||
|
|
||||||
|
# Path to your list of IP network ranges, one per line
|
||||||
|
IP_LIST_PATH="/etc/firehol/blacklist.netset"
|
||||||
|
|
||||||
|
# Function to check if a string is a CIDR network range specifically for /24
|
||||||
|
is_cidr_24() {
|
||||||
|
local CIDR=$1
|
||||||
|
if [[ $CIDR =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/24$ ]]; then
|
||||||
|
return 0 # True
|
||||||
|
else
|
||||||
|
return 1 # False
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clear the existing ipset
|
||||||
|
ipset flush "$IPSET_NAME"
|
||||||
|
|
||||||
|
# Repopulate the ipset
|
||||||
|
while IFS= read -r LINE; do
|
||||||
|
# Skip empty lines and lines starting with #
|
||||||
|
[[ -z "$LINE" ]] || [[ "$LINE" =~ ^# ]] && continue
|
||||||
|
|
||||||
|
if is_cidr_24 "$LINE"; then
|
||||||
|
# It's a CIDR /24 network range, add to blacklist
|
||||||
|
ipset add "$IPSET_NAME" "$LINE" 2>/dev/null
|
||||||
|
else
|
||||||
|
echo "Skipping unrecognized format: $LINE"
|
||||||
|
fi
|
||||||
|
done < "$IP_LIST_PATH"
|
||||||
|
|
||||||
|
echo "Ipset $IPSET_NAME reloaded with networks from $IP_LIST_PATH"
|
||||||
|
|
219
gitea_push.sh
Executable file
219
gitea_push.sh
Executable file
@ -0,0 +1,219 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
# Script Version: 1.5
|
||||||
|
# Description: Pushes the current folder (e.g. /etc) to a nested Gitea repo using provided nesting arguments. Auto-creates the remote repo via Gitea API if missing.
|
||||||
|
|
||||||
|
# Set variables
|
||||||
|
# ========
|
||||||
|
|
||||||
|
# Try to extract GITEA_API_TOKEN from ~/.gitea_token if not set
|
||||||
|
if [ -z "$GITEA_API_TOKEN" ] && [ -f "$HOME/.gitea_token" ]; then
|
||||||
|
GITEA_API_TOKEN=$(<"$HOME/.gitea_token")
|
||||||
|
export GITEA_API_TOKEN
|
||||||
|
fi
|
||||||
|
|
||||||
|
GITEA_USER=$(awk '{for(i=1;i<=NF;i++) if($i=="login") print $(i+1)}' ~/.netrc | head -n1)
|
||||||
|
if [ -z "$GITEA_USER" ]; then
|
||||||
|
echo "[ERROR] No login found in ~/.netrc"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
GITEA_URL="https://$(awk '{for(i=1;i<=NF;i++) if($i=="machine") print $(i+1)}' ~/.netrc | head -n1)"
|
||||||
|
if [ -z "$GITEA_URL" ]; then
|
||||||
|
echo "[ERROR] No URL found in ~/.netrc"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
GITEA_API_URL="$GITEA_URL/api/v1"
|
||||||
|
|
||||||
|
PRIVATE=false
|
||||||
|
DEBUG=false
|
||||||
|
COMMIT_MESSAGE="Update $(date +"%F_%T")"
|
||||||
|
|
||||||
|
# Logging function
|
||||||
|
# ========
|
||||||
|
log() {
|
||||||
|
local level="$1"; shift
|
||||||
|
if [[ "$level" == "DEBUG" && "$DEBUG" != true ]]; then return; fi
|
||||||
|
local color_reset="$(tput sgr0)"
|
||||||
|
local color=""
|
||||||
|
case "$level" in
|
||||||
|
INFO) color="$(tput setaf 2)" ;; # green
|
||||||
|
WARNING) color="$(tput setaf 3)" ;; # yellow
|
||||||
|
ERROR) color="$(tput setaf 1)" ;; # red
|
||||||
|
DEBUG) color="$(tput setaf 4)" ;; # blue
|
||||||
|
esac
|
||||||
|
echo "${color}[$level] $*${color_reset}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Functions
|
||||||
|
# ========
|
||||||
|
create_repo() {
|
||||||
|
log INFO "Repository does not exist. Creating via API: $REMOTE_PATH"
|
||||||
|
log DEBUG "POST $GITEA_API_URL/user/repos with name=$REMOTE_PATH and private=$PRIVATE"
|
||||||
|
RESPONSE=$(curl -s -X POST \
|
||||||
|
-H "Authorization: token $GITEA_API_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"name\": \"$FOLDER_NAME\", \"private\": $PRIVATE}" \
|
||||||
|
"$GITEA_API_URL/user/repos")
|
||||||
|
|
||||||
|
if echo "$RESPONSE" | grep -q '"clone_url"'; then
|
||||||
|
log INFO "Remote repository created successfully."
|
||||||
|
HTTP_STATUS=200
|
||||||
|
else
|
||||||
|
log ERROR "Failed to create remote repository: $RESPONSE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_commit() {
|
||||||
|
git add .
|
||||||
|
if git diff --quiet HEAD && ! git rev-parse --verify HEAD >/dev/null 2>&1; then
|
||||||
|
log INFO "Creating initial commit"
|
||||||
|
git commit -m "$COMMIT_MESSAGE"
|
||||||
|
elif ! git diff --quiet HEAD; then
|
||||||
|
log INFO "Committing changes"
|
||||||
|
git commit -m "$COMMIT_MESSAGE"
|
||||||
|
else
|
||||||
|
log INFO "Nothing to commit"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_remote() {
|
||||||
|
if git remote | grep -q '^origin$'; then
|
||||||
|
log INFO "Updating remote origin URL"
|
||||||
|
git remote set-url origin "$GIT_REMOTE"
|
||||||
|
else
|
||||||
|
log INFO "Adding remote origin"
|
||||||
|
git remote add origin "$GIT_REMOTE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
push_changes() {
|
||||||
|
log INFO "Pushing to $GIT_REMOTE"
|
||||||
|
git push -u origin main
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show help if no arguments are given
|
||||||
|
# ========
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "GITEA_API_TOKEN=<your token>"
|
||||||
|
echo "Usage: $0 [--private] [--debug] [--message \"your commit message\"] <host_group>"
|
||||||
|
echo "Example: $0 server"
|
||||||
|
echo " $0 --private workstation"
|
||||||
|
echo " $0 --debug server"
|
||||||
|
echo " $0 --message \"minor update\" server"
|
||||||
|
echo
|
||||||
|
echo "Note: You must cd into the target folder before running this script."
|
||||||
|
echo "For example:"
|
||||||
|
echo " cd /etc && $0 server"
|
||||||
|
echo
|
||||||
|
echo "Authentication:"
|
||||||
|
echo " Git operations (clone, push, pull) use ~/.netrc with your Git password:"
|
||||||
|
echo " machine \$(echo \"$GITEA_URL\" | sed 's|https\?://||') login $GITEA_USER password \"<your Git password>\""
|
||||||
|
echo " chmod 600 ~/.netrc"
|
||||||
|
echo
|
||||||
|
echo " API operations (e.g. creating repos) use a Personal Access Token stored in ~/.gitea_token"
|
||||||
|
echo " echo \"<your_token>\" > ~/.gitea_token && chmod 600 ~/.gitea_token"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
# ========
|
||||||
|
POSITIONAL_ARGS=()
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--private)
|
||||||
|
PRIVATE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--debug)
|
||||||
|
DEBUG=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--message)
|
||||||
|
COMMIT_MESSAGE="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
POSITIONAL_ARGS+=("$1")
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
set -- "${POSITIONAL_ARGS[@]}"
|
||||||
|
|
||||||
|
if [[ $# -ne 1 ]]; then
|
||||||
|
echo "Usage: $0 [--private] [--debug] [--message \"your commit message\"] <host_group>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
HOST_GROUP=$(echo "$1" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')
|
||||||
|
HOST_NAME=$(hostname -s | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')
|
||||||
|
FOLDER_NAME="${HOST_NAME}-${HOST_GROUP}-$(basename "$PWD")"
|
||||||
|
REPO_PATH="$PWD"
|
||||||
|
REMOTE_PATH="$FOLDER_NAME"
|
||||||
|
GIT_REMOTE="$GITEA_URL/$GITEA_USER/$FOLDER_NAME.git"
|
||||||
|
|
||||||
|
# Git authentication hint
|
||||||
|
log DEBUG "Ensure ~/.netrc has: machine <host> login $GITEA_USER password <your Git password>"
|
||||||
|
|
||||||
|
# Check or create remote repo
|
||||||
|
check_or_create_repo() {
|
||||||
|
if [ -z "$GITEA_API_TOKEN" ]; then
|
||||||
|
log WARNING "GITEA_API_TOKEN is not set. Skipping API repo creation."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||||
|
-H "Authorization: token $GITEA_API_TOKEN" \
|
||||||
|
"$GITEA_API_URL/repos/$GITEA_USER/$FOLDER_NAME")
|
||||||
|
|
||||||
|
if [ "$HTTP_STATUS" -ne 200 ]; then
|
||||||
|
create_repo
|
||||||
|
else
|
||||||
|
log INFO "Remote repository already exists."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
check_or_create_repo
|
||||||
|
|
||||||
|
# Main Process
|
||||||
|
# ========
|
||||||
|
|
||||||
|
# Safety check against pushing from / or $HOME
|
||||||
|
if [[ "$PWD" == "$HOME" || "$PWD" == "/" ]]; then
|
||||||
|
log ERROR "Refusing to run inside \$PWD=$PWD"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log INFO "Pushing $REPO_PATH to $GIT_REMOTE"
|
||||||
|
cd "$REPO_PATH" || { log ERROR "Directory $REPO_PATH not found"; exit 1; }
|
||||||
|
|
||||||
|
# Initialize git if needed
|
||||||
|
# Branch is fixed to 'main' for simplicity and consistency
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
log INFO "Initializing Git repo"
|
||||||
|
git init
|
||||||
|
git config init.defaultBranch main
|
||||||
|
git checkout -b main
|
||||||
|
else
|
||||||
|
log DEBUG ".git directory already present"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure at least one commit exists
|
||||||
|
prepare_commit
|
||||||
|
|
||||||
|
# Set or update remote
|
||||||
|
if [ "$HTTP_STATUS" -eq 200 ]; then
|
||||||
|
setup_remote
|
||||||
|
else
|
||||||
|
log WARNING "Skipping remote setup – repository does not exist."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Push to remote
|
||||||
|
if [ "$HTTP_STATUS" -eq 200 ]; then
|
||||||
|
push_changes
|
||||||
|
else
|
||||||
|
log WARNING "Skipping push – repository does not exist."
|
||||||
|
fi
|
||||||
|
|
9
ipinipset.sh
Executable file
9
ipinipset.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
IPSETS=$(ipset list -n| sort)
|
||||||
|
|
||||||
|
for i in $IPSETS; do
|
||||||
|
echo $i
|
||||||
|
ipset list $i | grep "^$1"
|
||||||
|
# echo ""
|
||||||
|
done
|
28
listen_change.sh
Executable file
28
listen_change.sh
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script Version: 01
|
||||||
|
# Description: Replaces 'listen 443 ssl' with 'listen 80' in Nginx configuration files under /etc/nginx/sites-enabled/
|
||||||
|
|
||||||
|
# Directory containing Nginx site configurations
|
||||||
|
CONFIG_DIR="/etc/nginx/sites-enabled"
|
||||||
|
|
||||||
|
# Iterate over each file in the configuration directory
|
||||||
|
for FILE in "$CONFIG_DIR"/*; do
|
||||||
|
# Check if the file is a regular file
|
||||||
|
if [ -f "$FILE" ]; then
|
||||||
|
# Replace 'listen 443 ssl' with 'listen 80'
|
||||||
|
sed -i 's/listen 443 ssl;/listen 80;/g' "$FILE"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Test Nginx configuration
|
||||||
|
nginx -t
|
||||||
|
|
||||||
|
# Check if the configuration test was successful
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Reload Nginx to apply changes
|
||||||
|
systemctl reload nginx
|
||||||
|
echo "Nginx reloaded successfully."
|
||||||
|
else
|
||||||
|
echo "Nginx configuration test failed. Please check the configuration files."
|
||||||
|
fi
|
||||||
|
|
59
lxc-ai-package.sh
Executable file
59
lxc-ai-package.sh
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if a package name is provided
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 <package_name>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PACKAGE_NAME="$1"
|
||||||
|
|
||||||
|
# Function to log messages with timestamp
|
||||||
|
log_message() {
|
||||||
|
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check if a container is running
|
||||||
|
is_container_running() {
|
||||||
|
local container=$1
|
||||||
|
lxc-info -n "$container" | grep -q 'RUNNING'
|
||||||
|
}
|
||||||
|
|
||||||
|
# List all running Linux containers
|
||||||
|
containers=$(lxc-ls -f G RUNNING | awk 'NR>1 {print $1}')
|
||||||
|
|
||||||
|
# Install the package inside each container
|
||||||
|
install_package_in_container() {
|
||||||
|
local container=$1
|
||||||
|
local package=$2
|
||||||
|
|
||||||
|
if is_container_running "$container"; then
|
||||||
|
log_message "Installing $package in container: $container"
|
||||||
|
|
||||||
|
lxc-attach -n "$container" -- apt update > /tmp/${container}_apt_update.log 2>&1
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
log_message "Failed to update APT in container: $container. Check /tmp/${container}_apt_update.log for details."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
lxc-attach -n "$container" -- apt install -y "$package" > /tmp/${container}_apt_install_${package}.log 2>&1
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
log_message "Failed to install $package in container: $container. Check /tmp/${container}_apt_install_${package}.log for details."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_message "Successfully installed $package in container: $container"
|
||||||
|
else
|
||||||
|
log_message "Container $container is not running. Skipping."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f log_message
|
||||||
|
export -f is_container_running
|
||||||
|
export -f install_package_in_container
|
||||||
|
|
||||||
|
# Process each container in parallel
|
||||||
|
echo "$containers" | xargs -I{} -n1 -P4 bash -c 'install_package_in_container "{}" "$PACKAGE_NAME"' _ "$PACKAGE_NAME"
|
||||||
|
|
||||||
|
log_message "All containers have been processed."
|
||||||
|
|
34
lxc-create.sh
Executable file
34
lxc-create.sh
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
LXCHOSTNAME=drupal24
|
||||||
|
|
||||||
|
lxc-stop -n drupal10
|
||||||
|
lxc-copy -n drupal10 -N $LXCHOSTNAME
|
||||||
|
|
||||||
|
# Funktion zur Generierung einer einzigartigen MAC-Adresse
|
||||||
|
generate_unique_hwaddr() {
|
||||||
|
local hwaddr
|
||||||
|
local existing_hwaddrs
|
||||||
|
while : ; do
|
||||||
|
hwaddr=$(printf '00:16:3e:%02x:%02x:%02x\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))
|
||||||
|
existing_hwaddrs=$(grep "lxc.net.0.hwaddr" /var/lib/lxc/*/config | grep "$hwaddr")
|
||||||
|
if [ -z "$existing_hwaddrs" ]; then
|
||||||
|
# MAC-Adresse ist einzigartig
|
||||||
|
echo "$hwaddr"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generiere eine einzigartige MAC-Adresse
|
||||||
|
NEW_HWADDR=$(generate_unique_hwaddr)
|
||||||
|
|
||||||
|
# Pfad zur LXC-Konfigurationsdatei
|
||||||
|
CONFIG_FILE="/var/lib/lxc/$LXCHOSTNAME/config"
|
||||||
|
|
||||||
|
# Ersetze die existierende hwaddr Zeile
|
||||||
|
sed -i "/^lxc.net.0.hwaddr/c\lxc.net.0.hwaddr = $NEW_HWADDR" "$CONFIG_FILE"
|
||||||
|
|
||||||
|
#echo "MAC-Adresse in $CONFIG_FILE auf $NEW_HWADDR aktualisiert."
|
||||||
|
|
||||||
|
lxc-start -n drupal10
|
23
lxc-hwaddr.sh
Executable file
23
lxc-hwaddr.sh
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Funktion zur Generierung einer einzigartigen MAC-Adresse
|
||||||
|
generate_unique_hwaddr() {
|
||||||
|
local hwaddr
|
||||||
|
local existing_hwaddrs
|
||||||
|
while : ; do
|
||||||
|
hwaddr=$(printf '00:16:3e:%02x:%02x:%02x\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))
|
||||||
|
existing_hwaddrs=$(grep "lxc.net.0.hwaddr" /var/lib/lxc/*/config | grep "$hwaddr")
|
||||||
|
if [ -z "$existing_hwaddrs" ]; then
|
||||||
|
# MAC-Adresse ist einzigartig
|
||||||
|
echo "$hwaddr"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generiere eine einzigartige MAC-Adresse
|
||||||
|
NEW_HWADDR=$(generate_unique_hwaddr)
|
||||||
|
|
||||||
|
grep "lxc.net.0.hwaddr" /var/lib/lxc/*/config | awk '{print $3}'
|
||||||
|
echo "$NEW_HWADDR new hwaddr"
|
||||||
|
|
65
lxc_create.sh
Executable file
65
lxc_create.sh
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
read -e -p "LXCHOSTNAME: " LXCHOSTNAME
|
||||||
|
export LXCHOSTNAME
|
||||||
|
|
||||||
|
# Stop the template container
|
||||||
|
lxc-stop -n template
|
||||||
|
|
||||||
|
# Copy the template to create a new container with the given hostname
|
||||||
|
lxc-copy -n template -N "$LXCHOSTNAME"
|
||||||
|
|
||||||
|
# Function to generate a unique MAC address
|
||||||
|
generate_unique_hwaddr() {
|
||||||
|
local hwaddr
|
||||||
|
local existing_hwaddrs
|
||||||
|
while : ; do
|
||||||
|
hwaddr=$(printf '00:16:3e:%02x:%02x:%02x\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))
|
||||||
|
existing_hwaddrs=$(grep "lxc.net.0.hwaddr" /var/lib/lxc/*/config | grep "$hwaddr")
|
||||||
|
if [ -z "$existing_hwaddrs" ]; then
|
||||||
|
# MAC address is unique
|
||||||
|
echo "$hwaddr"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate a unique MAC address
|
||||||
|
NEW_HWADDR=$(generate_unique_hwaddr)
|
||||||
|
|
||||||
|
# Path to the LXC configuration file
|
||||||
|
CONFIG_FILE="/var/lib/lxc/$LXCHOSTNAME/config"
|
||||||
|
|
||||||
|
# Replace the existing hwaddr line
|
||||||
|
sed -i "/^lxc.net.0.hwaddr/c\lxc.net.0.hwaddr = $NEW_HWADDR" "$CONFIG_FILE"
|
||||||
|
|
||||||
|
echo "MAC address in $CONFIG_FILE updated to $NEW_HWADDR."
|
||||||
|
|
||||||
|
# Start the new container
|
||||||
|
lxc-start -n "$LXCHOSTNAME"
|
||||||
|
|
||||||
|
# Wait for the container to start
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Change the hostname inside the container
|
||||||
|
lxc-attach -n "$LXCHOSTNAME" -- bash -c "echo '$LXCHOSTNAME' > /etc/hostname"
|
||||||
|
lxc-attach -n "$LXCHOSTNAME" -- hostname "$LXCHOSTNAME"
|
||||||
|
|
||||||
|
# Update /etc/hosts
|
||||||
|
lxc-attach -n "$LXCHOSTNAME" -- bash -c "echo '127.0.0.1 $LXCHOSTNAME' >> /etc/hosts"
|
||||||
|
|
||||||
|
# Ensure the container has internet access (optional, check and adjust if needed)
|
||||||
|
lxc-attach -n "$LXCHOSTNAME" -- ping -c 4 google.com
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Stop and restart the container
|
||||||
|
lxc-stop -n "$LXCHOSTNAME"
|
||||||
|
lxc-start -n "$LXCHOSTNAME"
|
||||||
|
|
||||||
|
# Display the MAC addresses to verify the changes
|
||||||
|
grep lxc.net.0.hwaddr /var/lib/lxc/*/config
|
||||||
|
|
||||||
|
# Wait and list containers to ensure they are running
|
||||||
|
sleep 9
|
||||||
|
lxc-ls -f
|
||||||
|
|
83
lxc_list_login.sh
Executable file
83
lxc_list_login.sh
Executable file
@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# =============================================================================
|
||||||
|
# Script Name: lxc_list_login.sh
|
||||||
|
# Version: 1.2
|
||||||
|
# Description: Lists LXC containers, checks their statuses, and allows login.
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# Required commands
|
||||||
|
REQUIRED_CMDS=("lxc-ls" "lxc-info" "lxc-start" "lxc-attach")
|
||||||
|
|
||||||
|
# Check if required commands are available
|
||||||
|
for CMD in "${REQUIRED_CMDS[@]}"; do
|
||||||
|
if ! command -v "$CMD" &> /dev/null; then
|
||||||
|
echo "The command $CMD is not installed. Please install it and try again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# List and check LXC containers
|
||||||
|
echo "List of all LXC containers:"
|
||||||
|
CONTAINERS=($(lxc-ls -f | awk 'NR>1 && $1 != "" {print $1}'))
|
||||||
|
|
||||||
|
# Check if there are any containers
|
||||||
|
if [[ ${#CONTAINERS[@]} -eq 0 ]]; then
|
||||||
|
echo "There are no LXC containers."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display containers and their status
|
||||||
|
printf "\n%-5s %-20s %-10s\n" "Index" "Container Name" "Status"
|
||||||
|
echo "------------------------------------------"
|
||||||
|
for (( I=0; I<${#CONTAINERS[@]}; I++ )); do
|
||||||
|
LXCHOSTNAME="${CONTAINERS[$I]}"
|
||||||
|
if [[ -n "$LXCHOSTNAME" ]]; then
|
||||||
|
STATUS=$(lxc-info --name="$LXCHOSTNAME" | grep "State" | awk '{print $2}')
|
||||||
|
printf "%-5d %-20s %-10s\n" "$I" "$LXCHOSTNAME" "$STATUS"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prompt user to select a container
|
||||||
|
read -p "Select a container to log in (0-$(( ${#CONTAINERS[@]} - 1 ))): " SELECTION
|
||||||
|
|
||||||
|
# Validate selection
|
||||||
|
if [[ $SELECTION =~ ^[0-9]+$ ]] && [[ $SELECTION -ge 0 && $SELECTION -lt ${#CONTAINERS[@]} ]]; then
|
||||||
|
LXCHOSTNAME="${CONTAINERS[$SELECTION]}"
|
||||||
|
STATUS=$(lxc-info --name="$LXCHOSTNAME" | grep "State" | awk '{print $2}')
|
||||||
|
|
||||||
|
if [[ $STATUS == "STOPPED" ]]; then
|
||||||
|
read -p "Container $LXCHOSTNAME is stopped. Do you want to start it? (y/n) " START_SELECTION
|
||||||
|
if [[ $START_SELECTION == "y" ]]; then
|
||||||
|
echo "Starting the container $LXCHOSTNAME..."
|
||||||
|
if lxc-start --name="$LXCHOSTNAME"; then
|
||||||
|
echo "Container $LXCHOSTNAME has been started."
|
||||||
|
for i in {1..10}; do
|
||||||
|
STATUS=$(lxc-info --name="$LXCHOSTNAME" | grep "State" | awk '{print $2}')
|
||||||
|
if [[ $STATUS == "RUNNING" ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
if [[ $STATUS != "RUNNING" ]]; then
|
||||||
|
echo "Container $LXCHOSTNAME failed to start within the timeout period."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Error starting the container $LXCHOSTNAME."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Container $LXCHOSTNAME was not started."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "Logging into the container $LXCHOSTNAME..."
|
||||||
|
if ! lxc-attach --name="$LXCHOSTNAME"; then
|
||||||
|
echo "Error logging into the container $LXCHOSTNAME."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Invalid selection. Please run the script again and choose a valid number."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
69
lxc_list_sed.sh
Executable file
69
lxc_list_sed.sh
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# =============================================================================
|
||||||
|
# Script Name: lxc_list_sed.sh
|
||||||
|
# Version: 1.10
|
||||||
|
# Description: This script lists all LXC containers, checks their statuses, and
|
||||||
|
# updates the SENDMAILTO field in /etc/logcheck/logcheck.conf for
|
||||||
|
# running containers. It includes error handling and logging.
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# 01 Required commands
|
||||||
|
REQUIRED_CMDS=("lxc-ls" "lxc-info" "lxc-attach" "lxc-start")
|
||||||
|
|
||||||
|
# 02 Check if required commands are available
|
||||||
|
for CMD in "${REQUIRED_CMDS[@]}"; do
|
||||||
|
if ! command -v $CMD &> /dev/null; then
|
||||||
|
echo "Command $CMD is not installed. Please install it and try again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 03 Function to check if a container is running
|
||||||
|
is_container_running() {
|
||||||
|
local CONTAINER=$1
|
||||||
|
if lxc-info -n "$CONTAINER" | grep -q 'RUNNING'; then
|
||||||
|
echo "$CONTAINER is running."
|
||||||
|
return 0 # Container is running
|
||||||
|
else
|
||||||
|
echo "$CONTAINER is not running or does not exist."
|
||||||
|
return 1 # Container is not running
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 04 List all running Linux containers
|
||||||
|
list_running_containers() {
|
||||||
|
local CONTAINERS=($(lxc-ls -f | awk '$2 == "RUNNING" {print $1}'))
|
||||||
|
echo ${CONTAINERS[@]}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 05 Update SENDMAILTO in /etc/logcheck/logcheck.conf for running LXC containers
|
||||||
|
update_sendmailto() {
|
||||||
|
local NEW_EMAIL="logcheck+srvlogz@bubuit.net"
|
||||||
|
local RUNNING_CONTAINERS=($@) # Get the list of running containers as arguments
|
||||||
|
|
||||||
|
for CONTAINER in "${RUNNING_CONTAINERS[@]}"; do
|
||||||
|
echo "Attempting to update SENDMAILTO in $CONTAINER"
|
||||||
|
if lxc-attach -n "$CONTAINER" -- bash -c "[ -f /etc/logcheck/logcheck.conf ]"; then
|
||||||
|
if lxc-attach -n "$CONTAINER" -- bash -c "sed -i 's/^SENDMAILTO.*/SENDMAILTO=\"$NEW_EMAIL\"/' /etc/logcheck/logcheck.conf"; then
|
||||||
|
echo "Successfully updated SENDMAILTO in $CONTAINER"
|
||||||
|
else
|
||||||
|
echo "Failed to update SENDMAILTO in $CONTAINER"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "/etc/logcheck/logcheck.conf does not exist in $CONTAINER"
|
||||||
|
fi
|
||||||
|
sleep 1 # Introduce a sleep to avoid running too fast
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 06 Main script execution
|
||||||
|
RUNNING_CONTAINERS=$(list_running_containers)
|
||||||
|
echo -e "\nRunning Containers: ${RUNNING_CONTAINERS[@]}"
|
||||||
|
echo -ne "\n"
|
||||||
|
|
||||||
|
if [ -n "$RUNNING_CONTAINERS" ]; then
|
||||||
|
update_sendmailto ${RUNNING_CONTAINERS[@]}
|
||||||
|
else
|
||||||
|
echo "No running containers found."
|
||||||
|
fi
|
||||||
|
|
53
lxc_snapshot_create.sh
Executable file
53
lxc_snapshot_create.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# v01
|
||||||
|
|
||||||
|
# List and check LXC containers
|
||||||
|
echo "Listing all LXC containers..."
|
||||||
|
CONTAINERS=($(lxc-ls -1))
|
||||||
|
|
||||||
|
# Check if there are any containers
|
||||||
|
if [[ ${#CONTAINERS[@]} -eq 0 ]]; then
|
||||||
|
echo "There are no LXC containers."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Found ${#CONTAINERS[@]} container(s): ${CONTAINERS[@]}"
|
||||||
|
echo "----------------------------------"
|
||||||
|
|
||||||
|
# Loop over each container
|
||||||
|
for LXCHOSTNAME in "${CONTAINERS[@]}"; do
|
||||||
|
echo "Processing container: $LXCHOSTNAME"
|
||||||
|
|
||||||
|
# Stop the container
|
||||||
|
echo "Stopping container $LXCHOSTNAME..."
|
||||||
|
if ! lxc-stop -n "$LXCHOSTNAME"; then
|
||||||
|
echo "Failed to stop container $LXCHOSTNAME"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a snapshot (using default directory)
|
||||||
|
echo "Creating snapshot for $LXCHOSTNAME..."
|
||||||
|
if ! lxc-snapshot -n "$LXCHOSTNAME"; then
|
||||||
|
echo "Failed to create snapshot for $LXCHOSTNAME"
|
||||||
|
# Optionally, start the container back up if snapshot fails
|
||||||
|
lxc-start -n "$LXCHOSTNAME"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start the container
|
||||||
|
echo "Starting container $LXCHOSTNAME..."
|
||||||
|
if ! lxc-start -n "$LXCHOSTNAME"; then
|
||||||
|
echo "Failed to start container $LXCHOSTNAME"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List snapshots for the container
|
||||||
|
echo "Listing snapshots for $LXCHOSTNAME..."
|
||||||
|
lxc-snapshot -n "$LXCHOSTNAME" -L
|
||||||
|
echo "----------------------------------"
|
||||||
|
|
||||||
|
echo "Finished processing $LXCHOSTNAME"
|
||||||
|
echo "=================================="
|
||||||
|
done
|
||||||
|
|
||||||
|
lxc-ls -f
|
65
remove_nonexistent_rules.sh
Executable file
65
remove_nonexistent_rules.sh
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
# Script Version: 01
|
||||||
|
# Description: Removes non-existent rules from SpamAssassin local.cf configuration file.
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
# ========
|
||||||
|
CONFIG_FILE="/etc/mail/spamassassin/local.cf"
|
||||||
|
BACKUP_FILE="/etc/mail/spamassassin/local.cf.bak"
|
||||||
|
TEMP_FILE=$(mktemp /tmp/local.cf.temp.XXXXXX)
|
||||||
|
|
||||||
|
# Backup original config
|
||||||
|
# ========
|
||||||
|
if ! cp "$CONFIG_FILE" "$BACKUP_FILE"; then
|
||||||
|
echo "Error: Backup of $CONFIG_FILE to $BACKUP_FILE failed. Aborting." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Backup of local.cf saved to $BACKUP_FILE"
|
||||||
|
|
||||||
|
# Extract non-existent rules from SpamAssassin lint output
|
||||||
|
# ========
|
||||||
|
RULES=$(spamassassin --lint -D 2>&1 | grep 'warning: score set for non-existent rule' | awk '{print $NF}' | sort | uniq)
|
||||||
|
|
||||||
|
if [ -z "$RULES" ]; then
|
||||||
|
echo "No non-existent rules found in the lint output."
|
||||||
|
rm -f "$TEMP_FILE" # Clean up the temporary file
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Non-existent rules to be removed:"
|
||||||
|
echo "$RULES"
|
||||||
|
|
||||||
|
# Remove non-existent rules from the config file
|
||||||
|
# ========
|
||||||
|
cp "$CONFIG_FILE" "$TEMP_FILE"
|
||||||
|
|
||||||
|
while read -r RULE; do
|
||||||
|
sed -i "/^score\s\+$RULE\b/d" "$TEMP_FILE"
|
||||||
|
done <<< "$RULES"
|
||||||
|
|
||||||
|
# Overwrite the original config
|
||||||
|
# ========
|
||||||
|
if mv "$TEMP_FILE" "$CONFIG_FILE"; then
|
||||||
|
echo "Non-existent rules removed from $CONFIG_FILE"
|
||||||
|
else
|
||||||
|
echo "Error: Failed to update $CONFIG_FILE. Aborting." >&2
|
||||||
|
rm -f "$TEMP_FILE" # Clean up in case of failure
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Restart SpamAssassin to apply changes
|
||||||
|
# ========
|
||||||
|
echo "Restarting SpamAssassin..."
|
||||||
|
if systemctl restart spamassassin; then
|
||||||
|
echo "SpamAssassin restarted successfully."
|
||||||
|
if ! systemctl is-active --quiet spamassassin; then
|
||||||
|
echo "Error: SpamAssassin is not active after restart." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Error: Failed to restart SpamAssassin." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
29
ssl_certificate_delete.sh
Executable file
29
ssl_certificate_delete.sh
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script Version: 01
|
||||||
|
# Description: Removes ssl_certificate and ssl_certificate_key directives from Nginx configuration files in /etc/nginx/sites-enabled/
|
||||||
|
|
||||||
|
# Directory containing Nginx site configurations
|
||||||
|
CONFIG_DIR="/etc/nginx/sites-enabled"
|
||||||
|
|
||||||
|
# Iterate over each file in the configuration directory
|
||||||
|
for FILE in "$CONFIG_DIR"/*; do
|
||||||
|
# Check if the file is a regular file
|
||||||
|
if [ -f "$FILE" ]; then
|
||||||
|
# Remove lines containing ssl_certificate or ssl_certificate_key
|
||||||
|
sed -i '/^\s*ssl_certificate\s\+/d' "$FILE"
|
||||||
|
sed -i '/^\s*ssl_certificate_key\s\+/d' "$FILE"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Test Nginx configuration
|
||||||
|
nginx -t
|
||||||
|
|
||||||
|
# Check if the configuration test was successful
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Reload Nginx to apply changes
|
||||||
|
systemctl reload nginx
|
||||||
|
echo "Nginx reloaded successfully."
|
||||||
|
else
|
||||||
|
echo "Nginx configuration test failed. Please check the configuration files."
|
||||||
|
fi
|
||||||
|
|
11
updateContainer.sh
Executable file
11
updateContainer.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# List all running Linux containers
|
||||||
|
containers=$(lxc-ls -f G RUNNING | awk '{print $1}')
|
||||||
|
|
||||||
|
# Upgrade the package manager (APT) inside each container
|
||||||
|
for container in $containers; do
|
||||||
|
echo $container
|
||||||
|
lxc-attach -n $container -- apt update
|
||||||
|
lxc-attach -n $container -- apt upgrade -y
|
||||||
|
done
|
Reference in New Issue
Block a user