#!/bin/bash

# Đảm bảo script chạy với quyền root
if [ "$EUID" -ne 0 ]; then
    echo "Vui lòng chạy script với quyền root!" # Default to Vietnamese
    exit 1
fi

# Chọn ngôn ngữ (English hoặc Vietnamese)
echo "Select language / Chọn ngôn ngữ:"
echo "1. English"
echo "2. Tiếng Việt"
read -p "Enter choice / Nhập lựa chọn: " LANG_CHOICE

if [[ "$LANG_CHOICE" == "1" ]]; then
    LANG="en"
    MSG_ROOT="Please run as root!"
    MSG_ENTER_SERVER_NAME="Enter server name (Ex: htn217217): "
    MSG_SERVER_NAME_EMPTY="Server name cannot be empty!"
    MSG_INSTALLING="Installing necessary packages and configuring audit log..."
    MSG_UNSUPPORTED_OS="Unsupported OS"
    MSG_SETUP_COMPLETE="Audit and log forwarding setup completed. Status of services:"
elif [[ "$LANG_CHOICE" == "2" ]]; then
    LANG="vi"
    MSG_ROOT="Vui lòng chạy script với quyền root!"
    MSG_ENTER_SERVER_NAME="Nhập tên server (ví dụ: htn217217): "
    MSG_SERVER_NAME_EMPTY="Tên server không được để trống!"
    MSG_INSTALLING="Đang cài đặt các gói cần thiết và cấu hình log audit..."
    MSG_UNSUPPORTED_OS="Hệ điều hành không được hỗ trợ"
    MSG_SETUP_COMPLETE="Hoàn tất cấu hình ghi log và đẩy log. Trạng thái dịch vụ:"
else
    echo "Invalid choice / Lựa chọn không hợp lệ"
    exit 1
fi

# Địa chỉ Splunk log central
SPLUNK_SERVER="10.10.217.217"
SPLUNK_PORT="514"

# Yêu cầu người dùng nhập tên server
read -p "$MSG_ENTER_SERVER_NAME" CUSTOM_SERVER_NAME
if [[ -z "$CUSTOM_SERVER_NAME" ]]; then
    echo "$MSG_SERVER_NAME_EMPTY"
    exit 1
fi

# Kiểm tra hệ điều hành
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$ID
else
    echo "$MSG_UNSUPPORTED_OS"
    exit 1
fi

# Cài đặt gói cần thiết và cấu hình audit log
echo "$MSG_INSTALLING"
if [[ "$OS" == "centos" ]]; then
    yum install -y audit auditd rsyslog
    systemctl enable auditd
    systemctl enable rsyslog
    systemctl start auditd
    systemctl start rsyslog

    # Cấu hình rsyslog để gửi log audit đến Splunk với custom server_name
    cat << EOF > /etc/rsyslog.d/splunk-audit.conf
# Định nghĩa template với server_name
template(name="CustomFormat" type="string" string="<%PRI%> ${CUSTOM_SERVER_NAME} %timegenerated% %msg%\n")

# Gửi log với template tùy chỉnh
*.info @@${SPLUNK_SERVER}:${SPLUNK_PORT};CustomFormat
EOF
    systemctl restart rsyslog

elif [[ "$OS" == "ubuntu" ]]; then
    apt update
    apt install -y auditd audispd-plugins rsyslog
    systemctl enable auditd
    systemctl enable rsyslog
    systemctl start auditd
    systemctl start rsyslog

    # Cấu hình rsyslog để gửi log audit đến Splunk với custom server_name
    cat << EOF > /etc/rsyslog.d/splunk-audit.conf
# Định nghĩa template với server_name
template(name="CustomFormat" type="string" string="<%PRI%> ${CUSTOM_SERVER_NAME} %timegenerated% %msg%\n")

# Gửi log với template tùy chỉnh
*.info @@${SPLUNK_SERVER}:${SPLUNK_PORT};CustomFormat
EOF
    systemctl restart rsyslog

else
    echo "$MSG_UNSUPPORTED_OS"
    exit 1
fi

# Cấu hình auditd để ghi log
cat << EOF > /etc/audit/auditd.conf
log_file = /var/log/audit/audit.log
log_format = RAW
max_log_file = 8
max_log_file_action = ROTATE
enable_krb5 = no
declare_error_on_failure = no
EOF

systemctl restart auditd

# Xác nhận trạng thái dịch vụ
echo "$MSG_SETUP_COMPLETE"
systemctl status auditd | grep Active
systemctl status rsyslog | grep Active

