Uživatelské nástroje

Nástroje pro tento web


private:poznamky:linux:apache2

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
private:poznamky:linux:apache2 [2025/01/01 19:18] – [OTP ověření] snemecprivate:poznamky:linux:apache2 [2025/04/17 15:00] (aktuální) snemec
Řádek 1: Řádek 1:
 +====== Apache ======
 +
 +===== OTP ověření =====
 +
 +https://www.clearhat.org/post/configure-one-time-password-k-2fa-or-mfa-apache-using-mod-authn-otp-and-freeotp
 +
 +Upravený skript, generuje QR kód, který je použitelný jak pro Apache reverse proxy tak pro Mikrotik VPN
 +
 +Skript ''createOTPuser'' je ve složce ''sbin'' na reverzním proxy. Při generování více uživatelů lze použít vstupní csv soubor ''users.csv''.\\
 +Skript vygeneruje QR png soubor, ''hotp_users.txt'' soubor s údaji pro OTP konfiguraci Apache serveru(/etc/apache2/OTP/users.otp) a soubor ''mikrotik_users.txt'' s údaji pro konfigurace ''User manageru'' v Mikrotiku.\\
 +
 +
 +<code bash createOTP>
 +
 +#!/bin/bash
 +
 +# Kontrola vstupn_ch parametr_
 +if [ "$#" -ne 2 ]; then
 +  echo "Pou_it_: $0 <username> <app_nam"
 +  exit 1
 +fi
 +
 +# Vstupn_ parametry
 +USERNAME="$1"
 +APP_NAME="$2"
 +
 +
 +# Generov_n_ n_hodn_ho kl_~Me v bin_rn_m form_tu
 +#HEX_KEY=$(head -c "$KEY_LENGTH" /dev/urandom | xxd -p | tr -d '\n')
 +HEX_KEY=$( head -c 1024 /dev/urandom | openssl sha1 | awk '{ print $2 }' | head -c 30 )
 +BASE32_KEY=$(echo -n "$HEX_KEY" | base32 | tr -d '=')
 +
 +# Generov_n_ OTP URL
 +OTP_URL=$(genotpurl -k "$HEX_KEY" -L "$USERNAME" -I "$APP_NAME")
 +
 +# Generov_n_ QR k_du
 +OUTPUT_FILE="${USERNAME}.png"
 +qrencode -s 10 -t PNG -o - "$OTP_URL"  -o "$OUTPUT_FILE"
 +
 +# Ukl_d_n_ dat do CSV souboru
 +CSV_FILE="usersOTP.csv"
 +echo "$USERNAME,$HEX_KEY,$BASE32_KEY,$APP_NAME" >> "$CSV_FILE"
 +
 +# Informace o _sp~[_n_m proveden_
 +echo "QR k_d byl ulo_en do: $OUTPUT_FILE"
 +echo "Informace byly p~Yid_ny do: $CSV_FILE"
 +
 +
 +
 +</code>
 +
 +
 +<code>
 +apt install git apache2 apache2-dev build-essential qrencode libssl-dev
 +
 +git clone https://github.com/archiecobbs/mod-authn-otp.git
 +cd mod-authn-otp
 +
 +./autogen.sh
 +./configure && make
 +make install
 +
 +echo "LoadModule authn_otp_module /usr/lib/apache2/modules/mod_authn_otp.so" | tee -a /etc/apache2/mods-available/authn_otp.load
 +
 +# Pro kazdeheho uzivatele - zmente username na aktualniho uzivatele
 +KEY=$( head -c 1024 /dev/urandom | openssl sha1 | awk '{ print $2 }' | head -c 10 )
 +echo "HOTP/T30/6 username - ${KEY}" | tee -a /etc/apache2/OTP/users.otp
 +URL=$(genotpurl -I "GriffTeamProxy" -L "username" -k ${KEY})
 +qrencode -s 10 -t PNG -o - ${URL} -o username_proxy.png
 +
 +
 +
 +chown root:www-data /etc/apache2/OTP/users.otp
 +chmod 644 /etc/apache2/OTP/users.otp
 +
 +#Virtual host config /etc/apache2/sites-available/000-default.conf - příklad pro Home Assistant
 +
 +<VirtualHost *:80>
 +<Location "/">
 +    AuthType basic
 +    AuthName "OTP Protected Area"
 +    AuthBasicProvider OTP
 +    OTPAuthUsersFile "/etc/apache2/OTP/users.otp"
 +    Require valid-user
 +    # other options...
 +</Location>
 +   ServerName has.sweethome.local
 +   ProxyPreserveHost On
 +   #ProxyRequests off
 +   ProxyPass /api/websocket ws://10.199.0.200:8123/api/websocket
 +   ProxyPassReverse /api/websocket ws://10.199.0.200:8123/api/websocket
 +   ProxyPass / http://10.199.0.200:8123/
 +   ProxyPassReverse / http://10.199.0.200:8123/
 +
 +   Header always set X-Frame-Options SAMEORIGIN
 +   Header always set X-XSS-Protection "1; mode=block"
 +   Header always set X-Content-Type-Options nosniff
 +
 +   ErrorLog ${APACHE_LOG_DIR}/homeassistant_error.log
 +   CustomLog ${APACHE_LOG_DIR}/homeassistant_access.log combined
 +</VirtualHost>
 +
 +service apache2 restart
 +
 +</code>
 +
 +
 +Pozor Apache standardně předává autorizační hlavičky, to. zn. pokud backend server podporuje Basic Authentication, tak mu přijde jméno a OTP heslo. Nedojde k ověření a systém se "zacyklí - nezacyklí, ale vypadá to tak".
 +
 +Proto je potřeba přidat do konfigurace host v Apache parametr ''RequestHeader unset Authorization''
 +
 +Příklad konfigurace pro Jira
 +<code>
 +<VirtualHost *:443>
 +<Location "/">
 +    AuthType basic
 +    AuthName "OTP Protected Area"
 +    AuthBasicProvider OTP
 +    OTPAuthUsersFile "/etc/apache2/OTP/users.otp"
 +    Require valid-user
 +    # other options...
 +</Location>
 +                AllowEncodedSlashes On
 +                # JIRA
 +                ServerName jira.tool4dev.com
 +                #ServerAlias jira.hpl.cz jira.griffteam.com jira.griffteam.cz
 +                RewriteEngine On
 +                RewriteCond %{HTTP_HOST} ^jira\.hpl\.cz$ [NC]
 +                RewriteRule ^ https://jira.tool4dev.com%{REQUEST_URI} [R=302,L]
 +                SSLEngine on
 +                SSLProxyEngine on
 +                ProxyPreserveHost on
 +                ProxyPass / https://192.168.10.58/ keepalive=On
 +                ProxyPassReverse / https://192.168.10.58/
 +                # Odstrani halvicku Authoriztion pred odeslanim na backend server
 +                RequestHeader unset Authorization
 +                SSLProxyCheckPeerCN off
 +                SSLCertificateFile  /etc/ssl/certs/jira.hpl.cz.cer
 +                SSLCACertificateFile /etc/ssl/certs/ca.cer
 +                SSLCertificateKeyFile /etc/ssl/private/jira.hpl.cz.key
 +
 +                RequestHeader set X-Forwarded-Proto "https"
 +                RequestHeader set X-Forwarded-Ssl on
 +                #SSLProtocol +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
 +                SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
 +                LogLevel warn
 +                ErrorLog ${APACHE_LOG_DIR}/jira_error.log
 +                CustomLog ${APACHE_LOG_DIR}/jira_access.log combined
 +</VirtualHost>
 +
 +</code>
 +
 +
 +===== Chyba mail, webmail =====
 +Na mailovém serveru přestal fungovat webmail.\\
 +Při pokusu o restart serveru se objevila se následující hláška:\\
 +
 +Restarting web server: apache2(98)Address already in use: make_sock: could not bind to address [::]:443\\
 +
 +
 +Pomohlo zahashování řádků v souboru ports.cfg. V souboru nesmí být vícenásobně použit příkaz Listen pro stejný port.
 +Kde se tam vzaly duplicitní záznamy je otázka? Je možné, že v rámci update balíků Apache.\\
 +
 +NameVirtualHost *:80
 +Listen 80
 +
 +  ### <IfModule mod_ssl.c>
 +  ###     # If you add NameVirtualHost *:443 here, you will also have to change
 +  ###     # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 +  ###     # to <VirtualHost *:443>
 +  ###     # Server Name Indication for SSL named virtual hosts is currently not
 +  ###     # supported by MSIE on Windows XP.
 +  ###     Listen 443
 +  ### </IfModule>
 +  ###
 +  <IfModule mod_gnutls.c>
 +      Listen 443
 +  </IfModule>
 +
  

DokuWiki Appliance - Powered by TurnKey Linux