Premier Training & Business Partner Red Hat

Samba 4 Active Directory con zone Bind DLZ, update dinamici nel DNS, porte RPC statiche per Windows

Simone Caronni
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

samba_logo_4cUna 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.

Disable-netbios

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.

Disable-ncsi

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

Info about author

Simone Caronni