/* */ Rasspberry PI – Blog Gebert iT – Home

Squid Proxy SSL bump

Raspberry Pi 4 – Squid 4.6 mit SSL installieren

Um SSL in Squid 4.x nutzen zu können, müssen wir ein Debian Paket mit dem
Quelltext erstellen. Und das geht so:

Wir logen uns mit sudo -i als root ein und sparen dabei das Wort beim installieren.

Zuerst aktivieren wir die Source Quellen
von Debian 10 und machen ein Update.

sed -i 's/^#deb-src/deb-src/' /etc/apt/sources.list
apt update

Wir installieren die erforderlichen Pakete um ein deb Paket erstellen zu können.

apt install devscripts build-essential fakeroot libssl1.0-dev debhelper
apt install squid-cgi calamaris squid-langpack libdbi-perl ssl-cert \
 libecap3-dev cdbs libcppunit-dev libcap2-dev libdb-dev libkrb5-dev \
 comerr-dev libldap2-dev libnetfilter-conntrack-dev libpam0g-dev libsasl2-dev

Wir laden den Quellcode von squid herunter und erstellen eine deb Datei.

mkdir /tmp/squid
cd /tmp/squid
apt source squid

Die SSL Funktion von Squid schalten wir frei.

vi squid-4.6/debian/rules
nach DEB_CONFIGURE_EXTRA_FLAGS –mandir=/usr/share/man \ suchen und folgendes eintragen:

--mandir=/usr/share/man \
--with-openssl \
--enable-ssl \
--enable-ssl-crtd \

Das Debian Paket wird erstellt mit folgenden Befehl:

cd /tmp/squid/squid-4.6
dpkg-buildpackage -rfakeroot -b -uc -us

Die erstellten Packete installieren wir
und schützen sie vor einem ungewollten
Update mit apt-mark.

dpkg --install squid-common_4.6*.deb
dpkg --install squid_4.6*.deb
dpkg --install squidclient_4.6*.deb
apt-mark hold squid squid-common squidclient

Wir erstellen unser eigenes SSL Certificate.

cd /etc/squid
mkdir ssl_cert
chown proxy:proxy /etc/squid/ssl_cert
chmod 700 /etc/squid/ssl_cert
cd ssl_cert

openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
openssl x509 -in myCA.pem -outform DER -out myCA.der

myCA.pem in das System von Androiden unter
Sicherheit installieren. Unter Windows wird das Zertifikat in dem Browser installiert. Danach googeln wie das geht. ?

Wir editieren die squid.conf mit vi und suchen nach 3128 und ab da wird folgendes ergänzt:

vi /etc/squid/squid.conf

http_port 3128 ssl-bump \
  cert=/etc/squid/ssl_cert/myCA.pem \
  generate-host-certificates=on 

sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB

acl step1 at_step SslBump1

ssl_bump peek step1
ssl_bump bump all

Die SSL Datenbank erstellen und Rechte setzen mit start von Squid.

/usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
chown proxy:proxy /var/lib/ssl_db
chown proxy:proxy /var/log/squid/
systemctl restart squid

Mögliche Fehler:
dynamic_cert_mem_cache_size=4MB

Trägt man das ein, startet Squid nicht. Es ist sowieso ein default Wert.

Das wars. Viel Spaß mit Squid.

Nextcloud 18 mit Apache2 auf dem Raspberry Pi 4 ohne Fehler installieren.

Nextcloud 18 fehlerlos und automatisch installieren.

# Eure Daten Username,Passwort,Pfad usw eintragen. Wird für
die automatische Installation benötigt. Falls ihr Befehl für Befehl
in die Bash kopiert, müsst ihr die Daten auch Zeile für Zeile in
die bash kopieren und Enter drücken. Ohne dem funktioniert es
nicht, da alles dynamisch zur Selbstanpassung geschrieben wurde.

##############################################################
# MySQL Daten
root_pw=Euer root MySQL Passwort
sql_user=Euer SQL User
sql_user_pw=Euer SQL User Passwort
database=nextcloud # Eure Datenbank Name, die wir erstellen
# Nextcloud Daten
auser=Benutzername
apass=Benutzerpasswort
adir=/var/www/nextcloud # müsste passen 🙂
trust=raspberrypi # müsste passen 🙂
trust1=Euer DynDNS
##############################################################

# mit root anmelden
sudo -i

# PHP Repo hinzufügen
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -

echo "deb https://packages.sury.org/php/ buster main" | tee /etc/apt/sources.list.d/php.list

# Zuerst einmal updaten, da wir das PHP Repo hinzugefügt haben.
apt update -y && apt upgrade -y

# Apache und Mysql installieren

apt install apache2 mariadb-server zip unzip apt-transport-https \
 libmariadb-dev-compat libmariadb-dev libapache2-mod-security2 \
 imagemagick

# PHP 7.3 und benötigte Module installieren

apt install php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl \
  php7.3-zip php7.3-intl libapache2-mod-php7.3 php7.3-mbstring  \
  php7.3-bz2 php7.3-cli php7.3-common php7.3-ssh2 php7.3-sqlite3 \
  php7.3-xml php7.3-json php7.3 php-apcu php-imagick



# Eine Seite für Apache erstellen

cat <<EOF > /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:443>
  ServerName localhost # Ersetzt localhost mit euren dyndns 
  ServerAdmin webmaster@localhost
   
  DocumentRoot $adir
  ProxyErrorOverride on

<If "-f %{SCRIPT_FILENAME}">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
</If>  

  LogLevel warn
  ErrorLog \${APACHE_LOG_DIR}/error.log
  CustomLog \${APACHE_LOG_DIR}/access.log combined

<Directory /var/www>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

Redirect 301 /.well-known/carddav /remote.php/dav
Redirect 301 /.well-known/caldav /remote.php/dav

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; inextcloudludeSubDomains"
  Header always set Referrer-Policy "no-referrer"
</IfModule>

</VirtualHost>
EOF

# Nextcloud Apache Seite aktivieren
a2ensite nextcloud.conf

# Apache module aktivieren
a2enmod headers proxy_fcgi proxy_balancer proxy proxy_http

# Apache neu starten
service apache2 restart

# Wenn ihr dyndns benutzt, letsencrypt SSL installieren
apt install python3-certbot-apache
certbot -d "euer dyndns" --apache

# Apache erneut neu starten
service apache2 restart

# MySQL (MariaDB) vorbereiten
mysql_secure_installation

# MySQL starten
systemctl start mysql

# MySQL Datenbank anlegen
mysql -u root -p$root_pw -e "CREATE DATABASE $database;"

# MySQL User anlegen und die Rechte vergeben

mysql -u root -p$root_pw -e "CREATE USER '$sql_user'@'%' IDENTIFIED BY '$sql_user_pw'; \
	GRANT ALL PRIVILEGES ON $database.* TO '$sql_user'@'localhost';FLUSH PRIVILEGES;"

# Für Nextcloud müssen wir ein paar Einstellungen in der php.ini ändern

sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/7.3/fpm/php.ini

# PHP 7.3 und apache2 neu starten
service php7.3-fpm restart
service apache2 restart

# Pfad festlegen – nicht ändern
ddir=$adir/data
occ=$adir/occ

# Nextcloud herunter laden und entpacken
cd /var/www
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip

# Rechte auf den Webserver setzen
chown -R www-data:www-data /var/www

# Nextcloud automatisch installiere. Es kommt eine Meldung, wenn es erfolgreich war.

su - www-data -s /bin/bash -c "php $occ maintenance:install --database mysql \
 --database-name '$database' --database-user '$sql_user' --database-pass '$sql_user_pw' \
 --admin-user '$auser' --admin-pass '$apass' --data-dir '$ddir'"

# Hostname und evtl DynDNS in den Einstellungen von Nextcloud
# schreiben. Ohne dem habt ihr kein Zugriff auf Nextcloud

sudo -u www-data php $occ config:system:set trusted_domains 0 --value=$trust
sudo -u www-data php $occ config:system:set trusted_domains 0 --value=$trust1
sed -i "s/output_buffering=.*/output_buffering='Off'/" $adir/.user.ini

# Cron aktivieren
sudo -u www-data php $occ background:cron

# Memory Cache anlegen. Ohne dem kommt ein Fehler
sed -i '/);/d' $adir/config/config.php

cat <<EOF >>$adir/config/config.php
'logfile' => '$adir/nextcloud.log',
'logtimezone' => 'Europe/Berlin',
'memcache.local' => '\\OC\\Memcache\\APCu',
);
EOF

# Apache stopen um die Nextcloud Daten zu optimieren. Ist erforderlich.
service apache2 stop
sudo -u www-data php $occ db:add-missing-indices
sudo -u www-data php $occ db:convert-filecache-bigint
sudo -u www-data php $adir/cron.php

# Cron anlegen

(crontab -u www-data -l ; echo "*/5 * * * * php -f $adir/cron.php > /dev/null 2>&1") | crontab -u www-data -

# Apache starten
service apache2 start

# MySQL Einstellungen für Nextcloud

cat <<EOF > /etc/mysql/conf.d/mysql.cnf
[mysql]
innodb_buffer_pool_size=1G
innodb_io_capacity=4000
EOF

# MySQL restart
service mysql restart

# Fertig. Viel Spaß
Die Anleitung wurde so geschrieben, dass man alle Befehle in ein Script
kopieren kann. Einfach die erforderliche Daten (User,Passwort usw)
ergänzen und Script ausführen.

Bekannte Fehler:
[proxy_fcgi:error] AH01071: Got error ‚Primary script unknown‘, referer: ….

Durch die If Abfrage bekommt man die Datei angezeigt, die den
Fehler verursacht hat.Wenn bei euch der Fehler auftritt,
einfach http://eureseite.de/admin aufrufen.

<If "-f %{SCRIPT_FILENAME}">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
</If>

Docker auf Kali Linux 2020.1 aarch64 (arm64) Raspberry 4 installieren

Neuste Dateien von download.docker.com
herunterladen und installieren.
Im Moment ist das aktuell:

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce-cli_19.03.5~3-0~debian-buster_arm64.deb
dpkg -i docker-ce-cli_19.03.5~3-0~debian-buster_arm64.deb

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb
dpkg -i containerd.io_1.2.6-3_arm64.deb

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce_19.03.5~3-0~debian-buster_arm64.deb
dpkg -i docker-ce_19.03.5~3-0~debian-buster_arm64.deb

Die Reihenfolge der Installation ist einzuhalten, ansonsten kommt ein Fehler.

Docker beim Systemstart starten:
systemctl enable docker

Docker manuell starten:
systemctl start docker

Überprüfen ob docker läuft:
systemctl status docker

Für zukünftige Updates:

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
echo 'deb [arch=arm64] https://download.docker.com/linux/debian buster stable' > /etc/apt/sources.list.d/docker.list

Ob das mit den automatischen Updates mit apt update klappt, konnten wir leider noch nicht testen.

Nach dem reboot das sshkey Passwort nicht erneut eingeben

Jetzt Fragen sich vielleicht einige: Warum nicht ein sshkey ohne
Passwort erstellen?
Das wäre auch eine Möglichkeit, aber der Computer ist mit einem
Passwort geschützt und beim Ausbau der Festplatte, bräuchte man
nur den sshkey kopieren und würde auf die Server kommen.

Das ganze läuft auf einen Rasspberry PI 4.

Folgende Fehler traten auf:

Pseudo-terminal will not be allocated because stdin is
not a terminal.

Der Fehler wird durch -tt wie im Script angegeben behoben.

Permission denied (publickey,password)
Obwohl ein sshkey beim ssh Befehl mit angegeben wurde, hat crontab diesen Fehler verursacht. Crontab finden das mit ssh-add gespeicherte Passwort nicht. In der Shell funktionierte das Script.
Mit keychain und ein Perl Script läuft auch cron.

Error: Problem adding; giving up
Das Passwort vom sshkey wird vom crontab nicht gefunden.
Abhilfe schafft keychain.

Warning: Unable to extract fingerprint from keyfile /home/pi/.ssh/server.id_rsa.pub, skipping
Der Pfad zum sshkey stimmt nicht.

Installation und Konfiguration

Benötigte Pakete installieren
sudo apt install keychain libpam-ssh-agent-auth

Mit diesem Befehl wird der ssh-agent gestartet und euer Passwort für den sshkey gespeichert.
Der sshkey liegt im Ordner ~/.ssh/. zb server.id_rsa
Es muss der genaue Name vom sskey angegeben werden.

eval `keychain --agents ssh --eval server.id_rsa`

In diesem Beispiel werden wir auf dem PI ein cronjob anlegen,
der jeden Monat ausgeführt werden soll.
Viele Webhoster bieten kein Cronjob an, also basteln wir uns
selbst einen. 🙂

Mit dem User pi einen cronjob anlegen.

crontab -e
# Jeden Monat am 30 um 23:59
 59 23 30 * * bash ~/scripts/rotate.sh

Das Verzeichnis scripts erstellen.
mkdir ~/scripts

Das Script findagent.pl in den Ordner ~/scripts legen.
chmod +x ~/scripts/findagent.pl

Das Perl Script findagent.pl ist nicht von uns. Die Quelle steht im Script.

[bash]
#!/usr/bin/perl -w

# https://serverfault.com/questions/92683/execute-rsync-command-over-ssh-with-an-ssh-agent-via-crontab

# inside your cron script add the line:
# eval `{path to script}/findagent.pl`

use strict;
my $agents = `ls -tr /tmp/ssh-*/*`;
my @agents;
(@agents) = split/\n/,$agents;

my $sshpid = `ps aux|grep ssh-agent|grep -v grep|awk ‚{print \$2}’|head -1`;
chomp($sshpid);
my @parts;
for (@agents) {
chomp($_);
if (!$_) { next; }
my $agentfile = $_;
(@parts) = split/\./,$agentfile;
my $masterpid = `ps aux|grep $parts[1]|grep enlightenment`;
if ($agentfile =~ m/$parts[1]/) {
my $line1 = "SSH_AUTH_SOCK=" . $agentfile . ‚; export SSH_AUTH_SOCK‘;
my $line2 = ‚SSH_AGENT_PID=‘ . $sshpid . ‚; export SSH_AGENT_PID;‘;
my $line3 = ‚echo Agent pid ‚ . $sshpid . ‚;‘;
print("$line1\n$line2\n$line3\n");
last;
} else {
next;
}
}
[/bash]

Script rotate.sh mit folgendem Inhalt erstellen.
vi ~/scripts/rotate.sh

#!/bin/bash
eval `$HOME/scripts/findagent.pl`
/usr/bin/ssh -i /home/pi/.ssh/server.id_rsa user@euer_hoster.de -tt "/web_scripts/web.sh"

 
chmod +x ~/scripts/rotate.sh

Per ssh auf euren Webserver.
ssh user@euer_hoster.de

Ordner anlegen.
mkdir -p /web_scripts/log_files

Das Script web.sh auf eurem Webspace mit folgenden Inhalt füllen.
vi /web_scripts/web.sh

#!/bin/bash
mv /httpdocs/verkauf.db /web_scripts/log_files/$(date "+%y.%m.%d")_verkauf.db
touch /httpdocs/verkauf.db

 
chmod +x /web_scripts/web.sh

Ab jetzt geht es auf dem PI wieder weiter.

Nach einem reboot vom PI soll das sshkey Passwort nicht erneut
eingegeben werden. Wie das funktioniert folgt nun.

sudo cp ~/.ssh/known_hosts /etc/ssh/sudo_authorized_keys
echo "Defaults env_keep += SSH_AUTH_SOCK" | sudo tee /etc/sudoers.d/00_SSH_AUTH_OK
sudo chmod 0440 /etc/sudoers.d/00_SSH_AUTH_OK

Die Datei /etc/pam.d/sudo muss auf genau das folgende
geändert werden.
sudo vi /etc/pam.d/sudo

#%PAM-1.0

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

session required pam_permit.so
session required pam_limits.so

sudo reboot
Nach dem reboot benötigt ssh nicht mehr das Passwort für den sshkey.
ENDE

Wollt ihr lieber nach jedem reboot eures PI für die ssh Verbindung das
Passwort eingeben? Auch das geht und zwar:

vi ~/.bashrc

eval `keychain --eval --agents ssh server.id_rsa`

Wichtig: Ab jetzt geht es auf dem PI weiter nicht ausführen.
Falls ihr das schon gemacht habt, einfach die Änderung wieder ändern.

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock