DMZ, Firewall ve Active Directory
Merhaba,
Kurumsal destek hizmeti verdigim müsterilerimden siklikla gelen istek Firewall arkasinda bulunan Domain Controller (DC) larin nasil yönetilecegi olmustur. Sistem ve Network Admin’lerin farkli oldugu takimlarda port kullanimlarinin degisikligi, eger bir change management’i takip etmiyorsa Sistem Admin’ler için hemen fakedemeyecekleri sorunlara yol açabilir. Bir DC tombstone zamani boyunca replike etmiyorsa, bunu farkedemeyebilirsiniz ve sonrasinda yeniden DCPROMO’ya gidebilecek bir sorun ile karsilasabilirsiniz.
Burada özellikle yapilmasi gereken islem Remote Procedure Call (RPC) iletisimin nasil olacagina karar vermektir. Türkçe makalelerde Uzaktan Yordam Çagrisi olarak çevrimini bulabileceginiz RPC, temelde uzaktan bir sunucu üzerinde bir procedure (yordam) in çalistirilmasini amaçlayarak tasarlanmistir. Bu iletisimin temelinde çagrida bulunacagimiz servisin hangi port üzerinden konustugunu ögrenmek ve sonrasinda o port üzerinden iletisime geçmek yatmaktadir. Bu nedenle ilk asamada hedef sunucu üzerindeki End Point Mapper (EPM)’a TCP 135 üzerinden baglanarak hangi servise baglanmak istedigimizi Universally unique identifier (UUID) belirterek söyleriz. Bu UUID tanimlari standard oldugu için hedef sunucu hangi servise baglanacagimizi bilir ve bize hangi port’u kullanmamiz gerektigini cevap olarak geri döner.
AD servisleri varsayilan olarak “sabit” portlari kullanmazlar. Servisin baslamasiyla birlikte ephemeral port (kisa süreli) baglanti noktalarindan bir tanesini rasgele seçmektedir. Bu baglanti noktalari IANA tarafindan tanimlanmis baglanti noktalarinin disinda kalan baglanti noktalarindan olusturulmus bir araliktir. Eger bu portlar sabit degilse, Firewall üzerinde tanimlarini nasil yapacagiz? Bunun için 3 seçenegimiz vardir:
- Kisitlama olmadan RPC tanimlamasi yapmak
- Kisitlanmis RPC (NTDS, Netlogon, FRS and DFSR)
- RPC UUID Mapping on firewalls
1. Genelde RPC’nin belirli bir port araligini kullanilmasi saglanarak sadece bu portlarin açilmasi saglanir. Eger herhangi bir RPC kisitlamasi yapmiyorsaniz,Windows 2003 sunucular önünde bulunana Firewall üzerinde TCP/UDP 1024 – 5000 araligini, Windows Server 2008 ve üzeri sunucular için ise 49152 – 65535 araligini açmaniz gerekmektedir. Tabii ki sadece dinamik portlarin açilmasi yetmeyecektir. Gerekli olan portlarin bir listesini asagida bulabilirsiniz. Sizin ortaminizda SSL kullanilmiyorsa, DC görevleri farkli ise bu portlardan bazilarina açamaya gerek olmayacaktir.
* Vista ve üzerindeki istemciler parola degisikliklerinde Kerberos Password change (kpasswd) servisini kullanmaktadir. Bu servis TCP/UDP port 464 üzerinden hizmet vermektedir.
** 123/UDP portu sadece Windows Time Service’nin external trust üzerinden senkronize etmesini sagladiysaniz gereklidir.
Gerekli olan tüm portlar ile ilgili referans olarak KB makalesini asagida bulabilirsiniz.
832017 Service overview and network port requirements for the Windows Server system: https://support.microsoft.com/kb/832017
2. Dedigim gibi genelde port kisitlamasina gidilir. Bunun iki yöntemi vardir:
- Port araligini kisitlamak
- Gerekli servisler için sabit portlarin kullanilmasi
2003’den bu yana tercih edilen örnegin 5000 – 5100 gibi bir port araliginin kullanilmasini saglamaktir. Bunun için gerekli registry ayarlarina asagidaki makalede bulabilirsiniz.
154596 How to configure RPC dynamic port allocation to work with firewalls https://support.microsoft.com/kb/154596
Eger bir kisitlama yaptiysaniz, yukaridaki tabloya göre 49K – 65K araligi yerine sizin ayarladiginiz portlarin Firewall üzerinde açilmasi gerekmektedir.
RPC’nin kisitlanmasi, onun kullanacagi portlarin kisitlanmasindan farklidir. Siz NTDS, FRS veya DFSR’in sabit portlar üzerinden konusmasini isteyebilirsiniz. Bunun için degistirmeniz gereken registry anahtarlari veya diger yöntemler asagidaki gibidir:
NTDS: (Replication)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
Adi: TCP/IP Port
Tür degeri: REG_DWORD
Veri degeri: <Ondalik (Decimal) - kullanilmayan herhangi bir port numarasi>
Netlogon: (Client logon)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
Adi: DCTcpipPort
Tür degeri: REG_DWORD
Veri degeri: <Ondalik (Decimal) - kullanilmayan herhangi bir port numarasi>
Bu degerler ile ilgili daha fazla bilgiyi bulabilecegini makale için…
224196 Restricting Active Directory replication traffic and client RPC traffic to a specific port https://support.microsoft.com/kb/224196
FRS:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTFRS\Parameters
Adi: RPC TCP/IP Port Assignment
Tür degeri: REG_DWORD
Veri degeri: <Ondalik (Decimal) - kullanilmayan herhangi bir port numarasi>
319553 How to restrict FRS replication traffic to a specific static port https://support.microsoft.com/kb/319553
DFSR:
DFSR için registry degisikligi yerine Dfsrdiag.exe aracini kullanarak DFSR iletisimi ve Yönetimi için kullanilacak portu belirleyebilirsiniz:
DFSRDiag StaticRPC /port: nnn /Member: BrServer01.corp.contoso.com
Bu örnekte “nnn” port degerini, “BrServer01.corp.contoso.com” hedef sunucu FQDN’ini göstermektedir. Eger sunucu ismi girmezseniz, üzerinde DFSRDiag çalistirdiginiz sunucu üzerinde islemler yapilacaktir.
Not: StaticRPC varsayilan degeri “0” dir ve bu da dinamik port tanimlamasini göstermektedir.
Yeniden baslatmaniz gerekir:
2003 sunucular üzerinde bu degisiklikten sonra sistemi yeniden baslatmaniz etmeniz gerekse de 2008 sunucularda sadece "Active Directory Domain Services" servisini yeniden baslatmaniz ki bu ayrica FRS veya DFSR servisilerini de baslatacaktir, yeterli olabilir. Ancak NetLogon servisini ayrica baslatmaniz gerekir. Bizim tavsiyemiz bu tip degisikliklerde çogu zaman sunucuyu yeniden baslatmak olacaktir.
Bu yöntemler herhangi bir kisitlama olmadan ayarlamanin yapilmasindan tabii ki daha güvenlidir. Ancak Firewall arkasinda bulunan tüm DC’ler üzerinde registry ayarinin yapilmasini gerektirmektedir. Ayrica her DC eklediginizde yine ayni sekilde bu ayarlarin yapilmis olmasi gerekmektedir.
Bu sadece RPC’nin veya kullanilacak araligin kisitlanmasi ile ilgilidir. Gerekli olan digger portlarin da ayrica açilmasi gerekmektedir:
* Vista ve üzerindeki istemciler parola degisikliklerinde Kerberos Password change (kpasswd) servisini kullanmaktadir. Bu servis TCP/UDP port 464 üzerinden hizmet vermektedir.
** 123/UDP portu sadece Windows Time Service’nin external trust üzerinden senkronize etmesini sagladiysaniz gereklidir.
Firewall üzerinde RPC UUID Mapping
RPC tanimini yaparken, istekte bulunan tarafinda hangi servise ulasmak istediginizi EPM üzerinden UUID belirterek yaptigini söylemistik. Günümüzde bazi Firewall uygulamalari istekte bulunan UUID tanimi ile ilgili bir eslestirme (mapping) varsa, hedef sunucudan gelen cevapta yer alan dinamik port ile iletisimde bulunan tarafin kaynak portu arasinda gerçeklesecek konusmaya izin vermesi mümkündür. Bunu yaparken istemciye EPM’den gelen cevabin içerisinde yer alan port bilgisini baz alir ve sonraki iletisimin ve BIND isteklerinin “geçici” olarak saglanmasi için gerekli kurallari olusturur. Bu eslestirmeleri yapabilmek için Active Directory (AD) tarafindan kullanilan UUID’lerin listesine ihtiyaciniz olacaktir:
Örnegin ISA/TMG stateful olarak uygulama seviyesinde denetim yaparak UUID’leri control edebilir. Ilk EPM istegine izin verdikten sonra eger hedef uygulama bir port numarasi ile birlikte cevap veriyorsa, ISA/TMG bu data akisina izin verebilir. Bunun nasil yapilacagi ile ilgili asagidaki yaziyi okuyabilirsiniz.
https://www.isaserver.org/articles/2004rpc.html
DNS
DNS ile ilgili olarak ayri bir baslik açmak istedim. En çok atlanilan konu DMZ arkasinda bulunan DNS üzerinde forwarder veya Root Hints kullanilmasidir. Böyle bir durumda DNS sunucu sadece UDP/TCP 53 üzerinden konusmayacaktir. DNS UDP 53 üzerinden istekleri dinler ve cevaplar. (TCP 53 ise UDP paket boyutuna sigmayacak istekler, zone transferleri vb. için kullanilir.) Ancak eger recursive olarak forward edecekse, bunu yaparken ephemeral portlardan dinamik bir port seçip, forward ettigi sunuculara veya Root Hints’e sorar. Iste bu durumda yine dinamik portlarinin tanimlanmasina ihtiyaç duyarsiniz. Eger burada bir kisitlama yapmak istiyorsaniz, SendPort registry anahtarini kullanabilirsiniz.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters\SendPort
Adi: SendPort
Tür degeri: REG_DWORD
Veri degeri: 53
Firewall arkasinda DNS sunucusu varsa, UDP/TCP 53 tanimlamasi zaten yapildigindan, SendPort olarak 53 kullanmak kolay olacaktir.
Client Ports
Ayrica eger client’larin erisimi için dinamik olarak kullanilacak client portlari için de (source port) bir çalisma yapmak isteyebilirsiniz. Windows Vista öncesinde ki clientlar 1024 – 5000 araliginda bir dinamik port seçerek, Windows Vista sonrasinda ki clientlar ise 49152 ve 655335 araligindan bir port kullanarak isteklerini gönderirler. Eger bu portlarin kisitlanmasi gerekiyorsa, Windows Vista öncesi ve sonrasindaki clientlar için farkli çözümler olacaktir.
Windows 2000, Windows XP ve Windows Server 2003:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Adi: MaxUserPort
Tür degeri: REG_DWORD
Veri degeri: <Decimal (Ondalik) – Aralik olarak. 5000 - 65535>
Windows Vista, Windows 7/8 ve Windows Server 2008, 2008 R2 ve 2012:
Windows Vista sonrasinda ki clientlar için “simdlik” sadece netsh kullanilmaktadir. Netsh ile birlikte baslangiç port degeri ve aralik degeri verilebilir. Bu tanimlayi hem TCP ve UDP hem de IPV4 ve IPV6 olarak ayri ayri vermek gerekir.
netsh int ipv4 set dynamic tcp start=<baslangiç_port_no> num=<aralik>
Örnek:
netsh int ipv4 set dynamicport tcp start=50000 num=500
netsh int ipv4 set dynamicport udp start=50000 num=500
netsh int ipv6 set dynamicport tcp start=50000 num=500
netsh int ipv6 set dynamicport udp start=50000 num=500
- Aralik olarak en küçük deger 255 verebilirsiniz.
- Minimum baslangiç portu 1025 olabilir.
- Kullanilabilecek en son port 65535 oldugundan ona uygun olacak sekilde baslangiç portu ve aralik tanimlamasi yapilmasi gerekir.
Daha fazla bilgi için:
The default dynamic port range for TCP/IP has changed in Windows Vista and in Windows Server 2008
https://support.microsoft.com/kb/929851/EN-US
Tüm ayarlamalar sonunda eger portlarin dogru ayarlandigindan emin olmak isterseniz, PortQRYUI aracini kullanabilirsiniz. Bu araçla birlikte sadece port bazinda degil, EPM ve UUID sorgularinin yapilmasini görebilirsiniz.
Okan ÇETINIM