Hero Image

dc02

Sekundär DC (PDC)-server DC01

På fabric-servern:

sudo virt-install --virt-type kvm --name dc02 \
  --location \
  https://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ \
  --memory 1024 \
  --vcpus 1 \
  --disk pool=vmdisks,size=25,format=qcow2 \
  --network bridge=br0 \
  --hvm \
  --graphics none \
  --console pty,target_type=serial \
  --extra-args "console=ttyS0"

Konfigurera Debian

Redigera nano /etc/network/interfaces och ställa in en statisk IP-adress:

# /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug ens2
iface ens2 inet static
  address 10.115.100.5/24
  gateway 10.115.100.1
# /etc/resolv.conf
search yourdomain.com
nameserver 10.115.100.4

Ställ in systemspråket på engelska för att göra det lättare att upptäcka problem i loggfilerna:

apt install locales-all
localectl set-locale LANG=en_US.utf8
localectl status

Uppdatera Debian och installera de nödvändiga administrationsverktygen:

apt update
apt install wget sudo screen nmap telnet tcpdump rsync net-tools dnsutils htop \
apt-transport-https vim gnupg lsb-release

Skapa nano /etc/sudoers.d/10-nopasswd och lägg till:

%emir ALL=(ALL) NOPASSWD: ALL

Konfigurera VIM

Öppna nano /etc/vim/vimrc och ersätt hela innehållet med:

runtime! debian.vim
syntax on
set background=dark
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
filetype plugin indent on
set encoding=utf-8
set nobackup
set nowritebackup
set showcmd
set updatetime=300
set showmatch
set ignorecase
set smartcase
set incsearch
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab
if filereadable("/etc/vim/vimrc.local")
  source /etc/vim/vimrc.local
endif

Skapa en konfigurationsfil för Vim för användare nano ~/.vimrcoch lägg till:

set mouse=
set nocompatible
set cursorline
set nocursorcolumn
set nowrap
set showmode
set hlsearch
set wildmenu
set wildmode=list:longest
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx

Starta om systemet och logga in som vanlig användare

I mitt fall emir.

Ställ in samma Vim-användarinställningar som ovan för den aktuella användaren.

Samba AD

För att underlätta installationen och konfigurationen bör du byta till root-användaren sudo su

Om du har klienter med Windows 11 22H2 eller senare måste du uppgradera Samba till den senaste versionen. Redigera vim /etc/apt/sources.list och lägg till följande längst ner i filen:

deb http://deb.debian.org/debian bullseye-backports main

Installera paketen

export DEBIAN_FRONTEND=noninteractive
apt update
apt -t bullseye-backports install samba winbind libnss-winbind krb5-user smbclient ldb-tools python3-cryptography
unset DEBIAN_FRONTEND

Konfigurera Kerberos

Öppna /etc/krb5.conf, ta bort innehållet och lägg till följande:

[libdefaults]
  default_realm = YOURDOMAIN.COM
  dns_lookup_kdc = false
  dns_lookup_realm=false
[realms]
  YOURDOMAIN.COM = {
  kdc = 127.0.0.1
  kdc = 10.115.100.4
  }

Starta om värddatorn

Efter omstarten ska du kontrollera att Kerberos är korrekt konfigurerat och att du får ett TGT:

kinit administrator
klist

Konfigurera Samba som en sekundär domänkontrollant

Ta bort konfigurationsfilen /etc/samba/smb.conf som skapades automatiskt vid paketinstallationen:

sudo su
rm -f /etc/samba/smb.conf

Lägg till domänkontrollanten som medlem i domänen.

samba-tool domain join yourdomain.com DC -U administrator --realm=YOURDOMAIN.COM -W YOURDOMAIN.COM

Ändra DNS-inställningarna så att de pekar på sig själva i /etc/resolv.conf:

search yourdomain.com
nameserver 127.0.0.1
nameserver 10.115.100.4

Lägg till DNS-vidarebefordraren i /etc/samba/smb.conf:

[global]
   ...
   dns forwarder = 8.8.8.8
   ...

Aktivera automatisk start av AD-tjänsten:

systemctl unmask samba-ad-dc
systemctl enable samba-ad-dc
systemctl disable winbind nmbd smbd
systemctl mask winbind nmbd smbd

Som standard skapar Samba-AD-konfigurationen en exempelfil med namnet krb5.conf i katalogen /var/lib/samba/private.

Den här filen används som standard av vissa Samba-anrop.

Det är bäst att ersätta den med en symbolisk länk till /etc/kbr5.conf för att undvika vissa biverkningar.

rm /var/lib/samba/private/krb5.conf
ln -s /etc/krb5.conf /var/lib/samba/private/krb5.conf

Starta om Samba:

pkill -9 smbd
pkill -9 nmbd
pkill -9 winbindd
systemctl restart samba-ad-dc

Kontrollera att DNS-posterna har skapats:

samba_dnsupdate --verbose --use-samba-tool

Installera och konfigurera NTP för Samba-AD

Installera NTP-paketen och välj en tidsserver på Internet:

apt install chrony
echo 'server 0.pool.ntp.org iburst' > /etc/chrony/sources.d/org-ntp-server.sources
echo 'server 1.pool.ntp.org iburst' >> /etc/chrony/sources.d/org-ntp-server.sources
echo 'server 2.pool.ntp.org iburst' >> /etc/chrony/sources.d/org-ntp-server.sources
echo 'allow 10.115.100.0/24' > /etc/chrony/conf.d/ad-dc.conf
echo 'ntpsigndsocket  /var/lib/samba/ntp_signd' >> /etc/chrony/conf.d/ad-dc.conf
echo 'hwclockfile /etc/adjtime' >> /etc/chrony/conf.d/ad-dc.conf
chronyc reload sources

Ändra ägaren till den katalog som innehåller Samba-socketen som används för att autentisera NTP-tjänsten och starta om NTP:

chgrp -R _chrony /var/lib/samba/ntp_signd
systemctl restart chrony

Bind-DLZ

Även om Samba-AD som standard har en egen inbyggd DNS-server rekommenderas det att använda Bind-DLZ.

Installera bind

För enkelhetens skull gör så här: sudo su

sudo apt install bind9 bind9utils

Redigera vim /etc/bind/named.conf och lägg till include "/var/lib/samba/bind-dns/named.conf";

Ändra avsnittet med inställningar i filen vim /etc/bind/named.conf.options (kom ihåg att ändra vidarebefordraren):

options {
  directory "/var/cache/bind";

  forwarders {
    172.31.1.13;
    172.31.1.15;
    172.31.1.44;
  };
  allow-transfer {
    172.31.1.13;
    172.31.1.15;
    172.31.1.44;
  };
  also-notify {
    172.31.1.13;
    172.31.1.15;
    172.31.1.44;
  };

  allow-query { any; };

  dnssec-validation no;

  auth-nxdomain no;    # conform to RFC1035
  listen-on-v6 { any; };

  tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";

  minimal-responses yes;
};

Inaktivera IPv6-bindning i det lokala nätverket i vim /etc/default/named:

# run resolvconf?
RESOLVCONF=no

# startup options for the server
OPTIONS="-4 -u bind"

Och vim /etc/samba/smb.conf, lägg till följande rad och kommentera ut raden med DNS-vidarebefordrare:

# Global parameters
[global]
  server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
  idmap_ldb:use rfc2307 = yes
  dns zone transfer clients allow = 172.31.1.13, 172.31.1.15, 172.31.1.44
  netbios name = DC01
  realm = YOURDOMAIN.COM
  server role = active directory domain controller
  workgroup = YOURDOMAIN.COM

[sysvol]
  path = /var/lib/samba/sysvol
  read only = No

[netlogon]
  path = /var/lib/samba/sysvol/yourdomain.com/scripts
  read only = No

Skapa två kataloger i /var/lib/samba:

sudo mkdir -p /var/lib/samba/bind-dns/dns
sudo chmod 770 /var/lib/samba/bind-dns
sudo chown -R root:bind /var/lib/samba/bind-dns
sudo chmod -R g+w /var/lib/samba/bind-dns

Konfigurera dynamiska uppdateringar av DNS-poster och starta om tjänsterna samba och bind:

samba_upgradedns --dns-backend=BIND9_DLZ

Kontrollera den angivna versionen named -v

BIND 9.16.37-Debian (version med utökat stöd)

Redigera vim /var/lib/samba/bind-dns/named.conf Öppna filen och ta bort kommentartecknen framför modulen för din version av BIND. I mitt fall är det:

database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_16.so";
systemctl restart samba-ad-dc
systemctl restart bind9

Se till att det är Bind-servern som lyssnar på port 53:

netstat -tapn | grep 53
  tcp     0    0 10.115.100.5:53    0.0.0.0:*    LISTEN      5291/named

Testa lokala och rekursiva sökningar:

dig @localhost microsoft.com
dig @localhost dc01.yourdomain.com
dig -t SRV @localhost _ldap._tcp.yourdomain.com

Konfigurera SYSVOL

Skapa ett nyckelpar för root på målservern och kopiera den offentliga nyckeln till källservern:

Tillåt inloggning som root via SSH vim /etc/ssh/sshd_config på båda servrarna och starta om sshd-tjänsten (detta är endast en tillfällig åtgärd):

# Add following line on the bottom. Will be removed leater.
PermitRootLogin yes

Det första steget är att skapa ett nyckelpar på klientdatorn (DC02):

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@dc01

Gör på samma sätt på dc01

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@dc02

Hämta innehållet i \srvads\sysvol och kopiera det till den nya AD-servern från den sekundära domänkontrollanten.

Kör kommandot:

sudo -i
rsync -aP root@dc01:/var/lib/samba/sysvol/ /var/lib/samba/sysvol/

Ta bort PermitRootLogin yes från /etc/ssh/sshd_config på båda servrarna och starta om sshd.

Replikering

Konfiguration på domänkontrollanten med FSMO-rollen PDC-emulator

Konfigurera SSH-kontroll

Om det fjärranslutna systemet tillämpar hastighetsbegränsningar för inkommande SSH-anslutningar kommer Unison att misslyckas om du försöker köra det på detta sätt. Därför skapar vi den första SSH-anslutningen som en controlpath-fil på den angivna platsen, och alla efterföljande anslutningar kommer att återanvända den första anslutningen.

mkdir ~/.ssh/ctl
cat << EOF > ~/.ssh/ctl/config
Host *
ControlMaster auto
ControlPath ~/.ssh/ctl/%h_%p_%r
ControlPersist 1
EOF
Inställningar för Sysvolsync – loggfiler

Gör följande på DC1 så att du kan kontrollera vad som händer under synkroniseringen. Lägg gärna till den här filen i logrotate, eftersom loggfilens storlek inte begränsas.

touch /var/log/sysvol-sync.log
chmod 640 /var/log/sysvol-sync.log
Konfigurera standardvärden för Unisons körparametrar

Kör följande på DC1

install -o root -g root -m 0750 -d /root/.unison
cat << EOF > /root/.unison/default.prf
# Unison preferences file
# Roots of the synchronization
#
# copymax & maxthreads params were set to 1 for easier troubleshooting.
# Have to experiment to see if they can be increased again.
root = /var/lib/samba
# Note that 2 x / behind DC2, it is required
root = ssh://root@DC2//var/lib/samba 
# 
# Paths to synchronize
path = sysvol
#
#ignore = Path stats    ## ignores /var/www/stats
auto=true
batch=true
perms=0
rsync=true
maxthreads=1
retry=3
confirmbigdeletes=false
servercmd=/usr/bin/unison
copythreshold=0
copyprog = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --inplace --compress
copyprogrest = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --partial --inplace --compress
copyquoterem = true
copymax = 1
logfile = /var/log/sysvol-sync.log
EOF

Konfigurera SysVol på DC2

Installera Unison apt install unison och kör det första testet:

KÖR DETTA FRÅN DC01

/usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log --delete-after -f"+ */" -f"- *" /var/lib/samba/sysvol root@DC02:/var/lib/samba  &&  /usr/bin/unison

Lägg till i Crontab på DC1

*/5 * * * * /usr/bin/unison -silent

När du försöker synkronisera mappen på nytt

Varning: Följ stegen nedan, annars kan det hända att mappen sysvol blir tom.

  1. Inaktivera Cron på DC1, till exempel genom att lägga till ett ”#” på raden med crontab -e
  2. Kontrollera med kommandot ps -aux om rsync eller unison för närvarande körs. Om så är fallet, vänta tills det är klart ELLER avsluta processen (om det är en zombieprocess).
  3. Ta bort hash-filerna på både DC1 och DC2 i katalogen /root/.unison
  4. Kontrollera nu din sysvol och synkronisera om
  5. Kontrollera att allt fungerar som det ska igen
  6. Aktivera cron på DC1 igen

Transport Layer Security

Flytta de certifikat som vi tidigare har genererat och kopierat från CA-servern:

sudo mv ca.crt dc02.* /etc/samba/tls/
sudo chown root:root /etc/samba/tls/*
sudo cp /etc/samba/tls/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Redigera vim /etc/samba/smb.conf och lägg till:

[global]
  ...
  tls enabled  = yes
  tls keyfile  = /etc/samba/tls/dc02.key
  tls certfile = /etc/samba/tls/dc02.crt
  tls cafile   = /etc/samba/tls/ca.crt
  ...

Starta om Samba och kontrollera TLS:

sudo systemctl restart samba-ad-dc.service
sudo openssl s_client -showcerts -connect dc02.yourdomain.com:636 -CAfile /etc/samba/tls/ca.crt