Una guida completa su come installare e configurare un Domain Controller Active Directory basato su Samba 4 che possa servire client Windows 2000+. Questo rende l’installazione molto più “hardened” e sicura di una equivalente soluzione nel mondo Microsoft:
* Porte RPC statiche, potete mettere un firewall tra i vostri client ed il Domain Controller
* Zone DLZ per Bind (zone dinamiche su LDAP), che possono essere gestite in modo standard attraverso i Windows Remote Services Administration Tools
* Update dinamici nel DNS (i client si registrano da soli nel DNS)
* Niente LANMAN, NetBIOS, SMB1 o protocolli non sicuri abilitati. La sicurezza è migliore, la performance altrettanto!
Questo post è un update alla mia guida precedente per tutte le novità che sono state introdotte e per l’introduzione di CentOS/RHEL 7.
Abilitazione del sistema
Questa guida è per Fedora e CentOS/RHEL 7 con una versione minima di 4.1.6 di Samba. La versione 4.1.6 la prima versione di Samba che include il supporto per systemd
. Potete trovare l’ultimo package di Samba con i sorgenti in Koji.
Al momento entrambi i sistemi hanno bisogno di una piccola patch per abilitare la funzionalità di Domain Controller mancante; anche se prima o poi questa modifica verrà introdotta nei package ufficiali quando Samba utilizzerà le librerie MIT Kerberos del sistema.
La patch per il package serve a disabilitare l’integrazione con MIT Kerberos ed abilitare l’implementazione di Heimdal Kerberos fornita all’interno dei sorgenti di Samba. Le modifiche introdotte in Heimdal servono per abilitare le funzionalità di Domain Controller. Questa patch molto semplice è stata anche riportata ufficialmente:
--- samba.spec.old 2014-06-18 15:36:06.000000000 +0200 +++ samba.spec 2014-06-18 15:39:56.552497281 +0200 @@ -38,8 +38,8 @@ %endif %endif -%global with_mitkrb5 1 -%global with_dc 0 +%global with_mitkrb5 0 +%global with_dc 1 %if %{with testsuite} # The testsuite only works with a full build right now. @@ -239,6 +239,13 @@ Provides: samba4-dc = %{samba_depver} Obsoletes: samba4-dc < %{samba_depver} +%if %with_dc +Requires: tdb-tools >= %{libtdb_version} +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%endif + %description dc The samba-dc package provides AD Domain Controller functionality @@ -642,7 +649,7 @@ %endif install -d -m 0755 %{buildroot}%{_unitdir} -for i in nmb smb winbind ; do +for i in nmb smb winbind samba; do cat packaging/systemd/$i.service | sed -e 's@\[Service\]@[Service]\nEnvironment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba@g' >tmp$i.service install -m 0644 tmp$i.service %{buildroot}%{_unitdir}/$i.service done @@ -693,6 +700,15 @@ %post dc-libs -p /sbin/ldconfig %postun dc-libs -p /sbin/ldconfig + +%post dc +%systemd_post samba.service + +%preun dc +%systemd_preun samba.service + +%postun dc +%systemd_postun_with_restart samba.service %endif # with_dc %post libs -p /sbin/ldconfig @@ -1054,6 +1070,7 @@ %{_datadir}/samba/setup %{_mandir}/man8/samba.8* %{_mandir}/man8/samba-tool.8* +%{_unitdir}/samba.service %else # with_dc %doc packaging/README.dc %exclude %{_mandir}/man8/samba.8* |
Cambiamento di versione
Non dimenticate di aumentare la Epoch nello SPEC file dell’RPM in modo che non abbia conflitti e non sia sovrascritto da un eventuale update di pacchetti ufficiali con una versione successiva.
Dopo aver applicato la patch, ricompilate il vostro package di Samba con il tool che preferite, rpmbuild
, mock
o koji
e procedete con l’installazione.
Installazione del software
Installate il server BIND (necessario anche per gli altri eventuali domini opzionali che intendete gestire), il server NTP, la suite Samba (dagli RPM che avete appena ricompilato) ed alcuni tool aggiuntivi che sono usati dal nostro ambiente sul server selezionato. Queste istrunzioni rimpiazzano anche firewalld
con il servizio base iptables
:
rpm -e firewalld yum install iptables-services bind bind-utils ntp samba-dc samba-client tdb-tools \ krb5-workstation policycoreutils-devel libselinux-utils cups systemctl enable iptables systemctl start cups systemctl enable named systemctl stop chronyd systemctl disable chronyd systemctl enable ntpd systemctl enable samba |
Networking
Disabilitare IPv6
Ho dovuto disabilitare IPv6 per la mia rete interna, voi potreste averne bisogno. Per disabiltare permanentemente IPv6:
sysctl -w net.ipv6.conf.all.disable_ipv6=1 echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf |
Configurazione del Firewall
Le seguenti porte devono essere aperte sul firewall del server:
* TCP: 53, 88, 135, 445, 464, 1024-5000, 3268
* UDP: 53, 88, 123, 389, 464
Le porte 1024-5000 sono per i servizi RPC usati da Samba, e possono essere ulteriormente ridotte nel caso in cui non abbiate numerosi client. La porta tcp/53 è usata da BIND per ricevere aggiornamenti di record DNS GSS (usano TCP, non UDP) ed è inoltre usata per trasferimenti di larghe zone, ma non è il nostro caso.
Create il file /etc/sysconfig/iptables
ed inserite il seguente contenuto (diamo per scontato che il server abbia un indirizzo IP di 192.168.0.17):
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp -d 192.168.0.17 --dport 53 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 53 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 88 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp -d 192.168.0.17 --dport 88 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp -d 192.168.0.17 --dport 123 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 135 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 389 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp -d 192.168.0.17 --dport 389 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 445 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 464 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp -d 192.168.0.17 --dport 464 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 -m multiport --ports 1024:5000 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -d 192.168.0.17 --dport 3268 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT |
Successivamente avviamo il firewall:
systemctl start iptables |
Provisioning del dominio
Il primo setup e provisioning deve essere eseguito con SELinux disabilitato e successivamente riabilitato. Dato che il supporto per le funzionalità di Domain Controller non sono ancora nei build ufficiali, le policy di SELinux non ne tengono ancora conto. Questo aiuta ad effettuare il debugging per problemi che non sarebbero altresì presenti con i soli permessi DAC. Eseguite i seguenti comandi come root per avviare il provisioning:
setenforce 0 rm -f /etc/samba/smb.conf samba-tool domain provision --dns-backend=BIND9_DLZ --realm=EXAMPLE.COM \ --domain=EXAMPLE --server-role=dc --function-level=2008_R2 \ --adminpass=Password01 |
Alternativamente il comando può essere eseguito senza parametri e l’installazione sarà interattiva. Vi verrà restituito un output come il seguente:
Looking up IPv4 addresses Looking up IPv6 addresses No IPv6 address will be assigned Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema Adding DomainDN: DC=example,DC=com Adding configuration container Setting up sam.ldb schema Setting up sam.ldb configuration data Setting up display specifiers Modifying display specifiers Adding users container Modifying users container Adding computers container Modifying computers container Setting up sam.ldb data Setting up well known security principals Setting up sam.ldb users and groups Setting up self join Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=example,DC=com Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions See /var/lib/samba/private/named.conf for an example configuration include file for BIND and /var/lib/samba/private/named.txt for further documentation required for secure DNS updates Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: samba NetBIOS Domain: EXAMPLE DNS Domain: example.com DOMAIN SID: S-1-5-21-1504993763-4098306314-3392174306 |
Disabilitare NetBIOS
Modificate il file /etc/samba/smb.conf
e accertatevi che la sezione [global] contenga le seguenti linee (in aggiunta a quelle già presenti) per disabilitare il supporto NetBIOS:
[global] server services = -dns, -nbt smb ports = 445 |
Windows 2000 e successivi fanno partire due connessioni simultaneamente su un server; una sulla porta 445 ed una sulla porta 139. Se il client ottiene una risposta dalla porta 445 effettuerà il reset (RST) della connessione sulla porta 139. Se invece ottiene una risposta soltando dalla porta 139, userà quella. Se disabilitate NBT (NetBIOS over TCP/IP) sui vostri client, solo la porta 445 sarà utilizzata. I client pre-Windows 2000 usano solo la porta 139, senza supporto per CIFS o SMB 2.x.
Configurazione di Kerberos
Copiate il file per Kerberos generato dal provisioning nella posizione di default sul sistema:
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf |
Controllate che la configurazione di Kerberos contenga la direttiva check-ticket-addresses
; è necessaria per i client che si collegano attraverso una NAT.
--- /etc/krb5.conf.old 2013-04-08 15:49:33.310944976 +0200 +++ /etc/krb5.conf 2013-04-08 15:49:57.989473099 +0200 @@ -2,3 +2,6 @@ default_realm = EXAMPLE.COM dns_lookup_realm = false dns_lookup_kdc = true + +[kdc] + check-ticket-addresses = false |
Configurazione del server NTP
Cambiate la configurazione del server NTP per abilitare le richieste NTP firmate in stile Microsoft:
--- /etc/ntp.conf.default 2013-08-09 10:10:07.362235547 +0200 +++ /etc/ntp.conf 2013-08-19 12:31:44.356572515 +0200 @@ -5,8 +5,8 @@ # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. -restrict default kod nomodify notrap nopeer noquery -restrict -6 default kod nomodify notrap nopeer noquery +restrict default kod nomodify notrap nopeer noquery mssntp +restrict -6 default kod nomodify notrap nopeer noquery mssntp # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of @@ -51,3 +51,5 @@ # Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats + +ntpsigndsocket /var/lib/samba/ntp_signd/ |
Cambiate i permessi delle cartelle NTP che devono essere accessibili dal demone:
chgrp ntp /var/lib/samba/ntp_signd/ |
Configurazione del server DNS
Controllando gli indizi su BIND presenti nell’output del provisioning, modificate il file /etc/named.conf
e ricordate di riempire le zone appropriate con i record corretti. Rimpiazzate i miei indirizzi con i vostri, ovviamente:
--- named.conf.rpmnew 2013-10-30 12:35:25.000000000 +0100 +++ named.conf 2014-02-11 10:19:13.361403985 +0100 @@ -8,29 +8,24 @@ // options { - listen-on port 53 { 127.0.0.1; }; + listen-on port 53 { 127.0.0.1; 192.168.0.17; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; - allow-query { localhost; }; + // forwarders { 192.168.1.54; 192.168.1.55; }; + allow-query { any; }; - /* - - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - - If you are building a RECURSIVE (caching) DNS server, you need to enable - recursion. - - If your recursive DNS server has a public IP address, you MUST enable access - control to limit queries to your legitimate users. Failing to do so will - cause your server to become part of large scale DNS amplification - attacks. Implementing BCP38 within your network would greatly - reduce such attack surface - */ - recursion yes; - - dnssec-enable yes; - dnssec-validation yes; - dnssec-lookaside auto; + /* Allow recursion from Samba server itself and its Windows management system */ + allow-recursion { + 192.168.0.17; + 192.168.1.11; + }; + + dnssec-enable no; + dnssec-validation no; + // dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; @@ -38,7 +33,8 @@ managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; - session-keyfile "/run/named/session.key"; + + tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab"; }; logging { @@ -56,3 +52,6 @@ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; +dlz "example.com" { + database "dlopen /usr/lib64/samba/bind9/dlz_bind9_9.so"; +}; |
Il server può anche essere autoritativo per zone “stub” aggiuntive ospitate sulla stessa istanza di BIND in normali file di testo, per esempio:
// Additional zones required for EXAMPLE zone "swisslos.ch" IN { type master; file "/var/named/swisslos.ch.zone"; }; |
Cambiate i permessi per le directory che contengono le zone dinamiche che devono essere accessibili a BIND:
chgrp named /var/lib/samba/private /etc/krb5.conf chmod g+rx /var/lib/samba/private |
Se avete disabilitato IPv6 sul sistema disabilitatelo anche su BIND, eviterete così di riempire i log con messaggi inutili. Aggiungete la seguente linea a /etc/sysconfig/named
:
OPTIONS="-4" |
Avvio dei servizi
Configurate Samba per usare il proprio DNS server recursivo BIND come server DNS primario. Questo è necessario per il corretto funzionamento del Domain Controller, che dovrà trovare tutti i record del proprio dominio. Ogni richiesta extra indirizzata al server sarà risolta attraverso richieste recursive con i DNS configurati.
Modificate /etc/sysconfig/network-scripts/ifcfg-
e cambiate la linea DNS1 come segue:
DNS1=192.168.0.17
Poi cancellate tutte le altre linee DNS* dal file. Successivamente riavviate la rete:
systemctl restart NetworkManager |
Finalmente avviate Bind, il server NTP e Samba:
systemctl start named systemctl start samba systemctl start ntpd |
Troubleshooting
Per il debugging, lanciate Bind, il server NTP e Samba con le seguenti opzioni. Questo avvierà tutti i servizi senza mandarli in background e stamperanno i messaggi di debug sul terminale:
named -u named -f -g -d 2 ntpd -u ntp:ntp -g -I 192.168.23.08 -D 3 samba -i -M single -d 3 |
MS-SNTP troubleshooting
Per fare il troubleshooting delle impostazioni NTP, eseguite i seguenti comandi sui client Windows per controllare le impostazioni e lo status del Windows Time Service:
w32tm /query /status /verbose |
Dovreste ottenere un output come il seguente:
Leap Indicator: 0(no warning) Stratum: 4 (secondary reference - syncd by (S)NTP) Precision: -6 (15.625ms per tick) Root Delay: 0.0458527s Root Dispersion: 7.9058500s ReferenceId: 0xC0A81708 (source IP: 192.168.0.17) Last Successful Sync Time: 8/19/2013 2:33:08 PM Source: samba.example.com Poll Interval: 10 (1024s) Phase Offset: -0.0377036s ClockRate: 0.0156007s State Machine: 1 (Hold) Time Source Flags: 2 (Authenticated ) Server Role: 0 (None) Last Sync Error: 0 (The command completed successfully.) Time since Last Good Sync Time: 34.8648825s |
L’output identifica l’ultima opzione di sync avvenuta con successo; il fatto che la comunicazione client / server sta usando MS-SNTP per comunicare (Time Source Flags: 2 (Authenticated )) e che l’ultimo comando è stato eseguito con successo.
Nel caso non funzioni, per impostare manualmente la configurazione di Windows Time Service nella lettura delle impostazioni dal dominio, effettuare i seguenti comandi per il reset ed una nuova sincronia con il server:
w32tm /config /update /syncfromflags:DOMHIER w32tm /resync |
Poi controllate di nuovo lo stato con il comando precedente.
Se il time server specificato nel client Windows è un normale server NTP, allora il client Windows non chiederà risposte firmate MS-SNTP. Il comando per sincronizzare il clock è il seguente:
w32tm /config /update /syncfromflags:MANUAL w32tm /resync |
Questo è il risultato della query:
Leap Indicator: 0(no warning) Stratum: 5 (secondary reference - syncd by (S)NTP) Precision: -6 (15.625ms per tick) Root Delay: 0.0853119s Root Dispersion: 7.8537712s ReferenceId: 0xC0A80101 (source IP: 192.168.1.1) Last Successful Sync Time: 1/28/2014 3:47:02 PM Source: 192.168.1.1 Poll Interval: 10 (1024s) Phase Offset: 0.3340008s ClockRate: 0.0156001s State Machine: 1 (Hold) Time Source Flags: 0 (None) Server Role: 0 (None) Last Sync Error: 0 (The command completed successfully.) Time since Last Good Sync Time: 3.3566832s |
Notate che il campo “Time Source Flags” non mostra la sincronia come “Authenticated”.
Autenticazione Kerberos
Testate la password di Administrator di Active Directory e controllate che il ticket Kerberos e le password policies siano validi:
$ kinit administrator@EXAMPLE.COM Password for administrator@EXAMPLE.COM: Warning: Your password will expire in 41 days on Mon 20 May 2013 02:19:04 PM CEST $ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: administrator@EXAMPLE.COM Valid starting Expires Service principal 04/08/2013 15:45:14 04/09/2013 01:45:14 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 04/09/2013 15:45:10 |
SMB/CIFS file sharing
Dovreste vedere tutte le vostre condivisioni di default con il seguente comando:
$ smbclient -L localhost -U% |
Per testare che l’autenticazione sia funzionante per le risorse CIFS, dovreste provare a connettervi alla share di netlogon usando la password di Administrator che avete impostato precedentemente:
$ smbclient //localhost/netlogon -UAdministrator%'Password01' -c 'ls' |
Inserimento e cancellamento dei record DNS GSSEC
Per vedere tutti i record necessari per trovare un domain controller del dominio che si sta contattando siano esposti nel DNS, lanciate i seguenti comandi:
$ host -t SRV _ldap._tcp.example.com. _ldap._tcp.example.com has SRV record 0 100 389 samba.example.com. $ host -t SRV _kerberos._udp.example.com. _kerberos._udp.example.com has SRV record 0 100 88 samba.example.com. $ host -t A samba.example.com. samba.example.com has address 192.168.0.17 |
Per testare gli update dinamici del DNS dal client Windows eseguite i seguenti comandi sul client Windows:
ipconfig /registerdns |
Questo creerà un record DNS per il sistema nella zona DNS di Active Directory utilizzando un update sicuro autenticato su Kerberos.
Se il record non appare, cominciate ad indagare sul server DNS per la disponibilità del record e per il funzionamento corretto della zona DLZ. Per procedere lanciare il seguente comando con Samba e Bind entrambi avviati in foreground:
samba_dnsupdate --verbose --all-names samba_dnsupdate --verbose |
Questo comando cercherà l’insieme minimo di record DNS necessari per Active Directory dal database Samba e proverà a reinserirli all’interno della zona utilizzando un update DNS autenticato con Kerberos (GSSEC) sul server BIND.
Se ottenete il messaggio dns_tkey_negotiategss: TKEY is unacceptable
mentre lanciate il comando; significa che avete qualche problema con il vostro file keytab Kerberos relativo a BIND. Eseguite il seguente comando per controllare che i “service principals” siano contenuti nel file:
# klist -k -K -t /var/lib/samba/private/dns.keytab Keytab name: FILE:/var/lib/samba/private/dns.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ |
Se ottenete una lista vuota come quella qua soora, estraete il service principal del DNS con il seguente comando:
samba-tool domain exportkeytab --principal=DNS/samba.example.com \ /var/lib/samba/private/dns.keytab |
Dopo la generazione, controllate di nuovo il suo contentuo. Se è completamente corrotto, rigeneratelo e riapplicate nuovamente i permessi. Dovreste avere un contenuto come il seguente per un corretto funzionamento:
# klist -k -K -t /var/lib/samba/private/dns.keytab Keytab name: FILE:/var/lib/samba/private/dns.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 1 15/04/2013 14:08:56 DNS/samba.example.com@EXAMPLE.COM (0xd95bd6c789b30d0d) 1 15/04/2013 14:08:56 DNS/samba.example.com@EXAMPLE.COM (0xd95bd6c789b30d0d) 1 15/04/2013 14:08:56 DNS/samba.example.com@EXAMPLE.COM (0x9208e7dd4029fe8bdaa18dee16ffb8fc) 1 15/04/2013 14:08:56 DNS/samba.example.com@EXAMPLE.COM (0x79c8d7df152f3a7d5c42a3fe64248caa4faf854579b66453bea9af7c155286f9) 1 15/04/2013 14:08:56 DNS/samba.example.com@EXAMPLE.COM (0x5ab2a4df523518d47d3b8f6be79faa2f) |
Aggiustamenti alla configurazione di rete dei client Windows
Disabilitazione di NetBios over TCP/IP
Per fare i test necessari, siate sicuri che NetBIOS over TCP/IP sia disabilitato nelle impostazioni avanzate TCP/IP sui client Windows.
Windows 2000 e successivi fanno partire due connessioni simultaneamente su un server; una sulla porta 445 ed una sulla porta 139. Se il client ottiene una risposta dalla porta 445 effettuerà il reset (RST) della connessione sulla porta 139. Se invece ottiene una risposta soltando dalla porta 139, userà quella. Se disabilitate NBT (NetBIOS over TCP/IP) sui vostri client, solo la porta 445 sarà utilizzata. I client pre-Windows 2000 usano solo la porta 139, senza supporto per CIFS o SMB 2.x.
Disabilitazione del Teredo IPv6 Tunneling
Per disabilitare IPv6 ed il Teredo IPv6 Tunnelling eseguite i seguenti comandi come Administrator nel prompt dei comandi di Windows:
netsh interface teredo set state disabled netsh int ipv6 isatap set state disabled netsh int ipv6 6to4 set state disabled |
Disabilitazione del test NCSI
Per disabilitare il test di connettività internet “Network Connectivity Status Indicator” sui server Microsoft, avviate il Group Policy Editor (gpedit.msc); navigate nell’alberatura corretta ed impostate “Turn off Windows Network Connectivity Status Indicator active tests” a Enable.
Integrazione con Windows firewall
Per Windows 7, le seguenti porte devono essere abilitate nel firewall; tutte le altre regole devono essere disabilitate. Questo è un sottoinsieme delle porte elencate da Microsoft nell’elenco di quelle necessarie per Active Directory.
Comunicazioni dal client Windows verso il domain controller:
* TCP: 135, 445, 3268, 1024-5000
* TCP/UDP: 53, 123, 88, 389, 464
Comunicazioni dal domain controller verso il client Windows:
* TCP: 135, 445, 1024-1048
Il supporto TLS per LDAP (dominio locale su porta 389 e Global Catalogue su porta 3268) perchè le connessioni sono fatte con SASL, utilizzando GSS-API e quindi impiegando Kerberos e la criptazione a livello di sessione. Per dettagli sull’integrità del messaggio (signing) e sulla confidenzialità del messaggio (sealing) per favore consultate questo ottimo articolo della University di Washington che spiega l’autenticazione in un modo molto semplice.
Le porte RPC possono essere ridotte anche ad una singola porta, ma in questo caso perdereste un sacco di funzionalità. Per esempio, avviare le operazioni pianificate di Windows aprià una porta RPC aggiuntiva (ebbene sì), e se il sistema non dispone di più porte da allocare, il processo fallirà miseramente. Dai test nel nostro ufficio, 24 porte sono abbastanza per la gestione del sistema tramite dominio ed il normale utilizzo come desktop dei sistemi.
Per far sì che il server RPC ascolti sul range di porte 1024-1048; bisognerà importare il seguente file di registro e riavviare il sistema:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet] "Ports"=hex(7):31,00,30,00,32,00,34,00,2d,00,31,00,30,00,34,00,38,00,00,00,00,\ 00 "PortsInternetAvailable"="Y" "UseInternetPorts"="Y" |
Da notare che i seguenti comandi Windows mostreranno ancora l’elenco completo del range di porte RPC per i servizi di Windows:
netsh int ipv4 show dynamicport udp netsh int ipv4 show dynamicport tcp |
Quelli che seguono sono i comandi necessari per aggiungere le regole al Windows Firewall dalla comanda line. Danno per scontato che vogliate abilitare tutta la rete 192.168.0.0/24 dove risied il Domain Controller:
netsh advfirewall firewall add rule name="Samba-TCP-In" protocol=TCP localport="135,445,1024-1048" action=allow dir=IN remoteip=192.168.0.0/24 netsh advfirewall firewall add rule name="Samba-TCP-Out" protocol=TCP localport="53,88,123,135,389,445,464,1024-5000,3268" action=allow dir=OUT remoteip=192.168.0.0/24 netsh advfirewall firewall add rule name="Samba-UDP-Out" protocol=UDP localport="53,88,123,389,464" action=allow dir=OUT remoteip=192.168.0.0/24 |
Per effetturare il debug delle connessioni lato Windows, utilizzate il comando PortQueryUI
che potete scaricare dal sito Microsoft:
* http://www.microsoft.com/en-us/download/details.aspx?id=24009
Se durante il debug vi trovate a cercare di capire che cosa sono quegli strani record (come RT) che vedete richiesti nel DNS di Samba da parte dei client Windows, controllate ai seguenti link:
* http://www.iana.org/assignments/dns-parameters/dns-parameters.xml
* http://technet.microsoft.com/en-us/library/cc758321%28v=ws.10%29.aspx