500 lines
19 KiB
Bash
Executable File
500 lines
19 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
################################################################################################################
|
|
# NAMA SCRIPT : TRUSTPOSITIF-RPZ-DNS-ZONE-UPDATER.SH
|
|
# FUNGSI : MEMPERBARUI ZONA DNS DENGAN DATA TRUSTPOSITIF, WHITELIST, DAN SAFESEARCH
|
|
# DESKRIPSI : SCRIPT INI MENGUNDUH DATA DARI BERBAGAI SUMBER DAN MENGONVERSINYA KE FORMAT RPZ UNTUK BIND.
|
|
# DITAMBAHKAN FUNGSI UNTUK MENGHAPUS DOMAIN WHITELIST & DOH DARI BLACKLIST
|
|
# AUTHOR : HARRY DERTIN SUTISNA (ORIGINAL)
|
|
# MODIFIED BY : CLAUDE ASSISTANT (PENAMBAHAN FUNGSI WHITELIST CLEANER)
|
|
# WAKTU & TANGGAL : JAKARTA, 02 JANUARY 2025 (ORIGINAL)
|
|
# MODIFIED: 12 JANUARY 2026
|
|
################################################################################################################
|
|
|
|
# Warna ANSI
|
|
MERAH="\033[1;31m"
|
|
HIJAU="\033[1;32m"
|
|
KUNING="\033[1;33m"
|
|
CYAN="\033[1;36m"
|
|
MAGENTA="\033[1;35m"
|
|
BIRU="\033[1;34m"
|
|
PUTIH="\033[1;37m"
|
|
HITAM="\033[1;30m"
|
|
ABUABU="\033[1;90m"
|
|
MERAH_TUA="\033[1;91m"
|
|
HIJAU_TUA="\033[1;92m"
|
|
KUNING_TUA="\033[1;93m"
|
|
CYAN_TUA="\033[1;96m"
|
|
MAGENTA_TUA="\033[1;95m"
|
|
BIRU_TUA="\033[1;94m"
|
|
PUTIH_TUA="\033[1;97m"
|
|
RESET="\033[0m"
|
|
|
|
# Variabel URL
|
|
# URL_TRUSTPOSITIF="https://raw.githubusercontent.com/alsyundawy/TrustPositif/refs/heads/main/alsyundawy_blacklist_complete_v2.txt"
|
|
URL_TRUSTPOSITIF="https://gitea.ismayadjati.id/syamsulhadiae/trustpositif/raw/branch/main/blacklist_cleaned_v2.txt"
|
|
# URL_TRUSTPOSITIF="https://trustpositif.komdigi.go.id/assets/db/domains_isp"
|
|
URL_WHITELIST="https://raw.githubusercontent.com/alsyundawy/hds-pihole-blacklist/main/dnssehat/whitelist.txt"
|
|
URL_SAFESEARCH="https://www.google.com/supported_domains"
|
|
|
|
# URL Whitelist tambahan untuk dibersihkan dari blacklist (DoH/DoT domains)
|
|
# URL_DOH_WHITELIST="https://raw.githubusercontent.com/hagezi/dns-blocklists/main/domains/doh-only-domains.txt"
|
|
URL_DOH_WHITELIST="https://raw.githubusercontent.com/alsyundawy/TrustPositif/refs/heads/main/doh-onlydomains.txt"
|
|
|
|
# File output zona
|
|
FILE_TRUSTPOSITIF="/etc/bind/zones/trustpositif.zones"
|
|
FILE_WHITELIST="/etc/bind/zones/whitelist.zones"
|
|
FILE_SAFESEARCH="/etc/bind/zones/safesearch.zones"
|
|
|
|
# CNAME targets
|
|
CNAME_TRUSTPOSITIF="lamanlabuh.resolver.id."
|
|
CNAME_SAFESEARCH="forcesafesearch.google.com."
|
|
|
|
# Temporary files
|
|
TMP_DIR="/tmp/rpz_updater_$$"
|
|
TMP_TRUSTPOSITIF="$TMP_DIR/trustpositif_domains.txt"
|
|
TMP_TRUSTPOSITIF_CLEAN="$TMP_DIR/trustpositif_cleaned.txt"
|
|
TMP_WHITELIST="$TMP_DIR/whitelist_domains.txt"
|
|
TMP_SAFESEARCH="$TMP_DIR/safesearch_domains.txt"
|
|
TMP_DOH_WHITELIST="$TMP_DIR/doh_whitelist.txt"
|
|
TMP_COMBINED_WHITELIST="$TMP_DIR/combined_whitelist.txt"
|
|
|
|
# Konfigurasi
|
|
ENABLE_DOH_WHITELIST=true # Set false untuk menonaktifkan pembersihan DoH
|
|
ENABLE_CUSTOM_WHITELIST=true # Set false untuk menonaktifkan whitelist kustom
|
|
CUSTOM_WHITELIST_FILE="" # Path ke file whitelist kustom lokal (opsional)
|
|
|
|
# Fungsi untuk menampilkan pesan berwarna
|
|
function cetak_pesan() {
|
|
echo -e "$1$2${RESET}"
|
|
}
|
|
|
|
# Fungsi cleanup saat exit
|
|
cleanup() {
|
|
if [[ -d "$TMP_DIR" ]]; then
|
|
rm -rf "$TMP_DIR"
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# Buat direktori temporary
|
|
mkdir -p "$TMP_DIR"
|
|
|
|
cetak_pesan "$CYAN" "PEMBAHARUAN DATABASE INTERNET SEHAT TRUSTPOSITIF DIPROSES"
|
|
|
|
# Banner dengan warna
|
|
echo -e "${MAGENTA}
|
|
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
|
/ \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
|
|
( H | A | R | R | Y ) ( D | S ) ( A | L | S | Y | U | N | D | A | W | Y )
|
|
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
|
|
${RESET}"
|
|
|
|
echo -e "${CYAN}############################################################################${RESET}"
|
|
echo -e "${CYAN}## ##${RESET}"
|
|
echo -e "${CYAN}##${MERAH} PEMBAHARUAN DATABASE INTERNET SEHAT TRUSTPOSITIF ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}##${KUNING} SUPPORT JUGA GOOGLE SAFESEARCH & WHITELIST ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}##${MAGENTA} UNTUK DNS FILTER ISP ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}##${HIJAU_TUA} + WHITELIST CLEANER (DOH/DOT DOMAINS REMOVAL) ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}## ##${RESET}"
|
|
echo -e "${CYAN}##${HIJAU} SCRIPT INI DIBUAT & DIMODIFIKASI OLEH HARRY DS ALSYUNDAWY ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}##${BIRU} ALSYUNDAWY@GMAIL.COM | 08568515212 | ALSYUNDAWY.COM ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}##${KUNING} PADA TANGGAL 02 JANUARY 2025 ${CYAN}##${RESET}"
|
|
echo -e "${CYAN}## ##${RESET}"
|
|
echo -e "${CYAN}############################################################################${RESET}"
|
|
|
|
# Fungsi untuk membuat header RPZ
|
|
generate_rpz_header() {
|
|
cat << EOF
|
|
;
|
|
; RPZ File Generated by TRUSTPOSITIF-RPZ-DNS-ZONE-UPDATER.SH
|
|
; Dibuat pada $(date '+%Y-%m-%d %H:%M:%S')
|
|
; Author: HARRY DERTIN SUTISNA ALSYUNDAWY
|
|
; Email: alsyundawy@gmail.com
|
|
; WhatsApp/Telegram/Call: +628568515212 & +6281298986464 (WHATSAPP/TELEGRAM/CALL)
|
|
; HOMEPAGE: https://github.com/alsyundawy
|
|
;
|
|
;
|
|
\$TTL 300
|
|
@ IN SOA dns.domain.net.id. hostmaster.domain.net.id. (
|
|
$(date '+%Y%m%d%H') ; Serial
|
|
10800 ; Refresh
|
|
120 ; Retry
|
|
604800 ; Expire
|
|
3600 ) ; Minimum TTL
|
|
@ IN NS lamanlabuh.resolver.id.
|
|
EOF
|
|
}
|
|
|
|
#===============================================================================
|
|
# FUNGSI WHITELIST CLEANER - Menghapus domain whitelist dari blacklist
|
|
# Dioptimasi untuk file besar dengan penggunaan memory dan CPU yang efisien
|
|
#===============================================================================
|
|
|
|
# Fungsi untuk membersihkan dan normalisasi file domain
|
|
clean_domain_file() {
|
|
local input_file="$1"
|
|
local output_file="$2"
|
|
local file_type="$3"
|
|
|
|
cetak_pesan "$ABUABU" " ├─ Membersihkan $file_type..."
|
|
|
|
# Handle berbagai format:
|
|
# - Hapus baris komentar (dimulai dengan #, !, //)
|
|
# - Hapus baris kosong
|
|
# - Lowercase semua domain
|
|
# - Trim whitespace
|
|
# - Hapus karakter CR (Windows line endings)
|
|
# - Sort dan unique
|
|
sed 's/\r$//' "$input_file" | \
|
|
awk '
|
|
{
|
|
# Trim leading/trailing whitespace
|
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "")
|
|
|
|
# Skip empty lines
|
|
if (length($0) == 0) next
|
|
|
|
# Skip comment lines
|
|
if (/^[#!]/ || /^\/\//) next
|
|
|
|
# Convert to lowercase and print
|
|
print tolower($0)
|
|
}
|
|
' | LC_ALL=C sort -u > "$output_file"
|
|
|
|
local count=$(wc -l < "$output_file")
|
|
cetak_pesan "$ABUABU" " │ └─ $file_type: $count domain unik"
|
|
}
|
|
|
|
# Fungsi untuk mengunduh whitelist DoH/DoT
|
|
download_doh_whitelist() {
|
|
if [[ "$ENABLE_DOH_WHITELIST" != "true" ]]; then
|
|
cetak_pesan "$KUNING" " ├─ [SKIP] DoH whitelist dinonaktifkan"
|
|
return 0
|
|
fi
|
|
|
|
cetak_pesan "$HIJAU" " ├─ Mengunduh DoH/DoT whitelist..."
|
|
|
|
if curl -k -s --connect-timeout 30 --max-time 120 "$URL_DOH_WHITELIST" -o "$TMP_DOH_WHITELIST.raw"; then
|
|
# Validasi file bukan HTML
|
|
if head -20 "$TMP_DOH_WHITELIST.raw" | grep -qi "<!DOCTYPE\|<html"; then
|
|
cetak_pesan "$KUNING" " │ └─ [WARN] File DoH adalah HTML, skip..."
|
|
return 1
|
|
fi
|
|
clean_domain_file "$TMP_DOH_WHITELIST.raw" "$TMP_DOH_WHITELIST" "DoH whitelist"
|
|
return 0
|
|
else
|
|
cetak_pesan "$KUNING" " │ └─ [WARN] Gagal mengunduh DoH whitelist, lanjut tanpa DoH..."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Fungsi untuk menggabungkan semua whitelist
|
|
combine_whitelists() {
|
|
cetak_pesan "$HIJAU" " ├─ Menggabungkan semua whitelist..."
|
|
|
|
local whitelist_files=()
|
|
|
|
# Tambahkan whitelist utama jika ada
|
|
if [[ -f "$TMP_WHITELIST" ]]; then
|
|
whitelist_files+=("$TMP_WHITELIST")
|
|
fi
|
|
|
|
# Tambahkan DoH whitelist jika ada
|
|
if [[ -f "$TMP_DOH_WHITELIST" ]]; then
|
|
whitelist_files+=("$TMP_DOH_WHITELIST")
|
|
fi
|
|
|
|
# Tambahkan custom whitelist jika ada
|
|
if [[ "$ENABLE_CUSTOM_WHITELIST" == "true" && -n "$CUSTOM_WHITELIST_FILE" && -f "$CUSTOM_WHITELIST_FILE" ]]; then
|
|
cetak_pesan "$ABUABU" " │ ├─ Menambahkan custom whitelist: $CUSTOM_WHITELIST_FILE"
|
|
clean_domain_file "$CUSTOM_WHITELIST_FILE" "$TMP_DIR/custom_whitelist_clean.txt" "custom whitelist"
|
|
whitelist_files+=("$TMP_DIR/custom_whitelist_clean.txt")
|
|
fi
|
|
|
|
# Gabungkan semua whitelist
|
|
if [[ ${#whitelist_files[@]} -gt 0 ]]; then
|
|
cat "${whitelist_files[@]}" | LC_ALL=C sort -u > "$TMP_COMBINED_WHITELIST"
|
|
local total=$(wc -l < "$TMP_COMBINED_WHITELIST")
|
|
cetak_pesan "$ABUABU" " │ └─ Total whitelist gabungan: $total domain"
|
|
else
|
|
touch "$TMP_COMBINED_WHITELIST"
|
|
cetak_pesan "$KUNING" " │ └─ [WARN] Tidak ada whitelist untuk digabungkan"
|
|
fi
|
|
}
|
|
|
|
# Fungsi utama untuk membersihkan blacklist dari whitelist
|
|
# Menggunakan metode yang optimal berdasarkan ukuran file
|
|
remove_whitelist_from_blacklist() {
|
|
local blacklist_file="$1"
|
|
local output_file="$2"
|
|
|
|
if [[ ! -f "$TMP_COMBINED_WHITELIST" ]] || [[ ! -s "$TMP_COMBINED_WHITELIST" ]]; then
|
|
cetak_pesan "$KUNING" " ├─ [SKIP] Tidak ada whitelist, blacklist tidak dimodifikasi"
|
|
cp "$blacklist_file" "$output_file"
|
|
return 0
|
|
fi
|
|
|
|
local wl_count=$(wc -l < "$TMP_COMBINED_WHITELIST")
|
|
local bl_count=$(wc -l < "$blacklist_file")
|
|
|
|
cetak_pesan "$HIJAU" " ├─ Menghapus $wl_count domain whitelist dari $bl_count domain blacklist..."
|
|
|
|
# Pilih metode berdasarkan ukuran file
|
|
if [[ $wl_count -lt 100000 ]]; then
|
|
# Metode AWK - optimal untuk whitelist kecil-medium
|
|
cetak_pesan "$ABUABU" " │ ├─ Metode: AWK hash lookup"
|
|
|
|
awk '
|
|
NR==FNR {
|
|
whitelist[$0] = 1
|
|
next
|
|
}
|
|
{
|
|
if (!($0 in whitelist)) {
|
|
print $0
|
|
}
|
|
}
|
|
' "$TMP_COMBINED_WHITELIST" "$blacklist_file" > "$output_file"
|
|
|
|
elif [[ $wl_count -lt 500000 ]]; then
|
|
# Metode GREP - optimal untuk whitelist medium-besar
|
|
cetak_pesan "$ABUABU" " │ ├─ Metode: grep -vFxf"
|
|
|
|
LC_ALL=C grep -vFxf "$TMP_COMBINED_WHITELIST" "$blacklist_file" > "$output_file" || true
|
|
|
|
else
|
|
# Metode COMM - optimal untuk file sangat besar (hemat memory)
|
|
cetak_pesan "$ABUABU" " │ ├─ Metode: comm (memory efficient)"
|
|
|
|
# Pastikan kedua file sudah sorted
|
|
LC_ALL=C sort -u "$blacklist_file" -o "$blacklist_file.sorted"
|
|
LC_ALL=C comm -23 "$blacklist_file.sorted" "$TMP_COMBINED_WHITELIST" > "$output_file"
|
|
rm -f "$blacklist_file.sorted"
|
|
fi
|
|
|
|
local new_count=$(wc -l < "$output_file")
|
|
local removed=$((bl_count - new_count))
|
|
|
|
cetak_pesan "$HIJAU_TUA" " │ └─ Hasil: $removed domain dihapus, tersisa $new_count domain"
|
|
}
|
|
|
|
#===============================================================================
|
|
# FUNGSI GENERATOR RPZ
|
|
#===============================================================================
|
|
|
|
# Fungsi untuk mengunduh dan memproses TrustPositif
|
|
generate_trustpositif_rpz() {
|
|
cetak_pesan "$HIJAU" "[1/3] Memproses TrustPositif Blacklist..."
|
|
|
|
# Unduh data TrustPositif
|
|
cetak_pesan "$HIJAU" " ├─ Mengunduh data TrustPositif..."
|
|
if ! curl -k -s --connect-timeout 30 --max-time 300 "$URL_TRUSTPOSITIF" -o "$TMP_TRUSTPOSITIF.raw"; then
|
|
cetak_pesan "$MERAH" "[ERROR] Gagal mengunduh data TrustPositif."
|
|
exit 1
|
|
fi
|
|
|
|
# Validasi file
|
|
if head -20 "$TMP_TRUSTPOSITIF.raw" | grep -qi "<!DOCTYPE\|<html"; then
|
|
cetak_pesan "$MERAH" "[ERROR] File TrustPositif adalah HTML, bukan text!"
|
|
exit 1
|
|
fi
|
|
|
|
# Bersihkan dan normalisasi blacklist
|
|
clean_domain_file "$TMP_TRUSTPOSITIF.raw" "$TMP_TRUSTPOSITIF" "blacklist TrustPositif"
|
|
|
|
# Unduh DoH whitelist
|
|
download_doh_whitelist
|
|
|
|
# Unduh dan proses whitelist utama untuk digabungkan
|
|
cetak_pesan "$HIJAU" " ├─ Mengunduh whitelist utama..."
|
|
if curl -k -s --connect-timeout 30 --max-time 120 "$URL_WHITELIST" -o "$TMP_WHITELIST.raw"; then
|
|
clean_domain_file "$TMP_WHITELIST.raw" "$TMP_WHITELIST.clean" "whitelist utama"
|
|
# Simpan untuk penggabungan
|
|
cp "$TMP_WHITELIST.clean" "$TMP_DIR/main_whitelist_for_combine.txt"
|
|
fi
|
|
|
|
# Gabungkan semua whitelist (DoH + whitelist utama + custom)
|
|
# Untuk pembersihan, kita gabungkan whitelist utama juga
|
|
if [[ -f "$TMP_DIR/main_whitelist_for_combine.txt" ]]; then
|
|
cat "$TMP_DIR/main_whitelist_for_combine.txt" >> "$TMP_DOH_WHITELIST" 2>/dev/null || true
|
|
fi
|
|
|
|
# Buat combined whitelist
|
|
if [[ -f "$TMP_DOH_WHITELIST" ]]; then
|
|
LC_ALL=C sort -u "$TMP_DOH_WHITELIST" -o "$TMP_COMBINED_WHITELIST"
|
|
else
|
|
touch "$TMP_COMBINED_WHITELIST"
|
|
fi
|
|
|
|
# Hapus domain whitelist dari blacklist
|
|
remove_whitelist_from_blacklist "$TMP_TRUSTPOSITIF" "$TMP_TRUSTPOSITIF_CLEAN"
|
|
|
|
# Konversi ke format RPZ
|
|
cetak_pesan "$HIJAU" " ├─ Mengonversi ke format RPZ..."
|
|
{
|
|
generate_rpz_header
|
|
awk -v cname="$CNAME_TRUSTPOSITIF" '
|
|
{
|
|
print $1 " 3600 IN CNAME " cname
|
|
print "*." $1 " 3600 IN CNAME " cname
|
|
}' "$TMP_TRUSTPOSITIF_CLEAN"
|
|
} > "$FILE_TRUSTPOSITIF"
|
|
|
|
local final_count=$(wc -l < "$TMP_TRUSTPOSITIF_CLEAN")
|
|
cetak_pesan "$HIJAU" " └─ [OK] TrustPositif RPZ: $final_count domain aktif"
|
|
}
|
|
|
|
# Fungsi untuk mengunduh dan memproses Whitelist (untuk RPZ passthru)
|
|
generate_whitelist_rpz() {
|
|
cetak_pesan "$HIJAU" "[2/3] Memproses Whitelist RPZ..."
|
|
|
|
cetak_pesan "$HIJAU" " ├─ Mengunduh data Whitelist..."
|
|
if ! curl -k -s --connect-timeout 30 --max-time 120 "$URL_WHITELIST" -o "$TMP_WHITELIST.raw"; then
|
|
cetak_pesan "$MERAH" "[ERROR] Gagal mengunduh data Whitelist."
|
|
exit 1
|
|
fi
|
|
|
|
# Bersihkan whitelist
|
|
clean_domain_file "$TMP_WHITELIST.raw" "$TMP_WHITELIST" "whitelist RPZ"
|
|
|
|
cetak_pesan "$HIJAU" " ├─ Mengonversi ke format RPZ passthru..."
|
|
{
|
|
generate_rpz_header
|
|
awk '/^[a-zA-Z0-9.-]+$/ {
|
|
print $1 " 3600 IN CNAME rpz-passthru."
|
|
print "*." $1 " 3600 IN CNAME rpz-passthru."
|
|
}' "$TMP_WHITELIST"
|
|
} > "$FILE_WHITELIST"
|
|
|
|
local wl_count=$(wc -l < "$TMP_WHITELIST")
|
|
cetak_pesan "$HIJAU" " └─ [OK] Whitelist RPZ: $wl_count domain passthru"
|
|
}
|
|
|
|
# Fungsi untuk mengunduh dan memproses SafeSearch
|
|
generate_safesearch_rpz() {
|
|
cetak_pesan "$HIJAU" "[3/3] Memproses Google SafeSearch..."
|
|
|
|
cetak_pesan "$HIJAU" " ├─ Mengunduh Google SafeSearch domains..."
|
|
if ! curl -k -s --connect-timeout 30 --max-time 60 "$URL_SAFESEARCH" | grep -oE '([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}' > "$TMP_SAFESEARCH"; then
|
|
cetak_pesan "$MERAH" "[ERROR] Gagal mengunduh Google SafeSearch domains."
|
|
exit 1
|
|
fi
|
|
|
|
cetak_pesan "$HIJAU" " ├─ Mengonversi ke format RPZ..."
|
|
{
|
|
generate_rpz_header
|
|
awk -v cname="$CNAME_SAFESEARCH" '/^[^#]/ {print $1 " 3600 IN CNAME " cname}' "$TMP_SAFESEARCH"
|
|
} > "$FILE_SAFESEARCH"
|
|
|
|
local ss_count=$(wc -l < "$TMP_SAFESEARCH")
|
|
cetak_pesan "$HIJAU" " └─ [OK] SafeSearch RPZ: $ss_count domain"
|
|
}
|
|
|
|
# Fungsi untuk memeriksa file zona
|
|
check_zone_files() {
|
|
cetak_pesan "$CYAN" "Memeriksa validitas file zona..."
|
|
|
|
for file in "$FILE_TRUSTPOSITIF" "$FILE_WHITELIST" "$FILE_SAFESEARCH"; do
|
|
zone_name=$(basename "$file" .zones).zone
|
|
if ! named-checkzone "$zone_name" "$file" > /dev/null 2>&1; then
|
|
cetak_pesan "$MERAH" "[ERROR] Kesalahan dalam file zona $zone_name."
|
|
exit 1
|
|
fi
|
|
cetak_pesan "$ABUABU" " ├─ $zone_name: OK"
|
|
done
|
|
|
|
cetak_pesan "$HIJAU" " └─ Semua file zona valid"
|
|
}
|
|
|
|
# Fungsi untuk me-reload BIND9
|
|
reload_bind9() {
|
|
cetak_pesan "$CYAN" "Me-reload BIND9 untuk menerapkan perubahan..."
|
|
|
|
# Gunakan rndc jika tersedia, karena lebih cepat daripada systemctl
|
|
if command -v rndc > /dev/null 2>&1; then
|
|
if rndc reload > /dev/null 2>&1; then
|
|
cetak_pesan "$HIJAU" "[BERHASIL] BIND9 berhasil di-reload menggunakan rndc."
|
|
else
|
|
cetak_pesan "$MERAH" "[ERROR] Gagal me-reload BIND9 menggunakan rndc."
|
|
exit 1
|
|
fi
|
|
elif command -v systemctl > /dev/null 2>&1; then
|
|
if systemctl reload bind9 > /dev/null 2>&1; then
|
|
cetak_pesan "$HIJAU" "[BERHASIL] BIND9 berhasil di-reload menggunakan systemctl."
|
|
else
|
|
cetak_pesan "$MERAH" "[ERROR] Gagal me-reload BIND9 menggunakan systemctl."
|
|
exit 1
|
|
fi
|
|
else
|
|
cetak_pesan "$MERAH" "[ERROR] Tidak dapat menemukan perintah 'rndc' atau 'systemctl'."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Fungsi untuk menampilkan ringkasan
|
|
show_summary() {
|
|
echo ""
|
|
echo -e "${CYAN}============================================================================${RESET}"
|
|
echo -e "${CYAN} RINGKASAN UPDATE ${RESET}"
|
|
echo -e "${CYAN}============================================================================${RESET}"
|
|
|
|
if [[ -f "$TMP_TRUSTPOSITIF_CLEAN" ]]; then
|
|
local tp_count=$(wc -l < "$TMP_TRUSTPOSITIF_CLEAN")
|
|
echo -e " ${PUTIH}TrustPositif Blacklist : ${HIJAU}$tp_count${PUTIH} domain${RESET}"
|
|
fi
|
|
|
|
if [[ -f "$TMP_WHITELIST" ]]; then
|
|
local wl_count=$(wc -l < "$TMP_WHITELIST")
|
|
echo -e " ${PUTIH}Whitelist Passthru : ${HIJAU}$wl_count${PUTIH} domain${RESET}"
|
|
fi
|
|
|
|
if [[ -f "$TMP_SAFESEARCH" ]]; then
|
|
local ss_count=$(wc -l < "$TMP_SAFESEARCH")
|
|
echo -e " ${PUTIH}Google SafeSearch : ${HIJAU}$ss_count${PUTIH} domain${RESET}"
|
|
fi
|
|
|
|
if [[ -f "$TMP_COMBINED_WHITELIST" ]]; then
|
|
local combined=$(wc -l < "$TMP_COMBINED_WHITELIST")
|
|
echo -e " ${PUTIH}Domain Whitelist Total : ${KUNING}$combined${PUTIH} (dihapus dari blacklist)${RESET}"
|
|
fi
|
|
|
|
echo -e "${CYAN}============================================================================${RESET}"
|
|
echo -e " ${PUTIH}Waktu selesai: ${HIJAU}$(date '+%Y-%m-%d %H:%M:%S')${RESET}"
|
|
echo -e "${CYAN}============================================================================${RESET}"
|
|
}
|
|
|
|
# Fungsi utama
|
|
main() {
|
|
local start_time=$(date +%s)
|
|
|
|
cetak_pesan "$CYAN" "MEMULAI PEMBARUAN DATABASE DNS..."
|
|
echo ""
|
|
|
|
generate_trustpositif_rpz || exit 1
|
|
echo ""
|
|
generate_whitelist_rpz || exit 1
|
|
echo ""
|
|
generate_safesearch_rpz || exit 1
|
|
echo ""
|
|
|
|
check_zone_files || exit 1
|
|
echo ""
|
|
|
|
cetak_pesan "$HIJAU" "[BERHASIL] Semua file zona berhasil diperbarui dan diverifikasi."
|
|
|
|
# Me-reload BIND9
|
|
reload_bind9
|
|
|
|
# Tampilkan ringkasan
|
|
show_summary
|
|
|
|
local end_time=$(date +%s)
|
|
local elapsed=$((end_time - start_time))
|
|
cetak_pesan "$HIJAU" "Total waktu eksekusi: ${elapsed} detik"
|
|
}
|
|
|
|
# Jalankan fungsi utama
|
|
main
|