{{- if eq .host.distro.family "linux" -}} #!/usr/bin/env bash # @file Endlessh Configuration # @brief Applies the Endlessh configuration and starts the service on Linux systems # @description # Endlessh is a endless SSH tarpit that slowly shows an infinitely long SSH welcome banner on the default # SSH port. It is intended to break unsophisticated malware that targets SSH. # # If the `endlessh` program is installed, this script applies the configuration stored in `home/private_dot_ssh/endlessh/config.tmpl` # (that unpacks with Chezmoi to `~/.ssh/endlessh/config`) to the system location and then starts the service. # # **Note:** _This script runs under the assumption that the actual SSH port which is defined in `home/.chezmoidata.yaml` # is assigned to a non-standard port like 2214. This allows the default port to be used for `endlessh`._ # # ## Links # # * [Endlessh GitHub repository](https://github.com/skeeto/endlessh) # * [Endlessh configuration](https://github.com/megabyte-labs/install.doctor/blob/master/home/private_dot_ssh/endlessh/config.tmpl) # @file Endlessh Configuration # @brief This script configures Endlessh by applying the configuration stored in `${XDG_DATA_HOME:-$HOME/.ssh}/endlessh/config` if the `endlessh` application is available # @description # This script applies the Endlessh configuration stored in `${XDG_DATA_HOME:-$HOME/.ssh}/endlessh/config` if endlessh is installed. # Endlessh is and SSH Tarpit configured to listen for incoming connection on the given port and respond slowly with a random, endless SSH banner. To protect the real server, # configure Endlessh to listen on the default SSH port (22), while the real server listens to a different port. # # ## Configuration Variables # # The following chart details the input variable(s) that are used to determine the configuration of the endlessh: # # | Variable | Description | # |-----------------|------------------------------------------------------------| # | `endlesshPort` | The port that endlessh listens to for incoming connections | # # ## Links # # * [Default Endlessh configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/private_dot_ssh/endlessh/config.tmpl) # * [Secrets / Environment variables documentation](https://install.doctor/docs/customization/secrets) # endlessh config hash: {{- include (joinPath .host.home ".ssh" "endlessh" "config") | sha256sum -}} {{ includeTemplate "universal/profile" }} {{ includeTemplate "universal/logg" }} ### Configures endlessh service function configureEndlessh() { ### Update the service configuration file logg info 'Updating `endlessh` service configuration file' sudo sed -i 's/^.*#AmbientCapabilities=CAP_NET_BIND_SERVICE/AmbientCapabilities=CAP_NET_BIND_SERVICE/' /usr/lib/systemd/system/endlessh.service sudo sed -i 's/^.*PrivateUsers=true/#PrivateUsers=true/' /usr/lib/systemd/system/endlessh.service logg info 'Reloading systemd' sudo systemctl daemon-reload ### Update capabilities of `endlessh` logg info 'Updating capabilities of `endlessh`' sudo setcap 'cap_net_bind_service=+ep' /usr/bin/endlessh ### Restart / enable Endlessh logg info 'Enabling the `endlessh` service' sudo systemctl enable endlessh logg info 'Restarting the `endlessh` service' sudo systemctl restart endlessh } ### Update /etc/endlessh/config if environment is not WSL if [[ ! "$(test -d proc && grep Microsoft /proc/version > /dev/null)" ]]; then if command -v endlessh > /dev/null; then if [ -d /etc/endlessh ]; then logg info 'Copying ~/.ssh/endlessh/config to /etc/endlessh/config' sudo cp -f "$HOME/.ssh/endlessh/config" /etc/endlessh/config configureEndlessh || CONFIGURE_EXIT_CODE=$? if [ -n "$CONFIGURE_EXIT_CODE" ]; then logg error 'Configuring `endlessh` service failed' && exit 1 else logg success 'Successfully configured `endlessh` service' fi elif [ -f /etc/endlessh.conf ]; then logg info 'Copying ~/.ssh/endlessh/config to /etc/endlessh.conf' sudo cp -f "$HOME/.ssh/endlessh/config" /etc/endlessh.conf configureEndlessh || CONFIGURE_EXIT_CODE=$? if [ -n "$CONFIGURE_EXIT_CODE" ]; then logg error 'Configuring `endlessh` service failed' && exit 1 else logg success 'Successfully configured `endlessh` service' fi else logg warn 'Neither the /etc/endlessh folder nor the /etc/endlessh.conf file exist' fi else logg info 'Skipping Endlessh configuration because the `endlessh` executable is not available in the PATH' fi else logg info 'Skipping Endlessh configuration since environment is WSL' fi {{ end -}}