socialmedia and adult content blocker for linux that utilizes /etc/hosts
This commit is contained in:
commit
5671aa700a
86
blocker
Executable file
86
blocker
Executable file
|
@ -0,0 +1,86 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Must run as root
|
||||||
|
if [[ $EUID -ne 0 ]]; then
|
||||||
|
echo "🚨 This script must be run as root."
|
||||||
|
echo "👉 Please run it using: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOMAINS_FILE="domains.txt"
|
||||||
|
HOSTS_FILE="/etc/hosts"
|
||||||
|
TMP_FILE=$(mktemp)
|
||||||
|
TMP_HOSTS=$(mktemp)
|
||||||
|
cp "$HOSTS_FILE" "$TMP_HOSTS" # Work on a temp copy
|
||||||
|
|
||||||
|
CURRENT_CATEGORY=""
|
||||||
|
declare -a CATEGORY_DOMAINS=()
|
||||||
|
|
||||||
|
flush_category() {
|
||||||
|
[[ -z "$CURRENT_CATEGORY" ]] && return
|
||||||
|
|
||||||
|
IPV4_COMMENT="$CURRENT_CATEGORY"
|
||||||
|
IPV6_COMMENT="${CURRENT_CATEGORY} ipv6"
|
||||||
|
|
||||||
|
# Only add if not already in file
|
||||||
|
add_block() {
|
||||||
|
local ip="$1"
|
||||||
|
local comment="$2"
|
||||||
|
if grep -Fxq "$comment" "$TMP_HOSTS"; then
|
||||||
|
# Find insertion point
|
||||||
|
END_LINE=$(awk -v cat="$comment" '
|
||||||
|
$0 == cat { found=1; next }
|
||||||
|
found && $0 ~ /^#/ { exit }
|
||||||
|
found { line=NR }
|
||||||
|
END { print (line ? line : 0) }
|
||||||
|
' "$TMP_HOSTS")
|
||||||
|
INSERT_LINE=$((END_LINE + 1))
|
||||||
|
for domain in "${CATEGORY_DOMAINS[@]}"; do
|
||||||
|
if ! grep -qE "^[[:space:]]*$ip[[:space:]]+$domain\$" "$TMP_HOSTS"; then
|
||||||
|
sed -i "${INSERT_LINE}i$ip $domain" "$TMP_HOSTS"
|
||||||
|
((INSERT_LINE++))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "$comment"
|
||||||
|
for domain in "${CATEGORY_DOMAINS[@]}"; do
|
||||||
|
if ! grep -qE "^[[:space:]]*$ip[[:space:]]+$domain\$" "$TMP_HOSTS"; then
|
||||||
|
echo "$ip $domain"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
} >> "$TMP_HOSTS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_block "127.0.0.1" "$IPV4_COMMENT"
|
||||||
|
add_block "::1" "$IPV6_COMMENT"
|
||||||
|
|
||||||
|
# Reset
|
||||||
|
CURRENT_CATEGORY=""
|
||||||
|
CATEGORY_DOMAINS=()
|
||||||
|
}
|
||||||
|
|
||||||
|
while IFS= read -r line || [ -n "$line" ]; do
|
||||||
|
line=$(echo "$line" | sed 's/^[ \t]*//;s/[ \t]*$//')
|
||||||
|
[[ -z "$line" ]] && continue
|
||||||
|
|
||||||
|
if [[ "$line" == \#* ]]; then
|
||||||
|
flush_category
|
||||||
|
CURRENT_CATEGORY="$line"
|
||||||
|
else
|
||||||
|
CATEGORY_DOMAINS+=("$line")
|
||||||
|
fi
|
||||||
|
done < "$DOMAINS_FILE"
|
||||||
|
|
||||||
|
flush_category
|
||||||
|
|
||||||
|
# Backup and replace hosts file
|
||||||
|
cp "$HOSTS_FILE" "${HOSTS_FILE}.bak"
|
||||||
|
cat "$TMP_HOSTS" > "$HOSTS_FILE"
|
||||||
|
|
||||||
|
echo "✅ Domains have been categorized and added (IPv4 & IPv6) to $HOSTS_FILE."
|
||||||
|
|
||||||
|
rm "$TMP_FILE" "$TMP_HOSTS"
|
||||||
|
|
90884
domains.txt
Normal file
90884
domains.txt
Normal file
File diff suppressed because it is too large
Load Diff
38
domains.txt.bak
Normal file
38
domains.txt.bak
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
|
||||||
|
#socialmedia
|
||||||
|
facebook.com
|
||||||
|
www.facebook.com
|
||||||
|
m.facebook.com
|
||||||
|
mobile.facebook.com
|
||||||
|
fb.com
|
||||||
|
www.fb.com
|
||||||
|
instagram.com
|
||||||
|
www.instagram.com
|
||||||
|
tiktok.com
|
||||||
|
www.tiktok.com
|
||||||
|
snapchat.com
|
||||||
|
www.snapchat.com
|
||||||
|
reddit.com
|
||||||
|
www.reddit.com
|
||||||
|
twitter.com
|
||||||
|
www.twitter.com
|
||||||
|
x.com
|
||||||
|
www.x.com
|
||||||
|
pinterest.com
|
||||||
|
www.pinterest.com
|
||||||
|
linkedin.com
|
||||||
|
www.linkedin.com
|
||||||
|
threads.net
|
||||||
|
www.threads.net
|
||||||
|
youtube.com
|
||||||
|
www.youtube.com
|
||||||
|
youtu.be
|
||||||
|
discord.com
|
||||||
|
www.discord.com
|
||||||
|
web.whatsapp.com
|
||||||
|
whatsapp.com
|
||||||
|
www.whatsapp.com
|
||||||
|
messenger.com
|
||||||
|
www.messenger.com
|
||||||
|
odysee.com
|
||||||
|
www.odysee.com
|
70
extend-domains
Executable file
70
extend-domains
Executable file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Must run as root
|
||||||
|
if [[ $EUID -ne 0 ]]; then
|
||||||
|
echo "🚨 This script must be run as root."
|
||||||
|
echo "👉 Please run it using: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Validate arguments
|
||||||
|
if [[ $# -ne 2 ]]; then
|
||||||
|
echo "Usage: $0 <FileName> <Type>"
|
||||||
|
echo "Example: $0 Hosts.txt adultsites"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
HOSTS_FILE="$1"
|
||||||
|
CATEGORY="$2"
|
||||||
|
DOMAINS_FILE="domains.txt"
|
||||||
|
TMP_DOMAINS=$(mktemp)
|
||||||
|
|
||||||
|
# Validate input file
|
||||||
|
if [[ ! -f "$HOSTS_FILE" ]]; then
|
||||||
|
echo "🚨 The file '$HOSTS_FILE' does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Backup domains.txt
|
||||||
|
cp "$DOMAINS_FILE" "${DOMAINS_FILE}.bak"
|
||||||
|
|
||||||
|
# Prepare category comment
|
||||||
|
CATEGORY_TAG="#$CATEGORY"
|
||||||
|
|
||||||
|
# Extract domains
|
||||||
|
while IFS= read -r line || [[ -n "$line" ]]; do
|
||||||
|
domain=$(echo "$line" | sed -E 's/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s+//; s/\s+//; s/^#.*//')
|
||||||
|
domain=$(echo "$domain" | sed 's/^[ \t]*//;s/[ \t]*$//') # trim
|
||||||
|
[[ "$domain" =~ ^[a-zA-Z0-9.-]+$ && "$domain" != "localhost" ]] || continue
|
||||||
|
|
||||||
|
# Avoid duplicates
|
||||||
|
if ! grep -qwF "$domain" "$DOMAINS_FILE"; then
|
||||||
|
echo "$domain" >> "$TMP_DOMAINS"
|
||||||
|
fi
|
||||||
|
done < "$HOSTS_FILE"
|
||||||
|
|
||||||
|
# Insert domains under category
|
||||||
|
if [[ -s "$TMP_DOMAINS" ]]; then
|
||||||
|
if grep -Fxq "$CATEGORY_TAG" "$DOMAINS_FILE"; then
|
||||||
|
# Find line number of category tag
|
||||||
|
LINE_NUM=$(grep -Fnx "$CATEGORY_TAG" "$DOMAINS_FILE" | cut -d: -f1)
|
||||||
|
# Split file and insert domains
|
||||||
|
head -n "$LINE_NUM" "$DOMAINS_FILE" > "${DOMAINS_FILE}.new"
|
||||||
|
cat "$TMP_DOMAINS" >> "${DOMAINS_FILE}.new"
|
||||||
|
tail -n +$((LINE_NUM + 1)) "$DOMAINS_FILE" >> "${DOMAINS_FILE}.new"
|
||||||
|
mv "${DOMAINS_FILE}.new" "$DOMAINS_FILE"
|
||||||
|
else
|
||||||
|
echo -e "\n$CATEGORY_TAG" >> "$DOMAINS_FILE"
|
||||||
|
cat "$TMP_DOMAINS" >> "$DOMAINS_FILE"
|
||||||
|
fi
|
||||||
|
echo "✅ New domains added under $CATEGORY_TAG in '$DOMAINS_FILE'."
|
||||||
|
else
|
||||||
|
echo "ℹ️ No new domains to add."
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm "$TMP_DOMAINS"
|
||||||
|
|
||||||
|
# Apply block
|
||||||
|
echo "🔒 Updating /etc/hosts..."
|
||||||
|
./blocker
|
||||||
|
|
38
socialmedia.txt
Normal file
38
socialmedia.txt
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#socialmedia
|
||||||
|
127.0.0.1 facebook.com
|
||||||
|
127.0.0.1 www.facebook.com
|
||||||
|
127.0.0.1 m.facebook.com
|
||||||
|
127.0.0.1 mobile.facebook.com
|
||||||
|
127.0.0.1 fb.com
|
||||||
|
127.0.0.1 www.fb.com
|
||||||
|
127.0.0.1 instagram.com
|
||||||
|
127.0.0.1 www.instagram.com
|
||||||
|
127.0.0.1 tiktok.com
|
||||||
|
127.0.0.1 www.tiktok.com
|
||||||
|
127.0.0.1 snapchat.com
|
||||||
|
127.0.0.1 www.snapchat.com
|
||||||
|
127.0.0.1 reddit.com
|
||||||
|
127.0.0.1 www.reddit.com
|
||||||
|
127.0.0.1 twitter.com
|
||||||
|
127.0.0.1 www.twitter.com
|
||||||
|
127.0.0.1 x.com
|
||||||
|
127.0.0.1 www.x.com
|
||||||
|
127.0.0.1 pinterest.com
|
||||||
|
127.0.0.1 www.pinterest.com
|
||||||
|
127.0.0.1 linkedin.com
|
||||||
|
127.0.0.1 www.linkedin.com
|
||||||
|
127.0.0.1 threads.net
|
||||||
|
127.0.0.1 www.threads.net
|
||||||
|
127.0.0.1 youtube.com
|
||||||
|
127.0.0.1 www.youtube.com
|
||||||
|
127.0.0.1 youtu.be
|
||||||
|
127.0.0.1 discord.com
|
||||||
|
127.0.0.1 www.discord.com
|
||||||
|
127.0.0.1 web.whatsapp.com
|
||||||
|
127.0.0.1 whatsapp.com
|
||||||
|
127.0.0.1 www.whatsapp.com
|
||||||
|
127.0.0.1 messenger.com
|
||||||
|
127.0.0.1 www.messenger.com
|
||||||
|
127.0.0.1 odysee.com
|
||||||
|
127.0.0.1 www.odysee.com
|
||||||
|
|
56
unblock
Executable file
56
unblock
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ensure the script is run with sudo/root
|
||||||
|
if [[ $EUID -ne 0 ]]; then
|
||||||
|
echo "❌ This script must be run as root."
|
||||||
|
echo "💡 Try: sudo $0 <domain> <block|unblock>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check arguments
|
||||||
|
if [[ $# -ne 2 ]]; then
|
||||||
|
echo "Usage: $0 <domain.name> <block|unblock>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOMAIN="$1"
|
||||||
|
ACTION="$2"
|
||||||
|
HOSTS_FILE="/etc/hosts"
|
||||||
|
TMP_FILE=$(mktemp)
|
||||||
|
|
||||||
|
# Validate action
|
||||||
|
if [[ "$ACTION" != "block" && "$ACTION" != "unblock" ]]; then
|
||||||
|
echo "Error: Action must be 'block' or 'unblock'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build a regex to match subdomains or exact domain entries
|
||||||
|
DOMAIN_REGEX="(127\.0\.0\.1|0\.0\.0\.0)[[:space:]]+([a-zA-Z0-9.-]+\.)?$DOMAIN"
|
||||||
|
|
||||||
|
case "$ACTION" in
|
||||||
|
block)
|
||||||
|
echo "🔒 Blocking '$DOMAIN' and subdomains..."
|
||||||
|
awk -v regex="$DOMAIN_REGEX" '
|
||||||
|
$0 ~ "^#[[:space:]]*" && $0 ~ regex { sub("^#[[:space:]]*", "", $0); print; next }
|
||||||
|
{ print }
|
||||||
|
' "$HOSTS_FILE" > "$TMP_FILE"
|
||||||
|
;;
|
||||||
|
unblock)
|
||||||
|
echo "🔓 Unblocking '$DOMAIN' and subdomains..."
|
||||||
|
awk -v regex="$DOMAIN_REGEX" '
|
||||||
|
$0 ~ regex && $0 !~ "^#[[:space:]]*" { print "#" $0; next }
|
||||||
|
{ print }
|
||||||
|
' "$HOSTS_FILE" > "$TMP_FILE"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Backup before overwrite
|
||||||
|
cp "$HOSTS_FILE" "${HOSTS_FILE}.bak"
|
||||||
|
|
||||||
|
# Apply the changes
|
||||||
|
mv "$TMP_FILE" "$HOSTS_FILE"
|
||||||
|
chmod 644 "$HOSTS_FILE"
|
||||||
|
|
||||||
|
echo "✅ '$DOMAIN' and subdomains have been successfully $ACTIONED in $HOSTS_FILE."
|
||||||
|
echo "✅ Blocked the domain $DOMAIN, Entried from /etc/hosts"
|
||||||
|
sudo cat /etc/hosts | grep $DOMAIN
|
Loading…
Reference in New Issue
Block a user