Pomoc Dwa qnapy w firmie.

qrdziel

Passing Basics
Beginner
30 Wrzesień 2016
25
2
3
52
Chessington
ictlaboratory.com
QNAP
TS-x64
Ethernet
100 Mbps
Witam.
Obsługuję firmę która ma swoje oddziały w Warszawie, Wrocławiu i Opolu. Wszystkie komputery mają zainstalowany program - nawigator który korzysta z jednej bazy danych na serwerze MSSQL i ma jeden folder do którego zapisują załączniki. Dotychczas wystarczył Windows 10 Prof z zainstalowanym serwerem MSSQL i udostępnionym folderem załączniki. Ale ostatnio dokonano ataku i zakryptowano pliki w udostępnionym folderze. Mieliśmy kopie bezpieczeństwa - tak że nie było tragedii. Ale chcę zabezpieczyć przed kolejnymi atakami.
Kupiłem dwa Qnap TS-464 drugi dla kopii bezpieczeństwa. Serwer MSSQL zainstalowałem w dokerze i skopiowałem bazy. Utworzyłem folder udostępniony załączniki i to działało, ale ostatnio też zakryptowali i mam dużo roboty. Jak radzicie się uchronić.
1. Kopię bezpieczeństwa folderu robić na drugi Qnap na pomocą Qsync?
2. Na pierwszym serwerze robić kopię migawkową folderu?
3. Jak robić automatyczną kopię bazy MSSQL?
Zmieniam hasła, folder udostępniony załączniki jest niewidoczny co jeszcze mogę zrobić?
Może do każdego oddziału dokupić Qnap i połączyć je vpn? Poradźcie jak wy sobie dajecie radę z włamaniami?
 
Skupiłbym się na problemie z szyfrowaniem danych - dać się zaszyfrować dwa razy to już trzeba olewać kwestie bezpieczeństwa albo nie wyciągać wniosków.
W pierwszej kolejności ustalić jak doszło do włamania, co zawiniło (użytkownik / hasła / niepotrzebnie udostępnione dziurawe usługi itp.) i podjąć działania mające na celu zapobieganiu ponownych infekcji / włamań.

Ad1. Skoro ma być kopia bezpieczniejsza niż poprzednio to może rsync między dwoma serwerami?
Ad2. Nie zaszkodzi, tylko zrób zachowanie np. 7-14 kopii migawkowych żebyś mógł wrócić do danych niezaszyfrowanych.
Ad3. Nie było tego w temacie o MSSQL w dockerze? Robisz tak jakbyś robił kopię ze zwykłego serwera MSSQL czy to przez skrypty czy przez zewnętrzne aplikacje.
 
Ad.3 właśnie o to chodzi, że wiem jak wykonać kopię manualnie, ale jak to zrobić automatycznie? I to w dodatku tylko na qnapie? Dotychczas na kompie uruchamiałem Microsoft SQL Server menagement studio i tam robiłem. Teraz już nie mam Windowsa - mam tylko qnap. Może da się jakoś cronem przekopiować pliki z bazą na qnap?
 
Może da się jakoś cronem przekopiować pliki z bazą na qnap?
Webcron i odpalasz polecenie do robienia kopii albo robisz sobie krótki skrypt który odpala polecenie i ten skrypt odpalasz z cron-a.
Pliki można kopiować ale musisz wyłączyć kontener na czas kopiowania - inaczej ryzykujesz skopiowanie uszkodzonej bazy.
Kiedyś zmajstrowałem coś takiego do robienia kopii voluminów/mountów (działało pod debianem)
Bash:
#!/bin/bash
##################################################
# Docker mounts/volumes backup script            #
# Version: 1.0                                   #
# Script by: Jerry1333                           #
##################################################

###############
# MAIN BACKUP #
###############

# Where backup should be located
BACKUP_DIR='/mnt/kopia/docker/'

# How many days keep backups
BACKUP_RETAIN_DAYS=7

# Date format used in filename
# Filename will be [volume_name]-[date].tar.gz
BACKUP_DATE_FORMAT='%Y-%m-%d_%H-%M-%S'

##########
# DOCKER #
##########

# What to backup?
# MOUNT / VOLUME
SOURCE_TYPE='MOUNT'

# Skip mounts in backup
SKIP_MOUNT=("docker.sock")

# Pause container before backup and start after it ends?
PAUSE_ON_BACKUP=1

#################
# REMOTE BACKUP #
#################

# SEND BACKUP TO REMOTE LOCATION?
SEND_TO_REMOTE=0

# Transfer type
# 1=FTP
# 2=SFTP
# 3=rsync to other dir
TYPE=3

# FTP / SFTP
# Login Data
#USERNAME="userz"
#PASSWORD="someStrongRandomPassword"

# FTP / SFTP
# IP or hostname
#SERVER="backup4free.org"

# FTP / SFTP
# Port
# Default for FTP 21
# Default for SFTP 22
#PORT="21"

# FTP / SFTP / RSYNC
# Remote directory where the backup will be placed
REMOTEDIR="./docker/"

##############################
# Don't edit below this line #
##############################

function check_root() {
    [ $EUID -eq 0 ] || _exit "$LINENO: This script must be run as root"
}

function _exit() {
    echo -e "$*"
    echo
    exit 1
}

function check_deps() {
    if [ ! -x "/usr/bin/jq" ]; then
        echo "ERROR: missing jq"
        echo "Trying to install jq from apt repos"
        apt update        2>/dev/null 1>/dev/null
        apt install jq -y 2>/dev/null 1>/dev/null
    fi
    [ -x "/usr/bin/jq" ] || _exit "$LINENO: Cannot install jq!"
}

check_root
check_deps

if [ $SOURCE_TYPE = "MOUNT" ]; then
    DOCKER_CONTAINERS=$(docker container ls --format "{{.Names}}")
    CONTAINERS=($DOCKER_CONTAINERS)

    for container in "${CONTAINERS[@]}"
    do
        if [ $PAUSE_ON_BACKUP = 1 ]; then
            docker pause $container
        fi
        echo "Working on $container"
        CONTAINER_MOUNTS=$(docker container inspect $container --format '{{range .Mounts}}{{println .Source}}{{end}}')
        MOUNTS=($CONTAINER_MOUNTS)
        for mount in "${MOUNTS[@]}"
        do
            echo "Working on mount $mount"
            mount_name=$(echo $mount|cut -d'/' -f4-|sed 's#/#_#g')
            if [[ ! " ${SKIP_MOUNT[*]} " =~ " $mount_name " ]]; then
                echo "Backing up to $backup_filename..."
                fdate=`date +$BACKUP_DATE_FORMAT`
                backup_filename="$mount_name-$fdate.tar.gz"
                tar czf $BACKUP_DIR$backup_filename $mount
                echo "Working on $mount ... done!"
                echo ""
            else
                echo "Skipped..."
                echo ""
            fi
        done
        if [ $PAUSE_ON_BACKUP = "1" ]; then
            docker unpause $container
        fi
    done
elif [ $SOURCE_TYPE = "VOLUME" ]; then
    echo "Getting docker volumes ..."
    DOCKER_VOLUMES=$(docker volume ls -q)
    VOLUMES=($DOCKER_VOLUMES)
    echo "Getting docker volumes ... done!"

    for volume in "${VOLUMES[@]}"
    do
        echo "Working on $volume ..."
        # there should be only one mountpoint in volume - the ZERO
        volume_path=$(docker volume inspect $volume | jq .[0].Mountpoint)
        volume_path=$(echo $volume_path | sed -e 's/\"//g')
        echo "$volume is mounted at $volume_path ..."
        fdate=`date +$BACKUP_DATE_FORMAT`
        backup_filename="$volume-$fdate.tar.gz"
        echo "Backing up to $backup_filename..."
        tar czf $BACKUP_DIR$backup_filename $volume_path
        echo "Working on $volume ... done!"
        echo ""
    done
else
    _exit "[SOURCE] Please select a valid type"
fi

# DELETE FILES OLDER THAN SETTING
if [ ! -z ${BACKUP_DIR} ]; then
    echo "Removing backups older than ${BACKUP_RETAIN_DAYS} days..."
    find ${BACKUP_DIR}* -mtime +${BACKUP_RETAIN_DAYS} -exec rm {} \;
fi

if [ $SEND_TO_REMOTE -eq 1 ]; then
    echo "Finding files that will be send to remote location..."
    FILES_TO_SEND_=$(find $BACKUP_DIR -maxdepth 1 -type f -mtime -1 -printf '%f\n')
    FILES_TO_SEND=($FILES_TO_SEND_)
    echo "Done"

    for FILE in "${FILES_TO_SEND[@]}"
    do
        echo "Processing $FILE"
        if [ $TYPE -eq 1 ]; then    # FTP
            echo "Using FTP remote location"
            cd $BACKUP_DIR
            echo "Connecting and sending file"
            ftp -p -n -i $SERVER $PORT <<EOF
            user $USERNAME $PASSWORD
            binary
            put $FILE $REMOTEDIR/$FILE
            quit
EOF
        elif [ $TYPE -eq 2 ]; then  # SFTP
            echo "Using SFTP remote location"
            cd $BACKUP_DIR
            echo "Connecting and sending file"
            rsync --rsh="sshpass -p $PASSWORD ssh -p $PORT -o StrictHostKeyChecking=no -l $USERNAME" $FILE $SERVER:$REMOTEDIR
        elif [$TYPE -eq 3 ]; then   # RSYNC
            echo "Using DIR as remote location"
            cd $BACKUP_DIR
            echo "Copying files..."
            rsync -Pcauv $BACKUP_DIR $REMOTEDIR
            break
        else
            _exit "[FTP] Please select a valid type"
        fi
    done
fi
 

Mogą Cię zainteresować

Użytkownicy znaleźli tą stronę używając tych słów:

  1. non-root
  2. rsync
  3. backup z qnap na qnap
  4. qsync'
  5. jak połączyć dwa qnap