====== 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.\\
#!/bin/bash
# Kontrola vstupn_ch parametr_
if [ "$#" -ne 2 ]; then
echo "Pou_it_: $0 > "$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"
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
AuthType basic
AuthName "OTP Protected Area"
AuthBasicProvider OTP
OTPAuthUsersFile "/etc/apache2/OTP/users.otp"
Require valid-user
# other options...
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
service apache2 restart
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
AuthType basic
AuthName "OTP Protected Area"
AuthBasicProvider OTP
OTPAuthUsersFile "/etc/apache2/OTP/users.otp"
Require valid-user
# other options...
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
===== 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
###
### # If you add NameVirtualHost *:443 here, you will also have to change
### # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
### # to
### # Server Name Indication for SSL named virtual hosts is currently not
### # supported by MSIE on Windows XP.
### Listen 443
###
###
Listen 443