Preconfigure fail2ban and core security services by default
This commit is contained in:
@@ -2,11 +2,14 @@
|
|||||||
|
|
||||||
Standardisierter Installationsprozess fuer neue Ubuntu-LXC-Container.
|
Standardisierter Installationsprozess fuer neue Ubuntu-LXC-Container.
|
||||||
|
|
||||||
Installiert unter anderem:
|
Installiert und **direkt vorkonfiguriert**:
|
||||||
- Security-Basis: `ufw`, `fail2ban`, `unattended-upgrades`, `auditd`
|
- `fail2ban`: SSH/SSHD-DDoS + Recidive-Jail, UFW-Ban-Action
|
||||||
- Admin-Tools: `git`, `curl`, `jq`, `tmux`, `htop`
|
- `ufw`: default deny incoming, allow outgoing, SSH-Rate-Limit, 80/443 erlaubt
|
||||||
- Runtime: `nodejs`, `npm`
|
- `unattended-upgrades`: taegliche Security-Updates aktiv
|
||||||
- CLI: `@openai/codex`
|
- `openssh-server`: Basishardening via `sshd_config.d`
|
||||||
|
- `auditd`: grundlegende Audit-Regeln fuer sensible Dateien
|
||||||
|
- `sysctl`: Kernel/Netzwerk-Hardening-Basis
|
||||||
|
- `nodejs`, `npm`, `@openai/codex`
|
||||||
|
|
||||||
## Standardprozess nach Download
|
## Standardprozess nach Download
|
||||||
|
|
||||||
@@ -24,12 +27,24 @@ sudo ln -sf "$(pwd)/bin/sicherheit-install" /usr/local/bin/sicherheit-install
|
|||||||
sudo sicherheit-install
|
sudo sicherheit-install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Wichtige Konfigurationen
|
||||||
|
|
||||||
|
- `config/fail2ban/jail.local`
|
||||||
|
- `config/ufw/after.rules`
|
||||||
|
- `config/unattended-upgrades/20auto-upgrades`
|
||||||
|
- `config/unattended-upgrades/50unattended-upgrades`
|
||||||
|
- `config/ssh/sshd_config.d-sicherheit.conf`
|
||||||
|
- `config/sysctl/99-sicherheit.conf`
|
||||||
|
- `config/auditd/hardening.rules`
|
||||||
|
|
||||||
## Pruefen
|
## Pruefen
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
fail2ban-client status
|
fail2ban-client status
|
||||||
|
fail2ban-client status sshd
|
||||||
ufw status verbose
|
ufw status verbose
|
||||||
systemctl status unattended-upgrades --no-pager
|
systemctl status unattended-upgrades --no-pager
|
||||||
|
sshd -t
|
||||||
node --version
|
node --version
|
||||||
npm --version
|
npm --version
|
||||||
codex --help
|
codex --help
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
## Managed by sicherheit-install
|
||||||
|
-w /etc/passwd -p wa -k identity
|
||||||
|
-w /etc/group -p wa -k identity
|
||||||
|
-w /etc/shadow -p wa -k identity
|
||||||
|
-w /etc/sudoers -p wa -k scope
|
||||||
|
-w /var/log/auth.log -p wa -k authlog
|
||||||
@@ -1,18 +1,35 @@
|
|||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
ignoreip = 127.0.0.1/8 ::1
|
ignoreip = 127.0.0.1/8 ::1
|
||||||
bantime = 1h
|
bantime = 1h
|
||||||
findtime = 10m
|
findtime = 10m
|
||||||
maxretry = 5
|
maxretry = 5
|
||||||
backend = systemd
|
backend = systemd
|
||||||
|
banaction = ufw
|
||||||
|
banaction_allports = ufw
|
||||||
|
|
||||||
|
action = %(action_mwl)s
|
||||||
|
|
||||||
[sshd]
|
[sshd]
|
||||||
enabled = true
|
enabled = true
|
||||||
port = ssh
|
mode = aggressive
|
||||||
logpath = %(sshd_log)s
|
port = ssh
|
||||||
maxretry = 5
|
logpath = %(sshd_log)s
|
||||||
|
maxretry = 4
|
||||||
|
findtime = 10m
|
||||||
|
bantime = 4h
|
||||||
|
|
||||||
[sshd-ddos]
|
[sshd-ddos]
|
||||||
enabled = true
|
enabled = true
|
||||||
port = ssh
|
port = ssh
|
||||||
logpath = %(sshd_log)s
|
logpath = %(sshd_log)s
|
||||||
maxretry = 3
|
maxretry = 3
|
||||||
|
findtime = 10m
|
||||||
|
bantime = 8h
|
||||||
|
|
||||||
|
[recidive]
|
||||||
|
enabled = true
|
||||||
|
logpath = /var/log/fail2ban.log
|
||||||
|
banaction = ufw-allports
|
||||||
|
findtime = 1d
|
||||||
|
bantime = 7d
|
||||||
|
maxretry = 5
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Managed by sicherheit-install
|
||||||
|
Protocol 2
|
||||||
|
PermitRootLogin prohibit-password
|
||||||
|
PasswordAuthentication no
|
||||||
|
PubkeyAuthentication yes
|
||||||
|
PermitEmptyPasswords no
|
||||||
|
X11Forwarding no
|
||||||
|
ClientAliveInterval 300
|
||||||
|
ClientAliveCountMax 2
|
||||||
|
MaxAuthTries 4
|
||||||
|
MaxSessions 10
|
||||||
|
LoginGraceTime 30
|
||||||
|
AllowTcpForwarding no
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Managed by sicherheit-install
|
||||||
|
net.ipv4.tcp_syncookies = 1
|
||||||
|
net.ipv4.conf.all.rp_filter = 1
|
||||||
|
net.ipv4.conf.default.rp_filter = 1
|
||||||
|
net.ipv4.conf.all.accept_redirects = 0
|
||||||
|
net.ipv4.conf.default.accept_redirects = 0
|
||||||
|
net.ipv4.conf.all.send_redirects = 0
|
||||||
|
net.ipv4.conf.default.send_redirects = 0
|
||||||
|
net.ipv4.icmp_echo_ignore_broadcasts = 1
|
||||||
|
kernel.randomize_va_space = 2
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Managed by sicherheit-install
|
||||||
|
*filter
|
||||||
|
:ufw-after-input - [0:0]
|
||||||
|
:ufw-after-output - [0:0]
|
||||||
|
:ufw-after-forward - [0:0]
|
||||||
|
|
||||||
|
# Drop invalid packets early
|
||||||
|
-A ufw-after-input -m conntrack --ctstate INVALID -j DROP
|
||||||
|
|
||||||
|
COMMIT
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
APT::Periodic::Update-Package-Lists "1";
|
||||||
|
APT::Periodic::Download-Upgradeable-Packages "1";
|
||||||
|
APT::Periodic::AutocleanInterval "7";
|
||||||
|
APT::Periodic::Unattended-Upgrade "1";
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Unattended-Upgrade::Allowed-Origins {
|
||||||
|
"${distro_id}:${distro_codename}";
|
||||||
|
"${distro_id}:${distro_codename}-security";
|
||||||
|
"${distro_id}ESMApps:${distro_codename}-apps-security";
|
||||||
|
"${distro_id}ESM:${distro_codename}-infra-security";
|
||||||
|
};
|
||||||
|
|
||||||
|
Unattended-Upgrade::Remove-Unused-Dependencies "true";
|
||||||
|
Unattended-Upgrade::Automatic-Reboot "false";
|
||||||
@@ -30,45 +30,67 @@ APT_PACKAGES=(
|
|||||||
auditd
|
auditd
|
||||||
rsyslog
|
rsyslog
|
||||||
logrotate
|
logrotate
|
||||||
|
openssh-server
|
||||||
)
|
)
|
||||||
|
|
||||||
NODE_MAJOR="20"
|
NODE_MAJOR="20"
|
||||||
CODEX_NPM_PACKAGE="@openai/codex"
|
CODEX_NPM_PACKAGE="@openai/codex"
|
||||||
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
CONFIG_DIR="${SCRIPT_DIR}/../config"
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
echo "[sicherheit-install] $*"
|
echo "[sicherheit-install] $*"
|
||||||
}
|
}
|
||||||
|
|
||||||
log "1/8 Paketindex aktualisieren"
|
copy_cfg() {
|
||||||
|
local src="$1"
|
||||||
|
local dst="$2"
|
||||||
|
if [[ -f "${src}" ]]; then
|
||||||
|
install -D -m 0644 "${src}" "${dst}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
log "1/10 Paketindex aktualisieren"
|
||||||
apt-get update -y
|
apt-get update -y
|
||||||
|
|
||||||
log "2/8 Basispakete installieren"
|
log "2/10 Basispakete installieren"
|
||||||
apt-get install -y "${APT_PACKAGES[@]}"
|
apt-get install -y "${APT_PACKAGES[@]}"
|
||||||
|
|
||||||
log "3/8 Automatische Sicherheitsupdates aktivieren"
|
log "3/10 Unattended-Upgrades konfigurieren"
|
||||||
|
copy_cfg "${CONFIG_DIR}/unattended-upgrades/20auto-upgrades" "/etc/apt/apt.conf.d/20auto-upgrades"
|
||||||
|
copy_cfg "${CONFIG_DIR}/unattended-upgrades/50unattended-upgrades" "/etc/apt/apt.conf.d/50unattended-upgrades"
|
||||||
dpkg-reconfigure -f noninteractive unattended-upgrades || true
|
dpkg-reconfigure -f noninteractive unattended-upgrades || true
|
||||||
cat > /etc/apt/apt.conf.d/20auto-upgrades <<'AUTOU'
|
|
||||||
APT::Periodic::Update-Package-Lists "1";
|
|
||||||
APT::Periodic::Download-Upgradeable-Packages "1";
|
|
||||||
APT::Periodic::AutocleanInterval "7";
|
|
||||||
APT::Periodic::Unattended-Upgrade "1";
|
|
||||||
AUTOU
|
|
||||||
|
|
||||||
log "4/8 fail2ban konfigurieren"
|
log "4/10 fail2ban vorkonfigurieren"
|
||||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
copy_cfg "${CONFIG_DIR}/fail2ban/jail.local" "/etc/fail2ban/jail.local"
|
||||||
if [[ -f "${SCRIPT_DIR}/../config/fail2ban/jail.local" ]]; then
|
|
||||||
install -m 0644 "${SCRIPT_DIR}/../config/fail2ban/jail.local" /etc/fail2ban/jail.local
|
|
||||||
fi
|
|
||||||
systemctl enable fail2ban || true
|
systemctl enable fail2ban || true
|
||||||
systemctl restart fail2ban || true
|
systemctl restart fail2ban || true
|
||||||
|
|
||||||
log "5/8 UFW Basisregeln setzen"
|
log "5/10 UFW vorkonfigurieren"
|
||||||
ufw allow OpenSSH || true
|
copy_cfg "${CONFIG_DIR}/ufw/after.rules" "/etc/ufw/after.rules"
|
||||||
|
ufw default deny incoming || true
|
||||||
|
ufw default allow outgoing || true
|
||||||
|
ufw logging medium || true
|
||||||
|
ufw limit OpenSSH || true
|
||||||
ufw allow 80/tcp || true
|
ufw allow 80/tcp || true
|
||||||
ufw allow 443/tcp || true
|
ufw allow 443/tcp || true
|
||||||
ufw --force enable || true
|
ufw --force enable || true
|
||||||
|
|
||||||
log "6/8 Node.js ${NODE_MAJOR} installieren"
|
log "6/10 SSH-Basishardening setzen"
|
||||||
|
copy_cfg "${CONFIG_DIR}/ssh/sshd_config.d-sicherheit.conf" "/etc/ssh/sshd_config.d/99-sicherheit.conf"
|
||||||
|
sshd -t && systemctl restart ssh || true
|
||||||
|
|
||||||
|
log "7/10 sysctl Hardening setzen"
|
||||||
|
copy_cfg "${CONFIG_DIR}/sysctl/99-sicherheit.conf" "/etc/sysctl.d/99-sicherheit.conf"
|
||||||
|
sysctl --system || true
|
||||||
|
|
||||||
|
log "8/10 auditd Regeln setzen"
|
||||||
|
copy_cfg "${CONFIG_DIR}/auditd/hardening.rules" "/etc/audit/rules.d/hardening.rules"
|
||||||
|
augenrules --load || true
|
||||||
|
systemctl enable auditd || true
|
||||||
|
systemctl restart auditd || true
|
||||||
|
|
||||||
|
log "9/10 Node.js ${NODE_MAJOR} installieren"
|
||||||
if ! command -v node >/dev/null 2>&1; then
|
if ! command -v node >/dev/null 2>&1; then
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
@@ -77,17 +99,15 @@ if ! command -v node >/dev/null 2>&1; then
|
|||||||
apt-get install -y nodejs
|
apt-get install -y nodejs
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "7/8 npm aktualisieren und Codex installieren"
|
log "10/10 npm aktualisieren und Codex installieren"
|
||||||
npm install -g npm@latest
|
npm install -g npm@latest
|
||||||
npm install -g "${CODEX_NPM_PACKAGE}"
|
npm install -g "${CODEX_NPM_PACKAGE}"
|
||||||
|
|
||||||
log "8/8 Dienste aktivieren"
|
|
||||||
systemctl enable unattended-upgrades || true
|
systemctl enable unattended-upgrades || true
|
||||||
systemctl restart unattended-upgrades || true
|
systemctl restart unattended-upgrades || true
|
||||||
systemctl enable auditd || true
|
|
||||||
systemctl restart auditd || true
|
|
||||||
|
|
||||||
log "Install abgeschlossen"
|
log "Install abgeschlossen"
|
||||||
node --version || true
|
node --version || true
|
||||||
npm --version || true
|
npm --version || true
|
||||||
fail2ban-client status || true
|
fail2ban-client status || true
|
||||||
|
ufw status verbose || true
|
||||||
|
|||||||
Reference in New Issue
Block a user