Microsoft Windows XP Service Pack 2, Windows Firewall’ı içermektedir. Windows Firewall, ICF’nin (Internet Connection Firewall) güçlendilmiş bir sürümüdür. Windows XP Service Pack 2 yüklü bir bilgisayar üzerinde Windows Firewall standart olarak aktif gelmektedir. Windows Firewall açık olarak tutulduğu taktirde bazı network bağlantılarını bloklayacaktır, bu network bağlantıları TCP/IP, Named Pipes, Multiprotocol Remote Procedure Call (RPC) olarak sıralanabilir. Bu bloklama ile birlikte eğer bu işletim sistemi üzerinde yüklü olan bir SQL var ise bu durumdan olumsuz olarak etkilenecektir.
Microsoft Data Engine (MSDE), Microsoft SQL Server 2000 ve Microsoft SQL Server 2005 Windows Firewall dan olumsuz olarak etkilenecek olan SQL sürümleridir. Bu makalemizde Microsoft Windows XP SP2 işletim sistemine sahip ve Windows Firewall’ı aktif olan bir sistemin üzerinde SQL Server çalıştırılabilmesi için ne gibi düzenlemelerin yapılması gerektiğinden bahsedeceğiz.
Eğer elinizde SQL Server veya MSDE ye Named Pipes, TCP/IP veya RPC kullanarak ulaşmaya çalışan bir uygulama varsa ve siz Windows Firewall’un aktif olması nedeniyle bu erişime izin verememiş iseniz, Windows Firewall’ı devre dışı bırakmak yerine makalede anlatılan işlemleri uygulayarak hem güvenliğinizi sağlamaya devam etmiş olur, hem de uygulamanın çalışmasını sağlamış olursunuz.
Makalemizde iki script yer alacaktır;
İlk scriptte Windows Firewall, SQL Server’ın network üzerindeki tüm protokolleri dinleyebilmesi için konfigure edilmesidir.
İkinci scriptte ise Windows Firewall, SQL Server’ın sadece TCP/IP üzerinden akan paketleri dinleyebilmesi için konfigure edilmesidir.
Güvenlik nedeniyle bizler sadece esas olarak ihtiyaç duyacağımız portların açılmasını tercih etmeliyiz.
| Resim 1 |
| Resim 2 |
1. Script;
– Bu script, yanlızca Microsoft Windows Service Pack 2 yüklü bir sistem üzerinde çalıştırılmalıdır !
Script’i oluşturmak için şu adımları izleyin:
1- Başlat-Çalıştır-Notepad
2- Aşağıdaki kodu mavi olarak işaretleyin, üzerine sağ tıklayın ve Kopyala seçeneğini seçin, Notepad içerisine yapıştırın.
echo off
if "%1"=="-np" goto HandleNp
if "%1"=="-rpc" goto HandleRpc
if "%1"=="-tcp" goto HandleTcp
if "%1"=="-browser" goto HandleBrowser
rem Usage
:Usage
echo "Usage: setupSqlServerPortAll -[np | rpc | tcp | browser] -port [portnum] -[enable | disable]
echo "-np : Setup SQLServer to listen on Named Pipe connections for local subnet only"
echo "-rpc : Setup SQLServer to listen on RPC multiprotocol for local subnet only"
echo "-tcp : Setup SQLServer to listen on TCP connections for local subnet only"
echo " Must specify a port if -tcp option is chosen."
echo "-browser : Setup SQLServer to provide SSRP service to support named instances"
echo "-port : Applies only for tcp"
echo " One of the following options MUST be specified"
echo "-enable: Enables a port"
echo "-disable: Disables a port"
goto Exit
:HandleTcp
echo %2
if "%2"=="-port" goto cont
goto Usage
:cont
if "%3"=="" goto Usage
if "%4"=="-enable" goto EnableTcp
if "%4"=="-disable" goto DisableTcp
goto Usage
:EnableTcp
echo "Enabling SQLServer tcp access for port %3 local subnet only"
netsh firewall set portopening tcp %3 SQL%3 ENABLE subnet
goto Exit
:DisableTcp
echo Disabling SQLServer tcp access for port %3 local subnet only"
netsh firewall set portopening tcp %3 SQL%3 disable subnet
goto Exit
:HandleNp
if "%2"=="-enable" goto EnableNp
if "%2"=="-disable" goto DisableNp
goto Usage
:EnableNp
echo "Enabling SQLServer named pipe access for local subnet only"
netsh firewall set portopening tcp 445 SQLNP ENABLE subnet
goto Exit
:DisableNp
echo Disabling SQLServer named pipe access for local subnet only"
netsh firewall set portopening tcp 445 SQLNP DISABLE subnet
goto Exit
:HandleRpc
if "%2"=="-enable" goto EnableRpc
if "%2"=="-disable" goto DisableRpc
goto Usage
:EnableRpc
echo "Enabling SQLServer multiprotocol access for local subnet only"
netsh firewall set portopening tcp 445 SQLNP enable subnet
goto Exit
:DisableRpc
echo Disabling SQLServer multiprotocol access for local subnet only"
netsh firewall set portopening tcp 445 SQLNP disable subnet
goto Exit
:HandleBrowser
if "%2"=="-enable" goto EnableBrowser
if "%2"=="-disable" goto DisableBrowser
goto Usage
:EnableBrowser
echo "Enabling SQLServer SSRP service for local subnet only"
netsh firewall set portopening udp 1434 SQLBrowser enable subnet
goto Exit
:DisableBrowser
echo "Enabling SQLServer SSRP service for local subnet only"
netsh firewall set portopening udp 1434 SQLBrowser disable subnet
goto Exit
:Exit
endlocal
3- Bu notepad dosyasını C: dizinine ConfigSQLPorts.txt ismi ile kaydedin, daha sonra dosya adını ConfigSQLPorts.bat olarak düzenleyin.
2.Script;
– Bu script, yanlızca Microsoft Windows Service Pack 2 yüklü bir sistem üzerinde çalıştırılmalıdır !
– Bu script SQL Server’ın sadece TCP/IP üzerinden akan paketleri dinleyebilmesini sağlar.
Script’i oluşturmak için şu adımları izleyin:
1- Başlat-Çalıştır-Notepad
2- Aşağıdaki kodu mavi olarak işaretleyin, üzerine sağ tıklayın ve Kopyala seçeneğini seçin, Notepad içerisine yapıştırın.
echo off
setlocal
if "%1"=="-port" goto HandleTcp
rem Usage
:Usage
echo "Usage: setupSqlServerPort -port [portnum] -[enable | disable] [ALL | SUBNET]"
echo -port : Specifies the port to be enabled or disabled. Port is not optional.
echo -enable: Enables a port
echo -enable ALL: enables access for ALL
echo -enable SUBNET: enables access for SUBNET
echo -disable: Disables a port
echo one of -enable or -disable must be specified
echo the default scope is SUBNET only
goto Exit
:HandleTcp
if "%2"=="" goto Usage
if "%3"=="-enable" goto EnableTcp
if "%3"=="-disable" goto DisableTcp
goto Usage
:EnableTcp
set SCOPE="%4"
if "%4"=="ALL" echo "Enabling SQLServer tcp access for port %2 ALL access"
if "%4"=="SUBNET" echo "Enabling SQLServer tcp access for port %2 subnet only access"
if "%4"=="" set SCOPE="SUBNET"
netsh firewall set portopening tcp %2 SQL_PORT_%2 ENABLE %SCOPE%
goto Exit
:DisableTcp
echo Disabling SQLServer tcp access for port %2"
netsh firewall set portopening tcp %2 SQL_PORT_%2 disable
goto Exit
:Exit
Endlocal
Bu notepad dosyasını C: dizinine setupSqlServerPort.txt ismi ile kaydedin, daha sonra dosya adını setupSqlServerPort.bat. olarak düzenleyin.
Elimizdeki .bat file dosyalara kısaca bir bakalım;
| Resim 3 |
Başlat-Çalıştır-Cmd komutu ile Resim-1 deki gibi komut satırına düşülür.
| Resim 4 |
Cd komutu ile root a inilir.
Dir *.bat komutu ile C: dizinindeki .bat file ların listelenmesi sağlanır.
SetupSqlServerPort.bat komutu girilir ve aşağıdaki çıktı elde edilir.
| Resim 5 |
Bu çıktıda bizlere komut dizimi hakkında gerekli bilgilendirme yapılır, dilerseniz bir iki komut girelim;
| Resim 6 |
Setupsqlserver –port [portnumber] –[enable or disable] komutundan örnek olması maksadıyla istifade ettik.
Bu komut dizimi ile Firewall üzerinden belirlediğiniz port numarasını SQL için enable veya disable duruma getirebilirsiniz.
| Resim 7 |
Setupsqlserverport – port [portnumber] –[enable or disable] subnet [networkid] komut dizimi ile verdiğiniz port numarası üzerinden sadece belirlenen subnet’in izinli olmasını sağlayabilirsiniz.
Örnekleri bu şekilde çoğaltmak mümkündür. Aslına bakacak olursanız pratikte hiçbir sistem yöneticisi bu tip bir uygulamaya gitmeyecektir. Ama çok spesifik durumlarda bu scriptlerin yerini başka birşeyin tutması da mümkün değildir. Örnek vermek gerekirse;
Geçmişte yer aldığım bir projede SQL ile entegre çalışan bir mobile uygulama yazılımı geliştirilmişti ve bu uygulama yazılımı kurulduğu sistemler üzerinde Windows Firewall dan kaynaklanan engellere maruz kalıyordu, ben bir Sistem Uzmanı olarak programın kurulduğu noktalara giderek Firewall üzerinden sorunları manuel bir şekilde çözmek için efor ve zaman harcıyordum. Sonunda bu scriptleri keşfettim ve yazılımcı arkadaşımıza bu scriptleri yazılımın içine entegre eedbilmesi halinde Windows Firewalları da bu şekilde hizaya getirebileceğini anlattım. Başarılı bir çalışma sonucunda artık yazılım kurulan noktalarda windows firewall açıkta olsa bir sorun teşkil etmiyordu, hem yazılımcı arkadaşlar hem de biz destek elemanları rahatımıza bu şekilde kavuşmuştuk
Umarım yararlı bir örnek ve makale olmuştır.
| Resim 8 |
Kaynak: Microsoft TechNet
Mükemmel Anlatım Emege Saygı :arrow: