مسدودسازی IP های حمله کننده به MySQL, MSSQL, RDP

مسدودسازی IP های حمله کننده به MySQL ,MSSQL ,RDP

758views

یکی دیگر از مواردی که قصد داریم در زاگریو به آن بپردازیم، مسدودسازی IP های حمله کننده به MySQL ،MSSQ ،RDP، است. تا مدیریت سرور شما، توسط این آی‌پی‌ها دیگر مورد حمله قرار نگیریند و امنیت سرور شما، همیشه برقرار باشد.

مسدودسازی IP های حمله کننده به MySQL, MSSQL, RDP ️

اگر سرویس‌هایی بر روی سرور خود دارید، که باید از بیرون از سازمان شما به آن منابع دسترسی پیدا کرد، ممکن است شما نیز قربانی حملات بی‌پایان و تلاش‌های هکرها برای Brute Force باشید، راه حل این موضوع مسدودسازی IP های حمله کننده به MySQL, MSSQL, RDP.

سرویس‌هایی نظیر RDP ،MYSQL ،MSSQL از امثال این سرویس‌ها هستند و مسدودسازی IP های حمله کننده تنها راه است.

حملات صورت گرفته علاوه بر مصرف میزان پهنای باند شما و کند کردن سرعت اتصال، منابع بسیاری از پردازنده و حافظه را نیز هدر می‌دهند، از طرفی داشتن رمز عبورهای ضعیف خصوصا در محیط‌های اشتراکی، باعث نفوذ هکرها به سیستم شده و مشکلات فراوانی را برای شما پدید می‌آورد.

مسدودسازی IP

در این آموزش سعی داریم تا با استفاده از پاورشل، لاک‌های درج شده در Event Log را استخراج و پس از جدا کردن قسمت‌های آدرس IP که برای فرض مثال بیش از ۳ بار خطای ورود ناموفق داشته‌اند یک Rule با شرط Block در سیستم فایروال ویندوز ایجاد کنیم.

ما در این روش، به منظور امکان بررسی IP هایی که مسدود شده‌اند، تمامی آدرس‌ها را در فایل ذخیره کرده و برای استفاده‌های آتی نگهداری می‌کنیم.

️نکته️:
– می‌توان لاگ‌ها را حذف نکرد و در ابتدا تاریخ و ساعت مشخص کرد که اسکریپت صرفا لاگ‌های یک روز پیش را جستجو کند.
– می‌توانید هیچ گونه فایلی نگهداری نکنید و مستقیما آن‌ها را در فایروال مسدود کنید.
– در یک بخش از کد مقداری تحت عنوان “{ $_.Count -gt 3 }” آمده است، که با افزایش یا کاهش این عدد می‌توانید به تعداد خطاهای لاگین مورد نظر برسید.
– برای اتوماتیک کردن پروسه، می‌توانید در Scheduled Tasks یک TASK با عنوان و زمان‌بندی مورد نظر خود ایجاد کنید.
– فایل دوم صرفا وظیفه وارد کردن آدرس IP ها از یک فایل برای ایجاد RULE های BLOCK را دارد و می‌توانید از آن در موارد دیگر نیز استفاده کنید و مسدودسازی IP را انجام دهید.

فایل شماره ۱- Block-Brute.ps1 | مسدودسازی IP

$datetime = (((get-date).ToUniversalTime()).ToString("yyyyMMddhhmmss"))
$regex = ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’

## MySQL ##
$input_path = "C:\BLOCK\mysql-raw.txt"
$output_file = "C:\BLOCK\mysql-all-ip.txt"
$output_unique = "C:\BLOCK\MySQL-Bruteforce-$datetime.txt"
Get-EventLog -Source MySQL -LogName Application | select Message | Out-File $input_path
Select-String -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file
Get-Content $output_file | sort | Group-Object | Where-Object { $_.Count -gt 3 } | Select -ExpandProperty Name | Get-Unique > $output_unique
c:\BLOCK\import-firewall-blocklist.ps1 -inputfile $output_unique
Remove-Item $input_path
Remove-Item $output_file

## MSSQL ###
$MSSQLinput_path = "C:\BLOCK\mssql-raw.txt"
$MSSQLoutput_file = "C:\BLOCK\mssql-all-ip.txt"
$MSSQLoutput_unique = "C:\BLOCK\MSSQL-Bruteforce-$datetime.txt"
Get-EventLog -LogName Application | Where-Object { $_.eventid -eq 18456 } | select Message | Out-File $MSSQLinput_path
Select-String -Path $MSSQLinput_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $MSSQLoutput_file
Get-Content $MSSQLoutput_file | sort | Group-Object | Where-Object { $_.Count -gt 3 } | Select -ExpandProperty Name | Get-Unique > $MSSQLoutput_unique
c:\BLOCK\import-firewall-blocklist.ps1 -inputfile $MSSQLoutput_unique
Remove-Item $MSSQLinput_path
Remove-Item $MSSQLoutput_file

Clear-EventLog -LogName Application

 

فایل شماره ۲- import-firewall-blocklist.ps1 | مسدودسازی IP

####################################################################################
#.Synopsis
# Block all IP addresses listed in a text file using the Windows Firewall.
#
#.Description
# Script will create inbound and outbound rules in the Windows Firewall to
# block all the IPv4 and/or IPv6 addresses listed in an input text file. IP
# address ranges can be defined with CIDR notation (10.4.0.0/16) or with a
# dash (10.4.0.0-10.4.255.255). Comments and blank lines are ignored in the
# input file. The script deletes and recreates the rules each time the
# script is run, so don't edit the rules by hand. Requires admin privileges.
# Multiple rules will be created if the input list is large. Requires
# Windows Vista, Windows 7, Server 2008 or later operating system. Blocking
# more than 5000 IP address ranges does delay initial connections, will slow
# the loading of the Windows Firewall snap-in, and will lengthen the time
# to disable/enable a network interface. This script is just a wrapper for
# the netsh.exe tool. You can block individual IP addresses too, you do not
# need to use CIDR notation for this (10.1.1.1/32), though this does work.
#
#.Parameter InputFile
# File containing IP addresses and ranges to block; IPv4 and IPv6 supported.
# By default, the script will look for and use a file named 'blocklist.txt'.
#
#.Parameter RuleName
# (Optional) Override default firewall rule name; default based on file name.
# When used with -DeleteOnly, just give the rule basename without the "-#1".
#
#.Parameter ProfileType
# (Optional) Comma-delimited list of network profile types for which the
# blocking rules will apply: public, private, domain, any (default = any).
#
#.Parameter InterfaceType
# (Optional) Comma-delimited list of interface types for which the
# blocking rules will apply: wireless, ras, lan, any (default = any).
#
#.Parameter DeleteOnly
# (Switch) Matching firewall rules will be deleted, none will be created.
# When used with -RuleName, leave off the "-#1" at the end of the rulename.
#
#.Example
# import-firewall-blocklist.ps1 -inputfile IpToBlock.txt
#
#.Example
# import-firewall-blocklist.ps1 -inputfile iptoblock.txt -profiletype public
#
#.Example
# import-firewall-blocklist.ps1 -inputfile iptoblock.txt -interfacetype wireless
#
#.Example
# import-firewall-blocklist.ps1 -inputfile IpToBlock.txt -deleteonly
#
#.Example
# import-firewall-blocklist.ps1 -rulename IpToBlock -deleteonly
#
#Requires -Version 1.0
#
#.Notes
# Author: Jason Fossen (http://www.sans.org/windows-security/)
# Version: 1.2
# Updated: 20.Mar.2012
# LEGAL: PUBLIC DOMAIN. SCRIPT PROVIDED "AS IS" WITH NO WARRANTIES OR GUARANTEES OF
# ANY KIND, INCLUDING BUT NOT LIMITED TO MERCHANTABILITY AND/OR FITNESS FOR
# A PARTICULAR PURPOSE. ALL RISKS OF DAMAGE REMAINS WITH THE USER, EVEN IF
# THE AUTHOR, SUPPLIER OR DISTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF
# ANY SUCH DAMAGE. IF YOUR STATE DOES NOT PERMIT THE COMPLETE LIMITATION OF
# LIABILITY, THEN DELETE THIS FILE SINCE YOU ARE NOW PROHIBITED TO HAVE IT.
####################################################################################

param ($InputFile = "BlockList.txt", $RuleName, $ProfileType = "any", $InterfaceType = "any", [Switch] $DeleteOnly)

# Look for some help arguments, show help, then quit.
if ($InputFile -match '/[?h]') { "nPlease run 'get-help .\import-firewall-blocklist.ps1 -full' for help on PowerShell 2.0 and later, or just read the script's header in a text editor.n" ; exit }

# Get input file and set the name of the firewall rule.
$file = get-item $InputFile -ErrorAction SilentlyContinue # Sometimes rules will be deleted by name and there is no file.
if (-not $? -and -not $DeleteOnly) { "nCannot find $InputFile, quitting...n" ; exit }
if (-not $rulename) { $rulename = $file.basename } # The '-#1' will be appended later.

# Description will be seen in the properties of the firewall rules.
$description = "Rule created by script on $(get-date). Do not edit rule by hand, it will be overwritten when the script is run again. By default, the name of the rule is named after the input file."

# Any existing firewall rules which match the name are deleted every time the script runs.
"nDeleting any inbound or outbound firewall rules named like '$rulename-#*'n"
$currentrules = netsh.exe advfirewall firewall show rule name=all | select-string '^[Rule Name|Regelname]+:\s+(.+$)' | foreach { $_.matches[0].groups[1].value }
if ($currentrules.count -lt 3) {"nProblem getting a list of current firewall rules, quitting...n" ; exit }
# Note: If you are getting the above error, try editing the regex pattern two lines above to include the 'Rule Name' in your local language.
$currentrules | foreach { if ($_ -like "$rulename-#*"){ netsh.exe advfirewall firewall delete rule name="$_" | out-null } }

# Don't create the firewall rules again if the -DeleteOnly switch was used.
if ($deleteonly -and $rulename) { "nReminder: when deleting by name, leave off the '-#1' at the end of the rulename.n" }
if ($deleteonly) { exit }

# Create array of IP ranges; any line that doesn't start like an IPv4/IPv6 address is ignored.
$ranges = get-content $file | where {($_.trim().length -ne 0) -and ($_ -match '^[0-9a-f]{1,4}[\.\:]')}
if (-not $?) { "nCould not parse $file, quitting...n" ; exit }
$linecount = $ranges.count
if ($linecount -eq 0) { "nZero IP addresses to block, quitting...n" ; exit }

# Now start creating rules with hundreds of IP address ranges per rule. Testing shows
# that netsh.exe errors begin to occur with more than 400 IPv4 ranges per rule, and
# this number might still be too large when using IPv6 or the Start-to-End format, so
# default to only 100 ranges per rule, but feel free to edit the following variable:
$MaxRangesPerRule = 100

$i = 1 # Rule number counter, when more than one rule must be created, e.g., BlockList-#001.
$start = 1 # For array slicing out of IP $ranges.
$end = $maxrangesperrule # For array slicing out of IP $ranges.
do {
$icount = $i.tostring().padleft(3,"0") # Used in name of rule, e.g., BlockList-#042.

if ($end -gt $linecount) { $end = $linecount }
$textranges = [System.String]::Join(",",$($ranges[$($start - 1)..$($end - 1)]))

"nCreating an inbound firewall rule named '$rulename-#$icount' for IP ranges $start - $end"
netsh.exe advfirewall firewall add rule name="$rulename-#$icount" dir=in action=block localip=any remoteip="$textranges" description="$description" profile="$profiletype" interfacetype="$interfacetype"
if (-not $?) { "
nFailed to create '$rulename-#$icount' inbound rule for some reason, continuing anyway..."}

"nCreating an outbound firewall rule named '$rulename-#$icount' for IP ranges $start - $end"
netsh.exe advfirewall firewall add rule name="$rulename-#$icount" dir=out action=block localip=any remoteip="$textranges" description="$description" profile="$profiletype" interfacetype="$interfacetype"
if (-not $?) { "
nFailed to create '$rulename-#$icount' outbound rule for some reason, continuing anyway..."}

$i++
$start += $maxrangesperrule
$end += $maxrangesperrule
} while ($start -le $linecount)

# END-O-SCRIPT

# Incidentally, testing shows a delay of 2-5 seconds sometimes for the initial
# connection when there are more than 5000 IP address ranges total in the various
# outbound rules (once established, there is no delay). However, it does not seem
# consistent. Also, at 5000+ subnets in one's rules, it delays the opening of the
# Windows Firewall snap-in, and at 9000+ subnets it sometimes prevents the WF snap-in
# from opening successfully at all. However, this behavior is not consistent either.

نحوه بکاپ‌گیری از SQL Server توسط PowerShell

1.5kviews

برای بکاپ‌گیری از بانک‌های اطلاعاتی Microsoft SQL Server به راحتی می‌توانید با استفاده از ماژول PowerShell که در نسخه ۲۰۱۲ معرفی شده است استفاده نمائید.

درصورتی‌که نسخه ۲۰۱۲ به بالا را به همراه Client Tools نصب نموده‌اید ماژول SQLPS قبلا نصب شده است.
جهت بررسی این مورد از دستور زیر می‌توانید استفاده نمائید:

Get-Module -ListAvailable

در صورت لزوم باید نرم‌افزارهای مورد نیاز را دانلود و نصب نمائید:

http://www.microsoft.com/en-us/download/details.aspx?id=29065

  • Microsoft® System CLR Types for Microsoft® SQL Server® ۲۰۱۲ (SQLSysClrTypes.msi)
  • Microsoft® SQL Server® ۲۰۱۲ Shared Management Objects (SharedManagementObjects.msi)
  • Microsoft® Windows PowerShell Extensions for Microsoft® SQL Server® ۲۰۱۲ (PowerShellTools.msi)

سپس برای فراخوانی ماژول‌ها:

Import-Module sqlps

پس از نصب ۴۶ دستور اضافه خواهد شد که موارد زیر از پرکاربردترین آن‌هاست.

 

Backup-SqlDatabase
Restore-SqlDatabase
Backup-ASDatabase
Restore-ASDatabase

 

کد زیر برای تهیه بکاپ و اضافه نمودن تاریخ به آن استفاده خواهد شد:

 


$DateTime = Get-Date -Format yyyyMMddHHmmss
$ServerInstance = "localhost\sqlexpress"
$Database = "databasenametobackup"
Backup-SqlDatabase -ServerInstance $ServerInstance -Database $Database -BackupFile "C:\path\to\store\backup\backup-$DateTime.bak"

SQL Server

اتصال به SQL Server با استفاده از SQL Managment Studio

18.8kviews

نرم‌افزار SQL Server Management Studio، یا به اختصار SSMS یک محیط یکپارچه برای مدیریت، اعمال تنظمیات، دسترسی و طراحی انواع قسمت‌های اس کیو ال سرور است. این نرم‌افزار امکان دسترسی، طراحی و مدیریت دیتابیس‌های اس کیو ال سرور، برای تمامی طیف‌های افراد مبتدی و حرفه‌ای را فراهم می‌کند. در زاگریو به بررسی این مبحث کاربردی خواهیم پرداخت.

SQL Server چیست

قبل از هر چیزی باید به بررسی معنی SQL Server، در بخش مدیریت سرور بپردازیم.  SQL که به عبارت سیکوئل نیز معروف است، مخفف عبارت Structured Query Language می‌باشد. اِس کیو اِل، یک زبان استاندارد برای دسترسی و کار با پایگاه‌داده (database) است. این زبان از سال ۱۹۸۷ یک زبان استاندارد بین المللی (ISO) بوده است.

نحوه اتصال به بانک اطلاعاتی sql server با استفاده از SQL Managment Studio

  • ابتدا کاربر باید این نرم‌افزار را تهیه کرده و بر روی کامپیوتر خود نصب کند.
  • پس از نصب نرم‌افزار از منوی Start در قسمت All Programs نرم‌افزار را اجرا کنید.
  • پس از اجرای نرم‌افزار SQL Server Management Studio فرم Connect to Server، باز می‌شود، اطلاعات مورد نیاز را مطابق دستورات زیر وارد می‌کنیم (دقت کنید که مرحله به مرحله کارها را انجام دهید).
  • Server Type (مدل سرور): پیش‌فرض را انتخاب می‌کنیم.
  • Server name (نام سرور): نام سروری که را از طریق ایمیل برای شما فرستاده شده است را وارد می‌کنیم.
  • Login و Password: در این قسمت نام یوزر و پسورد بانک اطلاعاتی مربوطه را وارد می‌کنیم.
  • بر روی دکمه Connect کلیک کنید و صبر کنید تا کانکت شود.

SQL Server

  • پس از اتصال دیتابیس‌های موجود بر روی سرور برای ما نمایش داده خواهد شد. ✔️
SQL Managment

یک نکته مهم | چه برای سرور مجازی و چه سرور اختصاصی

۱.   پس از اتصال تمام دیتابیس‌های موجود بر روی سرور نمایش داده می‌شود، شما فقط می‌توانید به دیتابیس‌هایی که مالک آن‌ها هستید، دسترسی داشته باشید. دسترسی به سایر دیتابیس ها امکان پذیر نمی‌باشد.

۲.   مطمئن شوید فایروال سیستم شما و یا محدودیت‌های شبکه یا سرویس دهنده اینترنت شما پورت 1430 را مسدود نکرده باشد. در این صورت برای رفع مشکل با پشتیبان اینترنت یا مدیر شبکه خود تماس بگیرید.

میزبانی وب زاگریو

اتصال امن به MSSQL Server توسط SQL Management Studio

1kviews

اتصال به SQL Server با استفاده از SQL Managment Studio به صورت پیش‌فرض امن نیست.
برای داشتن یک اتصال ایمن کافی است تنظیمات زیر را هنگام اتصال به SQL Managment Studio انجام دهید.
در اولین مرحله دقت داشته باشید که در قسمت server name حتما sql.wsp.zagrio.com را به طور کامل وارد کنید و گزینه Options را انتخاب نمائید.

securesqlmanagmer-01

بعد از وارد کردن اطلاعات در پنجره بعد برای داشتن یک ارتباط ایمن از تب Connection Properties از قسمت Connection گزینه Encrypt Connection را تیک بزنید. در شکل زیر این گزینه با کادر قرمز رنگ مشخص شده است.

securesqlmanagmer-02

با انجام این موارد شما می‌توانید یک ارتباط امن داشته باشید.

 

ساخت بانک اطلاعاتی در SolidCP

1.8kviews

در این مطلب قصد داریم ساخت بانک اطلاعاتی در SolidCP را به صورت تصویری و با توضیحات مختصر به شما نشان دهیم در ادامه با زاگریو همراه باشید.

قدم اول: برای ساخت Database وارد SolidCP می‌شویم و روی گزینه SQL Server 2014 کلیک می‌کنیم.

SQL-Server01

قدم دوم: در این صفحه روی گزینه  Create Database کلیک می‌کنیم.
SQL-Server02
قدم سوم: در صفحه باز شده یک نام برای Database خود انتخاب می‌کنیم و روی دکمه Save کلیک می‌کنیم.
SQL-Server03
قدم چهارم: در صفحه بعد Database  که ساخته‌ایم را مشاهده می‌کنیم.
SQL-Server05
قدم پنجم: اکنون باید برای Database خود یک User بسازیم تا بتواند به این Database دسترسی داشته باشد. در صفحه ابتدایی SQL Server روی گزینه Create User کلیک می‌کنیم.
SQL-Server11
قدم ششم: در صفحه باز شده اطلاعات خواسته شده را وارد می‌کنیم.

User: نام کاربر را وارد می‌کنیم.

Password: رمز عبور را وارد می‌کنیم.

Default database: در این قسمت Database که ساخته‌ایم را انتخاب می‌کنیم.

Databases: در این قسمت هم Database که ساخته‌ایم را تیک می‌زنیم و روی گزینه Save کلیک می‌کنیم.

SQL-Server06

نحوه Backup گرفتن از Database:

قدم اول: برای Backup گرفتن از Database روی نام دیتابیس کلیک می‌کنیم. از قسمت Maintenance Tools گزینه Backup را انتخاب می‌کنیم.
SQL-Server08
قدم دوم: در پنجره باز شده اطلاعات خواسته شده را وارد می‌کنیم و روی گزینه Backup کلیک می‌کنیم.
SQL-Server09

نحوه Restore کردن Database:

 برای Restore کردن Backup گرفته شده از قسمت Maintenance Tools روی Restore کلیک می‌کنیم.

SQL-Server10