Linux systemd backup ved shutdown med duplicity

 

Filnavn: /etc/systemd/system/run_backup.service
——
[Unit]
Description=run /root/run_backup.sh
Before=shutdown.target reboot.target

[Service]
ExecStart=/bin/true
ExecStop=/root/run_backup.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
——

Filnavn: /root/run_backup.sh
——
#!/usr/bin/bash

/usr/bin/duplicity \
–volsize 100 \
–no-encryption \
–include ‘/etc’ \
–include ‘/root/notater’ \
–exclude ‘**’ / \
-v5 \
file:///z/backup >>/root/.run_backup_history.log
——

For å aktivere, kjør “chmod +x /root/run_backup.sh” og “systemctl enable run_backup.service”

Restart maskin for å teste, merk at første kjøring så kan ta litt tid avhengig av hvor mye som skal kjøres backup av, deretter hjelper duplicity deg med incremental(lagre endringer) som går raskt. Og jo, har du ikke duplicity installert så apt install duplicity. Modifiser skript etter behov og ønske.

 

Sikkerhetskopi av BAS21 databasefil til jottacloud

 

Problem/scenario:
Jottacloud har automatisk exclude på et par mapper og filer. Kan lese mer om dette på https://docs.jottacloud.com/en/articles/1292896-which-filetypes-are-excluded-from-backup-and-sync-by-default

Løsning:
Manuelt velge å fjerne exclude på nettopp de mapper/filer du ønsker at den skal ta med seg likevel.

Kommentar:
Merk at det filene som er under din profil, ikke program files, som man må kjøre backup av.

 

// Skrevet 6. sep. 2019.

Docker macvlan link

Forslag på hvordan man får Docker til å prate på samme nettverket, bruke IPer på vanlige nettverket/LAN, og ha forbindelse internt i tillegg som er kjent for å være noe spesielt.

Opprette eget docker-nettverk som kobles opp mot nettverket, sett gjerne en begrensning på hvilke IPer som skal tillates som i eks her “/27″(10.0.0.128-158).

docker network create -d macvlan \
--subnet=10.0.0.0/24 \
--gateway=10.0.0.1 \
--ip-range=10.0.0.128/27 \
--aux-address 'host=10.0.0.128' \
-o parent=ens32 \
mynet

For at lokale docker prosesser, inkl maskin dette kjører på, skal få lov å “prate sammen” så må man sette opp en link.

ip link add mynet-shim link ens32 type macvlan mode bridge
ip addr add 10.0.0.128/32 dev mynet-shim
ip link set mynet-shim up
ip route add 10.0.0.128/27 dev mynet-shim

Merk at docker-nettverket vil lagres, “set and forget”. Mens linkingene av nettverkene må gjøres for hver gang maskin booter, anbefaler at skrives inn i noe startup-skript.

Etter dette så er det å ta det i bruk, spesifiser gjerne IP for å være nøye;

docker run --name mysql -e MYSQL_ROOT_PASSWORD='Hemmlig2019' --network=mynet --ip=10.0.0.129 -d mariadb

Om du er noe usikker på hva som skjedd, så docker network inspect mynet, docker inspect mysql eller hva du kjører, så finner du fort ut av det : )

 

Borg via ssh med tunnel

Borg brukes gjerne for å lagre kopier/backup av mapper og gjerne mer, men den brukes lokalt.

Så hvordan kjører man da denne “fra en boks for å hente fra annen boks” ? Og uten å åpne i brannmur ? Man kan selvsagt bruke sshfs for å mount ekstern filsystem på lokal boks.

Men la oss se på en litt mer fornuftig taktikk, bruk av tunnel startet fra lokale boksen over på eksterne og kjøre kommandoen der for å så bruke tunnelen tilbake(unngå å åpne i brannmur) mht selve lagringen.

root@backup:~# cat borg_eksternlinux.sh

ssh -R 2022:127.0.0.1:22 eksternlinux.noe -C \
‘borg create ssh://root@127.0.0.1:2022/stor/borg/linux::eksternlinux.noe_{now:%Y%m%d%H%M%S} / –exclude-from /root/.borgexclude –stats ‘

 

Anbefaler selvsagt å bruke ssh-nøkler for å unngå bruk av passord. Samt bruk av “vanlig bruker”, ikke root.

 

Enkel backup med bruk av tar og rsync, kopi av dataene (linux)

Hvordan bruke tar for å opprette “incremental” backups for overføring til annen server som sikkerhetskopi ?

På serveren det gjelder du ønsker å kjøre dette, “b1.sh” som kaller denne selv.

#!/bin/sh

######

# bruk av tar for incremental backup,
# ./b1.sh arkiv /pathtobackup

#####

if [ -z $2 ]; then echo "./b1.sh arkiv mappe" ;exit ;fi

fil="$1"
sti="$2"

if [ -f $1\.snar ] ;then
dato=$(date +%Y%m%d%H%M%S) ; echo $dato
tar --create \
  --file=$fil\_$dato.tgz \
  --listed-incremental=$fil\.snar \
  --gzip \
  --verbose \
  $sti >$fil\_$dato.log
else
tar --create \
  --verbose \
  --file=$fil\_main.tgz \
  --listed-incremental=$fil\.snar \
  --gzip \
  $sti >$fil\_main.log
fi

Forslag til cron (cron brukes for å kjøre kommandoer på bestemte tider i Linux)

root@localhost:/var/minmappe/bkup# cat cron_b1
#!/bin/sh

cd /var/minmappe/bkup/


echo etc   ;./b1.sh b1/etc /etc
echo www   ;./b1.sh b1/www /var/www
echo log   ;./b1.sh b1/log /var/log
echo vmail ;./b1.sh b1/vmail /var/vmail
echo mysql ;./b1.sh b1/mysql /var/lib/mysql
echo root  ;./b1.sh b1/root /root

echo DONE

En vanlig WD NAS eller hva enn som måtte ønskes brukt kan brukes for å hente dataene. Tips; Opprett “authorized_keys” for automatikk, slik at unngår bruk av passord.

nas:/DataVolume/shares/b1# cat laosshentedataene.no.sh
rsync -arv -e ssh root@server.mittdomene.no:/var/minmappe/bkup/b1/* /DataVolume/shares/b1/minmappe.no/

 

Apache proxy til annen port internt (linux)

Noen ganger ønsker man å kunne ta trafikk inn på en server som skal til en annen port, basert på domenenavn. Dette gjelder feks om har en spesiell løsning som krever dette. I dette eksemplet så sender da trafikken, inkl avsnitt for ssl, til port 801 uavhengig, så lenge domenenavnet stemmer.

apache_domenedetgjelder.conf (/etc/apache2/sites-enabled/)

<VirtualHost *:80>
        ServerAdmin   kenneth@ivarsson.me
        ServerName    domeneendetgjelder.no
        ServerAlias   domeneendetgjelder.no

        RewriteEngine On
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

        ProxyRequests Off
        #ProxyPass    / http://localhost:8080/
        <Location />
            ProxyPreserveHost On
            ProxyPass         http://127.0.0.1:801/
            ProxyPassReverse  http://127.0.0.1:801/
        </Location>
</VirtualHost>


<VirtualHost *:443>
        ServerAdmin   kenneth@ivarsson.me
        ServerName    domenedetgjelder.no
        ServerAlias   domenedetgjelder.no
        ProxyRequests Off
        #ProxyPass    / http://localhost:8080/
        <Location />
            ProxyPreserveHost On
            ProxyPass         http://127.0.0.1:801/
            ProxyPassReverse  http://127.0.0.1:801/
        </Location>
    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/domenedetgjelder.no/cert.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/domenedetgjelder.no/privkey.pem"
</VirtualHost>

 

Docker installasjon (linux debian)

 

apt-get update && apt upgrade -y

apt-get install -y sudo apt-transport-https ca-certificates curl gnupg2 software-properties-common

curl -fsSL https://download.docker.com/linux/debian/gpg |apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

apt-get update
apt-get install -y docker-ce
apt-cache madison docker-ce

Postfix cleanup (linux)

echo domenedetgjelder.no

mailq|awk ' /^[0-9A-F][0-9A-F]*.*domenedetgjelder.no$/ {print $1}'|tr -d '*'| xargs -rn1 postsuper -d


echo MAILER-DAEMON

mailq|awk ' /^[0-9A-F][0-9A-F]*.*MAILER-DAEMON$/ {print $1}'|tr -d '*'| xargs -rn1 postsuper -d

Backup med ZFS som lagring (linux)

Skript for kopi av ekstern server, med versjonskontroll og lagring til tredjepart-sted.

Hensikten er å ha en oppdatert kopi av ekstern server lokalt for raskt å kunne kjøre “restore” av alt fra enkeltfiler til større mengder data, men da med “snapshots” som gir muligheten for versjonskontroll.

For å kjøre dette trenger man å installere zfs og rsync(server og klient), fordel å ha opprettet en “authorized_keys” fra backupserveren på klientserveren for å unngå bruk av passord. Samt opprette en “nøkkel”(hva som helst av data) som brukes mht kryptering (vi vil ikke at om noen får tak i eksterne kopien, at de også får tak i dataene!).

 

zfs-mappe som brukt (zfs create ..)

root@bkup:~# zfs list
NAME                                USED  AVAIL  REFER  MOUNTPOINT
z                                  42.9G  51.1G   256K  /z
z/servernavn.no                    2.32G  51.1G  2.32G  /servernavn.no

bkup.exclude (eksempel)

/z
/dev
/proc
/tmp
/nfs
/sys
/run
/var/lib/amavis/virusmails
/var/backup
/var/spool/squid
/var/www/clients/client2/web2/tmp
/var/www/clients/client2/web2/web/var/cache
*.bak
*.rar
*.zip
*.exe
swap.dsk
disk*.zfs

bkup_servernavn.no (hent med rsync)

NAVN=servernavn.no
rsync=/usr/bin/rsync
zfs=/sbin/zfs

if [ "`cat /root/.bkup_state`" == "1" ]
  then echo "BACKUP IS RUNNING FROM BEFORE !" ; exit 1;
  fi

echo "1" >/root/.bkup_state

$rsync \
  --progress --stats --compress --recursive --times --perms --links --delete \
  --checksum --exclude-from '/root/bkup.exclude' \
  $NAVN:/* /z/$NAVN/ \
   |grep -v "skipping non-regular"

echo "";
dato=$(date +%Y%m%d%H%M%S) ;echo -n z/$NAVN@$dato
$zfs snapshot z/$NAVN@$dato ;echo "  - snap done"
echo "";

echo "0" >/root/.bkup_state

zfs_send_nas (opprett ekstern kopi)

root@bkup:~# cat zfs_send_nas
clear

echo
echo
echo -n "Sleeping for 1sec "; for i in $(seq 1 9); do echo -n "."; sleep 0.1; done ;echo "done!"
echo

dato=$(date +%Y%m%d%H%M%S)

if [ "$1" == "" ] ;then echo "Hay, you gotta search for something.." ;exit ;fi

echo
echo "Searching for: $1"
echo "Found the following:"; for NAVN in $(ls /z |grep -v old |grep $1 |head -1 ); do echo $NAVN; done
echo "Mounting /nas" ;mount /nas
echo "Now starting...... date of snapshot: $dato";
echo

for NAVN in $(ls /z |grep -v backup |grep -v old |grep $1 |head -1 ); do
  zfs snapshot z/$NAVN@$dato ;echo Snapshot of $NAVN done, now starting snap to gzip at /nas/..
  mkdir /nas/$NAVN@$dato
  zfs send z/$NAVN@$dato |gzip |openssl enc -aes-256-cbc -salt -pass file:/root/key.bin |split -a 5 -d -b 100m  - /nas/$NAVN@$dato/$NAVN@$dato.enc
done

echo
echo "Unmounting /nas" ;umount /nas
echo "......DONE:)"
echo

root@bkup:~# cat zfs_send_nas_restore
clear
echo
echo
echo "-----------------------------------------------------"
echo "RESTORE FROM BACKUP/NAS BACK TO BKUP -SERVER !"
echo "---------------------------------------"
echo
echo

#echo -n "Sleeping for 1sec "; for i in $(seq 1 9); do echo -n "."; sleep 0.1; done ;echo "done!"
echo


echo "Mounting /nas" ;mount /nas ;echo


ls -lh /nas/ |grep \@ ;echo
echo -n "Select backup to restore: "; read torestore ;echo

if [ "$torestore" == "" ] ;then echo "exiting.." ;umount /nas ;exit ;fi


torestorename="`echo $torestore |tr \@ \_`"
echo "Restoring to: z/$torestorename"

time cat /nas/$torestore/*enc* |openssl aes-256-cbc -d -kfile /root/key.bin |gunzip |zfs recv z/$torestorename


echo
echo "Unmounting /nas" ;umount /nas
echo "......DONE:)"

zfs_send_nas_restore (hente fra “nas”)

clear
echo
echo
echo "-----------------------------------------------------"
echo "RESTORE FROM BACKUP/NAS BACK TO BKUP -SERVER !"
echo "---------------------------------------"
echo
echo

#echo -n "Sleeping for 1sec "; for i in $(seq 1 9); do echo -n "."; sleep 0.1; done ;echo "done!"
echo

echo "Mounting /nas" ;mount /nas ;echo

ls -lh /nas/ |grep \@ ;echo
echo -n "Select backup to restore: "; read torestore ;echo

if [ "$torestore" == "" ] ;then echo "exiting.." ;umount /nas ;exit ;fi

torestorename="`echo $torestore |tr \@ \_`"
echo "Restoring to: z/$torestorename"

time cat /nas/$torestore/*enc* |openssl aes-256-cbc -d -kfile /root/key.bin |gunzip |zfs recv z/$torestorename


echo
echo "Unmounting /nas" ;umount /nas
echo "......DONE:)"

zfs_destroy (rense snapshots)

if [ "$1" == "" ] ;then echo no input ;exit ;fi

for f in $(zfs list -t snapshot -o name |grep $1 ) ;do echo $f ;zfs destroy $f ;done

 

 


 

 

 

 

Linux enable rc.local in debian 9

 

/etc/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

 

/etc/rc.local

#!/bin/sh -e
#
# rc.local
#

# Your commands here, without the # : )

#
#

exit 0
--

chmod +x /etc/rc.local
systemctl start rc-local.service
systemctl status rc-local.service

 

Facebook passord og two-factor

Noen ganger kan det være til sin fordel å endre sitt passord på facebook, feks om man skulle være uheldig og trykke på noe “virus” e.l. der.
Direktelink: https://www.facebook.com/settings?tab=security (åpnes i nytt vindu).

Passord
For å bytte passord på facebook så går man inn på “Settings”(Innstillinger på norsk) og velger “Security and Login”, her vil man kunne endre passord.

Two-factor authentication
Ved innlogging fra annen/ukjent pc så vil man måtte bekrefte, i tillegg til passord, at du er deg med å taste inn feks kode man får på mobil/sms. Dette er en utmerket måte, et ekstra nivå, å øke sikkerheten.

Vedlagt par bilder som viser hvordan dette ser ut;


 

2017 nov; Microsoft® Certified Solutions Associate: Windows Server 2016

En vakker høstdag i 2017 så tenkte tanken av å ta “oppgraderingen” av eksisterende MCSA mht Windows 2012 server til Windows 2016, så..

934 av 1000 (700 for å bestå) poeng. Greit nok, men seriøst må erkjenne at det var en del formuleringer av spørsmål der som jeg må si hadde vært lettere i praksis enn måten de var presentert på. Upgrade/3-i-1-exam.

 

Linux; tar incremental script

root@srv:/tmp# cat b1.sh
#!/bin/sh

######

# bruk av tar for incremental backup,
# ./b1.sh arkiv /pathtobackup

#####

if [ -z $2 ]; then echo "./b1.sh arkiv mappe" ;exit ;fi



fil="$1"
sti="$2"



if [ -f $1\_main.tgz ] ;then
dato=$(date +%Y%m%d%H%M%S) ; echo $dato
tar --create \
 --file=$fil\_$dato.tgz \
 --listed-incremental=$fil\.snar \
 --gzip \
 --verbose \
 $sti >$fil\_$dato.log
else
tar --create \
 --verbose \
 --file=$fil\_main.tgz \
 --listed-incremental=$fil\.snar \
 --gzip \
 $sti >$fil\_main.log
fi

 

Windows 10 – koble til nettverksdisk

Problem med å koble til nettverksdisk med en PC som kjører Windows 10?

Enkle løsningen – klikk høyre musknapp og last ned følgende fil, så kjør den (ja noen varsler, men er ok). AllowInsecureGuestAuth.reg

Manuelle måten å gjøre dette på er å gå inn på regedit, da under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters og legge til “AllowInsecureGuestAuth” som dword32 med verdi “1”.

Hent dine data på google facebook linkedin

Noen ganger er det av interesse å få tatt en liten nedlasting av feks kontakter, epost, videoer, osv.  — Og skulle man ønske å rense litt, så er fordel å ha en kopi av dette, en backup/sikkerhetskopi – før man renser : )

Google https://takeout.google.com/settings/takeout
(gmail, søkehistorikk, youtube mm.)

Facebook https://www.facebook.com/settings?tab=your_facebook_information
(Trykk på Download a copy of your Facebook data.)

LinkedIn https://www.linkedin.com/psettings/member-data

Fleste tjenester på nettet har slike muligheter.
Når kommer til epost så anb. uten tvil MailStore.

WordPress: Unngå mas på wp-admin

  • Problem: Mas på webserveren, når mange “scriptkiddies” prøver å hacke via wp-admin
  • Løsning: Sette opp htaccess, slik at stoppes med enkel brukernavn/passord før kommer til websiden

Adgangsfiler på mappenivå
/var/www/domenenavn/web/.htaccess
Inneholder (i tillegg til det som er fra før)
# Stop Apache from serving .ht* files
<Files ~ “^\.ht”>
Order allow,deny
Deny from all
</Files>

# Protect wp-login
<Files wp-login.php>
AuthUserFile /var/www/domenenavn/private/htpasswd
AuthName “Private access”
AuthType Basic
require user brukernavn
</Files>

Passordfilen
/var/www/domenenavn/private/htpasswd (feks)
Inneholder
brukernavn:2027d58d3695a2f8979cb0e48c9df9cd
(google md5 text hash verktøy på web for å konventere tekst til passord)