Skip to content

Instantly share code, notes, and snippets.

@Srobin2020S
Created May 24, 2023 08:38
Show Gist options
  • Select an option

  • Save Srobin2020S/cf7324d298d50e358a176dffda540911 to your computer and use it in GitHub Desktop.

Select an option

Save Srobin2020S/cf7324d298d50e358a176dffda540911 to your computer and use it in GitHub Desktop.

Revisions

  1. @aessing aessing revised this gist Jul 19, 2021. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion harden-Ubuntu2004.sh
    Original file line number Diff line number Diff line change
    @@ -19,6 +19,7 @@ ADMINNETWORK='192.168.1.0/24'
    QUEMU_INSTALL='false'
    SWAP_SIZE_MB=4096
    TIMEZONE='Europe/Berlin'
    NTPSERVER='de.pool.ntp.org'

    # Set some variables that normally don't need to be changed
    APT_INSTALL='auditd audispd-plugins fail2ban usbguard'
    @@ -202,7 +203,7 @@ sysctl -p
    systemctl restart systemd-sysctl

    # Configure time synchronisation
    sed -i -e 's/#NTP=.*/NTP=time.corp.essing.org/' "$CONFIG_TIME"
    sed -i -e "s/#NTP=.*/NTP=$NTPSERVER/" "$CONFIG_TIME"
    systemctl restart systemd-timesyncd

    # Disable unused network protocols
    @@ -291,6 +292,7 @@ usermod -G ${ADMINUSER},adm,sudo,sshd_users $ADMINUSER
    # Configure Swap
    swapoff -a
    dd if=/dev/zero of="$SWAP_FILE" bs=1M count=$SWAP_SIZE_MB
    chmod 600 "$SWAP_FILE"
    mkswap "$SWAP_FILE"
    swapon "$SWAP_FILE"

  2. @aessing aessing created this gist Jun 2, 2021.
    552 changes: 552 additions & 0 deletions harden-Ubuntu2004.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,552 @@
    #!/bin/bash
    # =============================================================================
    # Harden Ubuntu Linux 20.04 (focal)
    # Run commands as root (sudo su -)
    # -----------------------------------------------------------------------------
    # Developer.......: Andre Essing (https://www.andre-essing.de/)
    # (https://github.com/aessing)
    # (https://twitter.com/aessing)
    # (https://www.linkedin.com/in/aessing/)
    # -----------------------------------------------------------------------------
    # THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
    # EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
    # WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
    # =============================================================================

    # Set some variables
    ADMINUSER='ubuntu'
    ADMINNETWORK='192.168.1.0/24'
    QUEMU_INSTALL='false'
    SWAP_SIZE_MB=4096
    TIMEZONE='Europe/Berlin'

    # Set some variables that normally don't need to be changed
    APT_INSTALL='auditd audispd-plugins fail2ban usbguard'
    APT_PURGE='apport* autofs avahi* beep git pastebinit popularity-contest rsh* rsync talk* telnet* tftp* whoopsie xinetd yp-tools popularity-contest ubuntu-report'

    CONFIG_ACCESS='/etc/security/access.conf'
    CONFIG_ADDUSER='/etc/adduser.conf'
    CONFIG_AUDITD='/etc/audit/auditd.conf'
    CONFIG_AUDITDRULES='/etc/audit/rules.d/audit.rules'
    CONFIG_AUDITDSERVICE='/lib/systemd/system/auditd.service'
    CONFIG_AUTOUPDATE='/etc/apt/apt.conf.d/50unattended-upgrades'
    CONFIG_DISABLENET='/etc/modprobe.d/CONFIG_DISABLENET.conf'
    CONFIG_DISABLEFS='/etc/modprobe.d/CONFIG_DISABLEFS.conf'
    CONFIG_DISABLEMOD='/etc/modprobe.d/CONFIG_DISABLEMOD.conf'
    CONFIG_FAIL2BAN='/etc/fail2ban/jail.local'
    CONFIG_LOGIN='/etc/login.defs'
    CONFIG_MOTDNEWS='/etc/default/motd-news'
    CONFIG_SECURETTY='/etc/securetty'
    CONFIG_SSHD='/etc/ssh/sshd_config'
    CONFIG_SYSCTL='/etc/sysctl.conf'
    CONFIG_SYSTEM='/etc/systemd/system.conf'
    CONFIG_TIME='/etc/systemd/timesyncd.conf'
    CONFIG_UFW='/etc/default/ufw'
    CONFIG_USBGUARDRULES='/etc/usbguard/rules.conf'
    CONFIG_USERADD='/etc/default/useradd'

    CONFIG_DISABLENET_MODULES='dccp sctp rds tipc'
    CONFIG_DISABLEFS_MODULES='cramfs freevxfs jffs2 hfs hfsplus squashfs udf vfat'
    CONFIG_DISABLEMOD_MODULES='bluetooth bnep btusb cpia2 firewire-core floppy n_hdlc net-pf-31 pcspkr soundcore thunderbolt usb-midi usb-storage uvcvideo v4l2_common'

    SWAP_FILE='/swap.img'

    ###############################################################################
    ############################# MAGIC STARTS HERE ###############################
    ###############################################################################

    # Update, install and uninstall requires packages
    apt update -y
    apt purge -y $APT_PURGE
    apt-get install -y --no-install-recommends $APT_INSTALL
    apt dist-upgrade -y
    apt autoremove -y
    apt autoclean -y

    # Enable firewall
    sed -i 's/IPV6=.*/IPV6=no/' "$CONFIG_UFW"
    sed -i 's/IPT_SYSCTL=.*/IPT_SYSCTL=\/etc\/sysctl\.conf/' "$CONFIG_UFW"
    ufw allow in on lo
    ufw allow out on lo
    ufw deny in from 127.0.0.0/8
    ufw deny from any to 224.0.0.1
    ufw allow log from $ADMINNETWORK to any port 22 proto tcp
    ufw default deny incoming
    ufw --force enable

    # Configure auto-update
    sed -i -e 's/\/\/.*"\${distro_id}:\${distro_codename}-updates";/\t\"\${distro_id}:\${distro_codename}-updates\";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::AutoFixInterruptedDpkg.*;/Unattended-Upgrade::AutoFixInterruptedDpkg "true";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::Remove-Unused-Kernel-Packages.*;/Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::Remove-Unused-Dependencies.*;/Unattended-Upgrade::Remove-Unused-Dependencies "true";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::Remove-New-Unused-Dependencies.*;/Unattended-Upgrade::Remove-New-Unused-Dependencies "true";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::Automatic-Reboot[^-].*;/Unattended-Upgrade::Automatic-Reboot "true";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::Automatic-Reboot-Time.*;/Unattended-Upgrade::Automatic-Reboot-Time "02:00";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::SyslogEnable.*;/Unattended-Upgrade::SyslogEnable "true";/' "$CONFIG_AUTOUPDATE"
    sed -i -e 's/\/\/.*Unattended-Upgrade::SyslogFacility.*;/Unattended-Upgrade::SyslogFacility "upgrade";/' "$CONFIG_AUTOUPDATE"
    systemctl restart unattended-upgrades.service

    # Harden SSH
    groupadd -r sshd_users
    usermod -G sshd_users -a $ADMINUSER
    sed -i -e 's/^Include \/etc\/ssh\/sshd_config.d\/\*.conf/#Include \/etc\/ssh\/sshd_config.d\/\*.conf/' "$CONFIG_SSHD"
    sed -i -e 's/.*RekeyLimit.*/RekeyLimit 512M 1h/' "$CONFIG_SSHD"
    sed -i -e 's/#LogLevel.*/LogLevel VERBOSE/' "$CONFIG_SSHD"
    sed -i -e 's/#LoginGraceTime.*/LoginGraceTime 30s/' "$CONFIG_SSHD"
    sed -i -e 's/#PermitRootLogin.*/PermitRootLogin no/' "$CONFIG_SSHD"
    sed -i -e 's/#StrictModes.*/StrictModes yes/' "$CONFIG_SSHD"
    sed -i -e 's/#MaxAuthTries.*/MaxAuthTries 3/' "$CONFIG_SSHD"
    sed -i -e 's/#MaxSessions.*/MaxSessions 3/' "$CONFIG_SSHD"
    sed -i -e 's/#PubkeyAuthentication.*/PubkeyAuthentication yes/' "$CONFIG_SSHD"
    sed -i -e 's/#AuthorizedKeysFile.*/AuthorizedKeysFile .ssh\/authorized_keys/' "$CONFIG_SSHD"
    sed -i -e 's/#PasswordAuthentication.*/PasswordAuthentication no/' "$CONFIG_SSHD"
    sed -i -e 's/#PermitEmptyPasswords.*/PermitEmptyPasswords no/' "$CONFIG_SSHD"
    sed -i -e 's/#AllowAgentForwarding.*/AllowAgentForwarding no/' "$CONFIG_SSHD"
    sed -i -e 's/#AllowTcpForwarding.*/AllowTcpForwarding no/' "$CONFIG_SSHD"
    sed -i -e 's/#GatewayPorts.*/GatewayPorts no/' "$CONFIG_SSHD"
    sed -i -e 's/X11Forwarding.*/X11Forwarding no/' "$CONFIG_SSHD"
    sed -i -e 's/#PrintLastLog.*/PrintLastLog yes/' "$CONFIG_SSHD"
    sed -i -e 's/#TCPKeepAlive.*/TCPKeepAlive no/' "$CONFIG_SSHD"
    sed -i -e 's/#PermitUserEnvironment.*/PermitUserEnvironment no/' "$CONFIG_SSHD"
    sed -i -e 's/#Compression.*/Compression no/' "$CONFIG_SSHD"
    sed -i -e 's/#ClientAliveCountMax.*/ClientAliveCountMax 2/' "$CONFIG_SSHD"
    sed -i -e 's/#ClientAliveInterval.*/ClientAliveInterval 300/' "$CONFIG_SSHD"
    sed -i -e 's/#UseDNS.*/UseDNS no/' "$CONFIG_SSHD"
    sed -i -e 's/#MaxStartups.*/MaxStartups 10:30:60/' "$CONFIG_SSHD"
    sed -i -e 's/#PermitTunnel.*/PermitTunnel no/' "$CONFIG_SSHD"
    sed -i -e 's/#IgnoreUserKnownHosts.*/IgnoreUserKnownHosts yes/' "$CONFIG_SSHD"
    sed -i -e 's/#HostbasedAuthentication.*/HostbasedAuthentication no/' "$CONFIG_SSHD"
    sed -i -e 's/#KerberosAuthentication.*/KerberosAuthentication no/' "$CONFIG_SSHD"
    sed -i -e 's/#GSSAPIAuthentication.*/GSSAPIAuthentication no/' "$CONFIG_SSHD"
    sed -i -e 's/.*Subsystem.*sftp.*/Subsystem sftp internal-sftp/' "$CONFIG_SSHD"
    echo "
    AllowGroups sshd_users
    KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
    Ciphers [email protected],[email protected],aes256-ctr
    Macs [email protected],[email protected],hmac-sha2-512,hmac-sha2-256
    " >> "$CONFIG_SSHD"
    systemctl restart sshd.service

    # Install fail2ban
    cp /etc/fail2ban/jail.{conf,local}
    sed -i -e 's/#bantime.increment =.*/bantime.increment = true/' "$CONFIG_FAIL2BAN"
    sed -i -e 's/bantime =.*/bantime = 1h/' "$CONFIG_FAIL2BAN"
    systemctl restart fail2ban.service

    # Harden settings in sysctl.conf
    sed -i -e 's/#net.ipv4.conf.default.rp_filter.*/net.ipv4.conf.default.rp_filter=1/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.conf.all.rp_filter.*/net.ipv4.conf.all.rp_filter=1/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.tcp_syncookies.*/net.ipv4.tcp_syncookies=1/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.ip_forward.*/net.ipv4.ip_forward=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv6.conf.all.forwarding.*/net.ipv6.conf.all.forwarding=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.conf.all.accept_redirects.*/net.ipv4.conf.all.accept_redirects=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv6.conf.all.accept_redirects.*/net.ipv6.conf.all.accept_redirects=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#.*net.ipv4.conf.all.secure_redirects.*/net.ipv4.conf.all.secure_redirects=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.conf.all.send_redirects.*/net.ipv4.conf.all.send_redirects=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.conf.all.accept_source_route.*/net.ipv4.conf.all.accept_source_route=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv6.conf.all.accept_source_route.*/net.ipv6.conf.all.accept_source_route=0/' "$CONFIG_SYSCTL"
    sed -i -e 's/#net.ipv4.conf.all.log_martians.*/net.ipv4.conf.all.log_martians=1/' "$CONFIG_SYSCTL"
    sed -i -e 's/#kernel.sysrq.*/kernel.sysrq=0/' "$CONFIG_SYSCTL"
    echo "
    ###################################################################
    # Custom added parameters
    # Ubuntu server hardening
    # Ignore ICMP redirects
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv6.conf.default.accept_redirects = 0
    # Ignore send redirects
    net.ipv4.conf.default.send_redirects = 0
    # Disable source packet routing
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv6.conf.default.accept_source_route = 0
    # Block SYN attacks
    net.ipv4.tcp_max_syn_backlog = 2048
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 5
    # Ignore ICMP bogus error responses
    net.ipv4.icmp_ignore_bogus_error_responses = 1
    # Ignore ICMP broadcast requests
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    # Ignore Directed pings
    net.ipv4.icmp_echo_ignore_all = 1
    kernel.randomize_va_space = 1
    # disable IPv6 if required (IPv6 might caus issues with the Internet connection being slow)
    net.ipv6.conf.all.disable_ipv6 = 1/
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
    # Log packets with impossible addresses to kernel log? yes
    net.ipv4.conf.default.secure_redirects = 0
    # [IPv6] Number of Router Solicitations to send until assuming no routers are present.
    # This is host and not router.
    net.ipv6.conf.default.router_solicitations = 0
    # Accept Router Preference in RA?
    net.ipv6.conf.default.accept_ra_rtr_pref = 0
    # Learn prefix information in router advertisement.
    net.ipv6.conf.default.accept_ra_pinfo = 0
    # Setting controls whether the system will accept Hop Limit settings from a router advertisement.
    net.ipv6.conf.default.accept_ra_defrtr = 0
    # Router advertisements can cause the system to assign a global unicast address to an interface.
    net.ipv6.conf.default.autoconf = 0
    # How many neighbor solicitations to send out per address?
    net.ipv6.conf.default.dad_transmits = 0
    # How many global unicast IPv6 addresses can be assigned to each interface?
    net.ipv6.conf.default.max_addresses = 1
    # In rare occasions, it may be beneficial to reboot your server reboot if it runs out of memory.
    # This simple solution can avoid you hours of down time. The vm.panic_on_oom=1 line enables panic
    # on OOM; the kernel.panic=10 line tells the kernel to reboot ten seconds after panicking.
    vm.panic_on_oom = 1
    kernel.panic = 10
    " >> "$CONFIG_SYSCTL"
    sysctl -p
    systemctl restart systemd-sysctl

    # Configure time synchronisation
    sed -i -e 's/#NTP=.*/NTP=time.corp.essing.org/' "$CONFIG_TIME"
    systemctl restart systemd-timesyncd

    # Disable unused network protocols
    for disable in $CONFIG_DISABLENET_MODULES; do
    if ! grep -q "$disable" "$CONFIG_DISABLENET" 2> /dev/null; then
    echo "install $disable /bin/true" >> "$CONFIG_DISABLENET"
    fi
    done

    # Disable unused filesystems
    for disable in $CONFIG_DISABLEFS_MODULES; do
    if ! grep -q "$disable" "$CONFIG_DISABLEFS" 2> /dev/null; then
    echo "install $disable /bin/true" >> "$CONFIG_DISABLEFS"
    fi
    done

    # Disable unused modules
    for disable in $CONFIG_DISABLEMOD_MODULES; do
    if ! grep -q "$disable" "$CONFIG_DISABLEMOD" 2> /dev/null; then
    echo "install $disable /bin/true" >> "$CONFIG_DISABLEMOD"
    fi
    done

    # Enable USB Guard
    usbguard generate-policy > /tmp/rules.conf
    install -m 0600 -o root -g root /tmp/rules.conf "$CONFIG_USBGUARDRULES"
    rm /tmp/rules.conf
    systemctl enable usbguard.service
    systemctl start usbguard.service

    # Disable CTRL+ALT+DEL
    sed -i 's/^#CtrlAltDelBurstAction=.*/CtrlAltDelBurstAction=none/' "$CONFIG_SYSTEM"
    systemctl mask ctrl-alt-del.target

    # Set MOTD text
    MOTD_TEXT="By accessing this system, you consent to the following conditions:
    - This system is restricted to authorized users only.
    - Any or all uses of this system and all files on this system may be monitored.
    - Communications using, or data stored on, this system are not private.
    "
    echo -e "$MOTD_TEXT" > /etc/issue
    echo -e "$MOTD_TEXT" > /etc/issue.net
    echo -e "$MOTD_TEXT" > /etc/motd

    # Disable MOTD NEWS
    sed -i -e 's/ENABLED=.*/ENABLED=0/' "$CONFIG_MOTDNEWS"
    systemctl stop motd-news.timer
    systemctl mask motd-news.timer

    # Disable ATD
    systemctl mask atd.service
    systemctl stop atd.service
    systemctl daemon-reload

    # Disable systemd-debug-generator
    systemctl mask debug-shell.service
    systemctl stop debug-shell.service
    systemctl daemon-reload

    # Configure dump and crash behavior
    sed -i -e 's/^#DumpCore=.*/DumpCore=no/' "$CONFIG_SYSTEM"
    sed -i -e 's/^#CrashShell=.*/CrashShell=no/' "$CONFIG_SYSTEM"

    # Configure logins
    sed -i -e 's/^.*LOG_OK_LOGINS.*/LOG_OK_LOGINS yes/' "$CONFIG_LOGIN"
    sed -i -e 's/DEFAULT_HOME.*/DEFAULT_HOME no/' "$CONFIG_LOGIN"
    sed -i -e 's/ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' "$CONFIG_LOGIN"
    sed -i -e 's/^# SHA_CRYPT_MIN_ROUNDS.*/SHA_CRYPT_MIN_ROUNDS 10000/' "$CONFIG_LOGIN"
    sed -i -e 's/^# SHA_CRYPT_MAX_ROUNDS.*/SHA_CRYPT_MAX_ROUNDS 65536/' "$CONFIG_LOGIN"
    sed -i -e 's/USERGROUPS_ENAB.*/USERGROUPS_ENAB no/' "$CONFIG_LOGIN"
    sed -i -e 's/DIR_MODE=.*/DIR_MODE=0750/' "$CONFIG_ADDUSER"
    sed -i -e 's/DSHELL=.*/DSHELL=\/bin\/false/' "$CONFIG_ADDUSER"
    sed -i -e 's/SHELL=.*/SHELL=\/bin\/false/' "$CONFIG_USERADD"

    # Set timezone
    timedatectl set-timezone "$TIMEZONE"

    # Lock and restrict root user
    usermod -L root
    sed -i -e 's/^#.*root.*:.*127.0.0.1$/+:root:127.0.0.1/' "$CONFIG_ACCESS"
    echo "console" > "$CONFIG_SECURETTY"

    # Configure users
    usermod -G ${ADMINUSER},adm,sudo,sshd_users $ADMINUSER

    # Configure Swap
    swapoff -a
    dd if=/dev/zero of="$SWAP_FILE" bs=1M count=$SWAP_SIZE_MB
    mkswap "$SWAP_FILE"
    swapon "$SWAP_FILE"

    # Install Qemu Agent (PROXMOX VM ONLY)
    if [[ "${QUEMU_INSTALL^^}" == "TRUE" ]]; then
    apt install -y qemu-guest-agent
    systemctl start qemu-guest-agent.service
    fi

    # Configure auditd
    echo "
    # First rule - delete all
    -D
    # Increase the buffers to survive stress events.
    # Make this bigger for busy systems
    -b 8192
    # This determine how long to wait in burst of events
    --backlog_wait_time 0
    # Set failure mode to syslog
    -f 1
    # su and sudo
    -w /bin/su -p x -k actions
    -w /etc/sudoers -p wa -k actions
    -w /etc/sudoers.d -p wa -k actions
    -w /usr/bin/sudo -p x -k actions
    -a always,exit -S all -F dir=/home/ -F uid=0 -C auid!=obj_uid -k admin-user-home
    # Apparmor configuration and tools
    -w /etc/apparmor -p wa -k apparmor
    -w /etc/apparmor.d -p wa -k apparmor
    -w /sbin/apparmor_parser -p x -k apparmor-tools
    -w /usr/sbin/aa-complain -p x -k apparmor-tools
    -w /usr/sbin/aa-disable -p x -k apparmor-tools
    -w /usr/sbin/aa-enforce -p x -k apparmor-tools
    # Auditd configuration
    -w /etc/audisp -p wa -k audispconfig
    -w /etc/audit -p wa -k auditconfig
    -w /etc/libaudit.conf -p wa -k auditconfig
    -w /var/log/audit -p rwxa -k auditlog
    -w /sbin/auditctl -p x -k audittools
    -w /sbin/auditd -p x -k audittools
    # Cron
    -w /etc/cron.allow -p wa -k cron
    -w /etc/cron.d -p wa -k cron
    -w /etc/cron.daily -p wa -k cron
    -w /etc/cron.deny -p wa -k cron
    -w /etc/cron.hourly -p wa -k cron
    -w /etc/cron.monthly -p wa -k cron
    -w /etc/cron.weekly -p wa -k cron
    -w /etc/crontab -p wa -k cron
    -w /var/spool/cron/crontabs -p rwxa -k cron
    # Group modifications
    -w /etc/group -p wa -k group-modification
    -w /etc/gshadow -p wa -k group-modification
    -w /etc/passwd -p wa -k group-modification
    -w /etc/security/opasswd -p wa -k group-modification
    -w /etc/shadow -p wa -k group-modification
    -w /usr/sbin/addgroup -p x -k group-modification
    -w /usr/sbin/groupadd -p x -k group-modification
    -w /usr/sbin/groupmod -p x -k group-modification
    # Startup scripts
    -w /etc/init -p wa -k init
    -w /etc/init.d -p wa -k init
    -w /etc/inittab -p wa -k init
    #
    -w /etc/ld.so.conf -p wa -k libpath
    # Local time
    -w /etc/localtime -p wa -k localtime
    # Login monitoring
    -w /etc/login.defs -p wa -k login
    -w /etc/securetty -p wa -k login
    -w /var/log/faillog -p wa -k login
    -w /var/log/lastlog -p wa -k login
    -w /var/log/tallylog -p wa -k login
    -w /var/run/faillock -p wa -k login
    # SELinux configuration
    -w /etc/selinux -p wa -k mac-policy
    # Postfix configuration
    -w /etc/aliases -p wa -k mail
    -w /etc/postfix -p wa -k mail
    # Kernel module configuration and tools
    -w /etc/modprobe.conf -p wa -k modprobe
    -w /etc/modprobe.d -p wa -k modprobe
    -w /etc/modules -p wa -k modprobe
    -a always,exit -F arch=b32 -S finit_module -k modules
    -a always,exit -F arch=b32 -S init_module -k modules
    -a always,exit -F arch=b64 -S finit_module -k modules
    -a always,exit -F arch=b64 -S init_module -S delete_module -k modules
    -w /sbin/insmod -p x -k modules
    -w /sbin/modprobe -p x -k modules
    -w /sbin/rmmod -p x -k modules
    -w /usr/sbin/insmod -p x -k modules
    -w /usr/sbin/modprobe -p x -k modules
    -w /usr/sbin/rmmod -p x -k modules
    #
    -a always,exit -F arch=b32 -S mount -F auid>=1000 -F auid!=-1 -k mounts
    -a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=-1 -k mounts
    # Network configuration
    -w /etc/hosts -p wa -k network-config
    -w /etc/issue -p wa -k network-config
    -w /etc/issue.net -p wa -k network-config
    -w /etc/netplan -p wa -k network-config
    -w /etc/network -p wa -k network-config
    #-w /etc/sysconfig/network -p wa -k network-config
    # PAM configuration
    -w /etc/pam.d -p wa -k pam
    -w /etc/security/limits.conf -p wa -k pam
    -w /etc/security/namespace.conf -p wa -k pam
    -w /etc/security/namespace.init -p wa -k pam
    -w /etc/security/pam_env.conf -p wa -k pam
    # Password modifications
    -w /usr/bin/passwd -p x -k passwd-modification
    # Power state
    -w /sbin/halt -p x -k power
    -w /sbin/poweroff -p x -k power
    -w /sbin/reboot -p x -k power
    -w /sbin/shutdown -p x -k power
    # Use of privileged commands
    -a always,exit -F path=/bin/fusermount -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/bin/mount -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/bin/ntfs-3g -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/bin/ping -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/bin/ping6 -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/bin/su -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/bin/umount -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/sbin/pam_extrausers_chkpwd -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/at -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/bsd-write -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/cgclassify -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/cgexec -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/chage -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/chcon -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/chsh -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/crontab -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/dotlockfile -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/expiry -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/locate -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/mlocate -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/mount -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/newgidmap -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/newuidmap -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/pkexec -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/screen -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/ssh-agent -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/staprun -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/sudoedit -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/traceroute6.iputils -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/umount -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/userhelper -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/wall -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/bin/write -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/lib/dbus-1.0/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/lib/eject/dmcrypt-get-device -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/lib/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/lib/policykit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    #-a always,exit -F path=/usr/lib/polkit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/lib/snapd/snap-confine -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    #-a always,exit -F path=/usr/lib/x86_64-linux-gnu/utempter/utempter -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    #-a always,exit -F path=/usr/libexec/dbus-1/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    #-a always,exit -F path=/usr/libexec/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/libexec/pt_chown -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    #-a always,exit -F path=/usr/libexec/utempter/utempter -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/fping -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/fping6 -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/grub2-set-bootflag -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/mount.cifs -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/netreport -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/pam_extrausers_chkpwd -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/pam-tmpdir-helper -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/postdrop -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/postqueue -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/restorecon -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/semanage -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/setsebool -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/userhelper -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/usernetct -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/usernetctl -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    -a always,exit -F path=/usr/sbin/vlock-main -F perm=x -F auid>=1000 -F auid!=-1 -k privileged
    #
    -w /var/log/btmp -p wa -k session
    -w /var/log/wtmp -p wa -k session
    -w /var/run/utmp -p wa -k session
    # Special files
    -a always,exit -F arch=b32 -S mknod,mknodat -k specialfiles
    -a always,exit -F arch=b64 -S mknod,mknodat -k specialfiles
    # sshd configuration
    -w /etc/ssh/sshd_config -p rwxa -k sshd
    # Kernel modification
    -w /etc/sysctl.conf -p wa -k sysctl
    # Hostname changes
    -a always,exit -F arch=b32 -S sethostname -S setdomainname -k system-locale
    -a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale
    # systemd configuration and tools
    -w /etc/systemd -p wa -k systemd
    -w /lib/systemd -p wa -k systemd
    -w /bin/journalctl -p x -k systemd-tools
    -w /bin/systemctl -p x -k systemd-tools
    # Time modification
    -a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
    -a always,exit -F arch=b32 -S clock_settime -k time-change
    -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
    -a always,exit -F arch=b64 -S clock_settime -k time-change
    -w /etc/localtime -p wa -k time-change
    -w /etc/timezone -p wa -k time-changezone
    # /tmp directories
    -w /tmp -p wxa -k tmp
    -w /var/tmp -p wxa -k tmp
    # User modification
    -w /usr/sbin/adduser -p x -k user-modification
    -w /usr/sbin/useradd -p x -k user-modification
    -w /usr/sbin/usermod -p x -k user-modification
    # Make the configuration immutable
    -e 2
    " > "$CONFIG_AUDITDRULES"
    systemctl restart auditd.service

    sed -i "4i RefuseManualStop=yes" "$CONFIG_AUDITDSERVICE"
    systemctl daemon-reload