নিষ্ক্রিয় লগইন চেষ্টার X সংখ্যার ভিত্তিতে আইপি ঠিকানা নিষিদ্ধ করবেন?


47

উইন্ডোজ সার্ভারে এক্স নম্বর ব্যর্থ লগইন চেষ্টার পরে কি কোনও আইপি ঠিকানা নিষিদ্ধ করা সম্ভব? কোনও নির্দিষ্ট অ্যাকাউন্টে নয়, যা আমি কীভাবে করতে জানি তা নয়, তবে পুরো মেশিনে।

আমরা ব্যবহারকারীর নাম অনুমান করার চেষ্টা করার জন্য বর্বর বাহিনীর আক্রমণগুলি দ্বারা বেশ কঠোর আঘাত পেয়েছি, সুতরাং এটি সার্ভারটি কিছুটা লোড পেতে সত্যই সহায়তা করবে।


8
* নিক্সের ফিয়াল 2বন রয়েছে ... উইন্ডোজ সমতুল্য / পোর্ট আছে কিনা তা নিশ্চিত নয়। ব্যর্থ 2ban.org/wiki/index.php/Main_Page
ক্রিস নাভা

5
ইভান অ্যান্ডারসন থেকে: সার্ভারফল্ট / প্রশ্ন / ৪৩৩60০/২ ... ব্যর্থতা 2ban এর কার্যকারিতার একটি সমতুল্য বলে মনে হচ্ছে তবে আপনার প্রশ্নটি যথেষ্ট নির্দিষ্ট নয়, আপনি লগইন করার চেষ্টা করে আইপি নিষিদ্ধ করার চেষ্টা করছেন কিনা তা আমি জানি না একটি হোস্ট করা ওয়েবসাইট, আপনার সার্ভার (এসএসএইচ মাধ্যমে) বা আপনার ডোমেনে। স্পষ্টতা অনেক দীর্ঘ যেতে হবে। অতিরিক্তভাবে আপনি আপনার ফায়ারওয়ালে সীমাবদ্ধতা রেট করতে পারেন তবে এটি বাস্তবায়ন নির্ভর dependent

4
আইপি ভিত্তিক অটোমেটেড নিষিদ্ধকরণ কীভাবে দরকারী তা সম্পর্কে পূর্ববর্তী আলোচনার জন্য আপনি সার্ভারফল্ট / প্রশ্ন /216995/…একবার দেখতে চান ।
pehrs

1
আপনি যদি টার্মিনাল পরিষেবাদি / রিমোট ডেস্কটপের কথা বলছেন তবে এখানে দেখুন: সার্ভারফল্ট
ইভান অ্যান্ডারসন

3
আমি এটি করতে গিথুবে
jjxtra

উত্তর:


28

আপনি পাওয়ারশেল এবং টাস্ক ম্যানেজারের সাহায্যে এটি করতে পারেন। এটি সম্ভবত নিখুঁত সমাধান নয়, তবে এটি বেশ ভালভাবে কাজ করে এবং দুই মাসে আমার কাছে প্রায় 100 টি ব্লক করা আইপি ঠিকানা রয়েছে। আমি স্ক্রিপ্ট লিখেছিলাম, যা ইভেন্টলগ নির্দিষ্ট ইভেন্টগুলি ("নিরীক্ষণ ব্যর্থতা") থেকে নির্বাচন করে। যদি কোনও আইপি ঠিকানা থেকে অনেকগুলি ব্যর্থ লগইন থাকে, তবে এটি ফায়ারওয়াল নিয়মে যুক্ত হয়েছে (ম্যানুয়ালি তৈরি করা হয়েছে) "ব্লকএট্যাকারস" নামক কোনও নির্দিষ্ট ট্র্যাফিককে নির্দিষ্ট আইপি ঠিকানাগুলিতে ব্লক করে।

পিএস 1 লিপি:

$DT = [DateTime]::Now.AddDays(-1) # check only last 24 hours

$l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} } # select Ip addresses that has audit failure 
$g = $l | group-object -property IpAddress  | where {$_.Count -gt 20} | Select -property Name # get ip adresses, that have more than 20 wrong logins

$fw = New-Object -ComObject hnetcfg.fwpolicy2 # get firewall object

$ar = $fw.rules | where {$_.name -eq 'BlockAttackers'} # get firewall rule named 'BlockAttackers' (must be created manually)

$arRemote = $ar.RemoteAddresses -split(',') #split the existing IPs into an array so we can easily search for existing IPs

$w = $g | where {$_.Name.Length -gt 1 -and  !($arRemote -contains $_.Name + '/255.255.255.255') } # get ip addresses that are not already in firewal rule. Include the subnet mask which is automatically added to the firewall remote IP declaration.

$w| %{$ar.remoteaddresses += ',' + $_.Name} # add IPs to firewall rule

শিডিয়ুলারে টাস্ক তৈরি করুন এবং ইভেন্ট 4625 (টার্মিনাল পরিষেবাদিসহ উইন্ডোজ লগইন) এ ট্রিগার সেট করুন। তবে সার্ভারের অপ্রয়োজনীয় লোড এড়াতে আপনি প্রতি ঘন্টা দু'বার চালানোর জন্য ট্রিগার সেট করতে পারেন।

সময়সূচী ট্রিগার

এবং ট্রিগার চালানোর পরে পাওয়ারশেল স্ক্রিপ্ট। এই স্ক্রিপ্টটি চালানোর জন্য আপনাকে অবশ্যই উচ্চতর সুযোগসুবিধা নির্ধারণ করতে হবে, অন্যথায় এটি সুরক্ষা ব্যতিক্রম সহ ব্যর্থ হবে।

পাওয়ারশেল স্ক্রিপ্ট চলছে

আপনি এই স্ক্রিপ্টটিকে অন্যান্য সুরক্ষা ইভেন্টগুলিতেও বাঁধতে পারেন।


1
@ রিমন্ডা দুর্দান্ত স্ক্রিপ্ট - ধন্যবাদ! এফটিপি থেকেও আমি প্রচুর 4625 পেয়ে যাচ্ছিলাম, যার জন্য সুরক্ষা লগের আইপি ঠিকানা নেই, তাই আপনার বর্তমান স্ক্রিপ্টের উপর এটি প্রসারিত করে এটি বর্তমান দিনের এফটিপি লগটিও পরীক্ষা করে দেখতে। আরও তথ্যের জন্য দয়া করে নীচে আমার উত্তরটি দেখুন: serverfault.com/a/571903/107701
কেভিনমিক 16

ইভেন্ট আইটেম, আইপি অ্যাড্রেস লগিং ইত্যাদির সাথে প্রচুর গটকা এবং প্রান্তের কেস রয়েছে যা আমি আইপিব্যানে পরিচালনা করেছি
github.com/jjxtra/Windows-IP-Ban-S

7

আমি জানি এই প্রশ্নটি পুরানো তবে দু'সপ্তাহ আগে আমি যখন ঠিক এই একই জিনিসটি করার চেষ্টা শুরু করেছিলাম তখন এটিই প্রথম ফোরাম পোস্ট ছিল across আমি একটি কার্যনির্বাহী স্ক্রিপ্ট নিয়ে এসেছি যা কেবলমাত্র খারাপ লগইন ইভেন্ট লগ এন্ট্রিগুলির জন্য ইভেন্ট লগগুলিকে 24 ঘন্টা পূর্বে পার্স করবে, 10 টিরও বেশি খারাপ লগইন রয়েছে এমনগুলি ধরে ফেলবে এবং তারপরে এটিকে একটি আইপিস্ক ফিল্টার তালিকায় রাখবে নেট কমান্ড তারপরে আমি এই লাইনটি সহ একটি ব্যাচ ফাইল লিখেছি powershell .\*scriptname.ps1*এবং প্রতি 24 ঘন্টা ব্যাচ ফাইল চালানোর জন্য একটি নির্ধারিত টাস্ক তৈরি করেছি (কোনও কারণে এটি সরাসরি কার্যকর হবে না)।

$DATE = [DateTime]::Now.AddDays(-1)

$EVS = Get-EventLog Security -InstanceId 529 -after $DATE

$EVS | select-string -inputobject {$_.message} -pattern "Source Network Address:(.)*\.*\.*\.*"  -allmatches | foreach-object {$_.Matches} | foreach-object {$_.Value} | foreach-object {$_.replace("Source Network Address:", "")} | group-object -property $_ | where-object {$_.count -gt 10} | select-object -property name | format-list | out-file c:\rdpblock.txt 

get-content -path c:\rdpblock.txt | foreach-object {$_.replace("Name :", "")} | out-file c:\rdpblockcleaned.txt 

get-content -path c:\rdpblockcleaned.txt | select-object -unique | out-file c:\rdpblocknospaces.txt

$RDPIP = get-content -path c:\rdpblocknospaces.txt | select-object -skip 1

$RDPIP | foreach-object {$_.replace("     ", "")} | foreach-object {netsh ipsec static add filter filterlist=RDP_BLOCK srcaddr=$($_) dstaddr=any}

আমি জানি যে এই স্ক্রিপ্টটি সম্ভবত অকার্যকর, কিন্তু যখন আমি এটির কাজ শুরু করি তখন পাওয়ারশেলের সম্পর্কে আমার একেবারেই অভিজ্ঞতা ছিল না, তাই আমার স্ক্রিপ্টগুলি অনুকূলিত করার ক্ষমতাটি পছন্দ হতে পারে না leaves তবে, এই সত্য হওয়া সত্ত্বেও আমি ভেবেছিলাম যে এটি ব্যবহার করতে পারে এমন কারও সাথে এটি ভাগ করে নেব।

আমি প্রাথমিক ধারণা দেওয়ার জন্য আমি রিমুন্ডাকে ধন্যবাদ জানাই, সেই পোস্টারটিই আমাকে ইভেন্ট লগগুলি অনুসন্ধান করার জন্য পাওয়ারশেল ব্যবহার করার ধারণার দিকে নিয়ে গিয়েছিল।


4

এই স্ক্রিপ্টটি রিমুন্ডার জবাবটি তৈরি করে এবং আরও কিছুটা এগিয়ে যায় https://serverfault.com/a/397637/155102 এটি "ব্লকএট্যাকারস" রুলের অ্যাকাউন্টে এখনও কোনও আইপি প্রবেশ করা হয়নি (যা একটি স্ট্রিং হিসাবে "*" দেয়)। নিয়মে আইপি কখন যুক্ত করা হয়েছিল তা আপনাকে জানানোর জন্য এটি একটি লগ ফাইলে একটি মন্তব্যও লিখে দেয়।

একটি "টিপ" ব্লকএট্যাকারস "রুল তৈরি করা যা আইপি ঠিকানাগুলিকে ব্লক করে তবে এটি প্রথমে অক্ষম করে। তারপরে, এই স্ক্রিপ্টটি একবার ম্যানুয়ালি চালান যাতে এটি "রিমোটএড্রেসস" ক্ষেত্রটি প্রকৃত আইপি ঠিকানাগুলির সাথে পপুলেশন করতে পারে যা অবরুদ্ধ করা উচিত। সমালোচনামূলক কোনও কিছু যুক্ত করা হয়নি তা নিশ্চিত করার জন্য এই আইপি ঠিকানাগুলি একবার দেখুন এবং তারপরে ফায়ারওয়াল নিয়ম সক্ষম করুন। রিমন্ডা বর্ণিত হিসাবে আপনার ফায়ারওয়ালে এই নিয়ম যুক্ত করুন।

এই স্ক্রিপ্ট জন্য গিট

#Checks for IP addresses that used incorrect password more than 10 times
#within 24 hours and blocks them using a firewall rule 'BlockAttackers'

#Check only last 24 hours
$DT = [DateTime]::Now.AddHours(-24)

#Select Ip addresses that has audit failure
$l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }

#Get ip adresses, that have more than 10 wrong logins
$g = $l | group-object -property IpAddress | where {$_.Count -gt 10} | Select -property Name

#Get firewall object
$fw = New-Object -ComObject hnetcfg.fwpolicy2

#Get firewall rule named 'BlockAttackers' (must be created manually)
$ar = $fw.rules | where {$_.name -eq 'BlockAttackers'}

#Split the existing IPs into an array so we can search it for existing IPs
$arRemote = $ar.RemoteAddresses -split(',')

#Only collect IPs that aren't already in the firewall rule
$w = $g | where {$_.Name.Length -gt 1 -and !($arRemote -contains $_.Name + '/255.255.255.255') }

#Add the new IPs to firewall rule
$w| %{
  if ($ar.RemoteAddresses -eq '*') {
    $ar.remoteaddresses = $_.Name
  }else{
    $ar.remoteaddresses += ',' + $_.Name
  }
}

#Write to logfile
if ($w.length -gt 1) {
  $w| %{(Get-Date).ToString() + ' ' + $_.Name >> '.\blocked.txt'}
}


2

অন্য কাউকে আপনার ফায়ারওয়াল বিধি নিয়ন্ত্রণ করতে দেওয়া সাধারণত ভাল ধারণা নয়। আপনি এখানে যা চাইছেন তা মূলত এটি।


1
+1, পরিষেবা আক্রমণকে অস্বীকার করার জন্য নিজেকে সেট আপ করার এটি একটি দুর্দান্ত উপায়। এবং যদি আপনি রেট-সীমাবদ্ধ ব্যবহার করে থাকেন তবে বেশিরভাগ স্বয়ংক্রিয় ব্রুট ফোর্স সরঞ্জামগুলি ধরা না পড়ার জন্য তাদের লগইন প্রয়াসকে যথেষ্ট পরিমাণে স্পেস করে।

12
নির্দিষ্ট সংখ্যক ব্যর্থ লগইনের পরে স্বয়ংক্রিয়ভাবে আইপি নিষিদ্ধ করা খুব সাধারণ অনুশীলন। আমি দেখতে পাচ্ছি যে হোস্টগুলি এফটিপি পাসওয়ার্ডগুলি অনুমান করার চেষ্টা করার পরে প্রতি ঘন্টার ভিত্তিতে নিষিদ্ধ হচ্ছে। এটি ডস আক্রমণ হওয়ার একমাত্র উপায় হ'ল যদি কেউ আপনার আইপি ফাঁকি দিতে সক্ষম হন (টিসিপি সংযোগগুলিতে অসম্ভব), বা আপনি যদি বার বার নিজের পাসওয়ার্ডটি ভুল
টাইপ করেন (তবে

18
দুঃখিত, তবে আমি জিজ্ঞাসা করিনি এটি ভাল ধারণা কিনা।
হেভিওয়েভ

1
অবশ্যই কোনও কারণ বা এক বা একাধিক নির্দিষ্ট আইপি অ্যাড্রেসগুলির জন্য ব্যতিক্রম নির্ধারণ করা যায়নি, যা ডওসের উদ্বেগকে অনেকটা দূর করবে।
জন গার্ডেনিয়ার্স

2

এটি একটি পুরানো থ্রেড হয়। আমি 2014-2015-এ কেভিনমাইক দ্বারা সরবরাহিত স্ক্রিপ্টটি ব্যবহার করছিলাম। তারপরে এটি কেবল কাজ করা বন্ধ করে দিয়েছে। সুতরাং উইন্ডোজ নেটওয়ার্ক সুরক্ষা প্রমাণীকরণের কাছে আমাকে গ্রহণ করতে কিছুটা এডিট করতে হয়েছিল যা সুরক্ষা লগে আইপি ঠিকানাগুলি ফেলে না। এছাড়াও, যেহেতু আমার নিয়মিত এফটিপি চলমান নেই আমি সেই অংশটি সরিয়ে দিয়েছি কারণ এটিতে কোনও ত্রুটি দেখা দিয়েছে কারণ লগ ফোল্ডার ছিল না। মূল পরিবর্তনটি হ'ল আরডিপি ইভেন্টগুলির উত্স।

    $current_date_utc = (Get-Date).ToUniversalTime()

    # Set number of failed login attempts after which an IP address will be blocked
    $int_block_limit = 10

    # Time window during which to check the Security log, which is currently set to check only the last 24 hours
    $dat_time_window = [DateTime]::Now.AddDays(-1)

    $arr_new_bad_ips_all = (get-winevent -filterhashtable @{ logname='Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational'; starttime=$dat_time_window; id=140 }).message |
        % { if ($_ -match "of (.+) failed") { $Matches[1] }} |
        Group-Object |
        Where {$_.Count -ge $int_block_limit} |
        Select -property Name

    # Sort the array, selecting only unique IPs (in case one IP shows up in both the Security and FTP logs)
    $arr_new_bad_ips_all = $arr_new_bad_ips_all | Foreach-Object { [string]$_.Name } | Select-Object -unique

    # Get firewall object
    $firewall = New-Object -comobject hnetcfg.fwpolicy2

    # Get all firewall rules matching "BlockAttackers*"
    $arr_firewall_rules = $firewall.Rules | Where {$_.Name -like 'BlockAttackers*'}

    # If no "BlockAttackers*" firewall rule exists yet, create one and set it to a variable
    if ($arr_firewall_rules -eq $null) {
        $str_new_rule_name = "BlockAttackers (Created " + $current_date_utc.ToString("yyyy-MM-dd HH:mm:ss") + " UTC)"
        netsh advfirewall firewall add rule dir=in action=block name=$str_new_rule_name description="Rule automatically created." enable=yes remoteip="0.0.0.0" | Out-Null
        $arr_firewall_rules = $firewall.Rules | Where {$_.Name -like 'BlockAttackers*'}
    }

    # Split the existing IPs from current "BlockAttackers*" firewall rule(s) into an array so we can easily search them
    $arr_existing_bad_ips = @()
    foreach ($rule in $arr_firewall_rules) {
        $arr_existing_bad_ips += $rule.RemoteAddresses -split(',')
    }

    # Clean subnet masks off of IPs that are currently blocked by the firewall rule(s)
    $arr_existing_bad_ips_without_masks = $arr_existing_bad_ips | ForEach-Object {$_ -replace "/.*", ""}

    # Select IP addresses to add to the firewall, but only ones that...
    $arr_new_bad_ips_for_firewall = $arr_new_bad_ips_all | Where {
        # contain an IP address (i.e. aren't blank or a dash, which the Security log has for systems that failed FTP logins)
        $_.Length -gt 6 -and
        # aren't already in the firewall rule(s)
        !($arr_existing_bad_ips_without_masks -contains $_) -and
        # aren't the local loopback
        !($_.StartsWith('127.0.0.1')) -and
        # aren't part of the local subnet
        !($_.StartsWith('192.168.')) -and
        !($_.StartsWith('0.0.'))
    }

    # If there are IPs to block, do the following...
    if ($arr_new_bad_ips_for_firewall -ne $null) {
        # Write date and time to script-specific log file
        [DateTime]::Now | Out-File -Append -Encoding utf8 C:\Security\blockattackers.txt
        # Write newly-blocked IP addresses to log file
        $arr_new_bad_ips_for_firewall | Out-File -Append -Encoding utf8 C:\Security\blockattackers.txt

        # Boolean to make sure the new IPs are only added on one rule
        $bln_added_to_rule = 0

        # Array to hold bad IPs from each rule one at a time, so we can count to make sure adding the new ones won't exceed 1000 IPs
        $arr_existing_bad_ips_current_rule = @()

        # For each "BlockAttackers*" rule in the firewall, do the following...
        foreach ($rule in $arr_firewall_rules) {
            if ($bln_added_to_rule -ne 1) {
                # Split the existing IPs from the current rule into an array so we can easily count them
                $arr_existing_bad_ips_current_rule = $rule.RemoteAddresses -split(',')

                # If the number of IPs to add is less than 1000 minus the current number of IPs in the rule, add them to this rule
                if ($arr_new_bad_ips_for_firewall.Count -le (1000 - $arr_existing_bad_ips_current_rule.Count)) {
                    # Add new IPs to firewall rule
                    $arr_new_bad_ips_for_firewall | %{$rule.RemoteAddresses += ',' + $_}

                    # Write which rule the IPs were added to to log file
                    echo "New IP addresses above added to Windows Firewall rule:" $rule.Name | Out-File -Append -Encoding utf8 C:\Security\blockattackers.txt

                    # Set boolean so any other rules are skipped when adding IPs
                    $bln_added_to_rule = 1
                }
            }
        }

        # If there wasn't room in any other "BlockAttackers*" firewall rule, create a new one and add the IPs to it
        if ($bln_added_to_rule -ne 1) {
            $str_new_rule_name = "BlockAttackers (Created " + $current_date_utc.ToString("yyyy-MM-dd HH:mm:ss") + " UTC)"
            netsh advfirewall firewall add rule dir=in action=block name=$str_new_rule_name description="Rule automatically created." enable=yes remoteip="0.0.0.0" | Out-Null
            $new_rule = $firewall.rules | Where {$_.Name -eq $str_new_rule_name}

            # Add new IPs to firewall rule
            $arr_new_bad_ips_for_firewall | %{$new_rule.RemoteAddresses += ',' + $_}

            # Write which rule the IPs were added to to log file
            echo "New IP addresses above added to newly created Windows Firewall rule:" $new_rule.Name | Out-File -Append -Encoding utf8 C:\Security\blockattackers.txt
        }
    }

উপরের স্ক্রিপ্টটি উইন্ডোজ ২০১২ এ কাজ করবে। আপনি যদি এখনও উইন্ডোজ ২০০৮ এ নেটওয়ার্ক অ্যাক্সেস লেভেল প্রমাণীকরণ সহ রিমোট ডেস্কটপ ব্যবহার করেন তবে আপনার নিম্নলিখিত কৌশলগুলি করতে হবে। সুরক্ষা লগে উইন্ডোজ ২০০৮ এর আইপি ঠিকানা নেই এবং মাইক্রোসফ্ট-উইন্ডোজ-রিমোটডেস্কটপ সার্ভিসেস-আরডিপিকোরটিস লগ-এ সেগুলি রয়েছে বলে মনে হয় না। সুতরাং আমাকে আসলে 2 লগ ব্যবহার করতে হয়েছিল - ফায়ারওয়াল লগটিতে 3389 পোর্ট করার সফল অ্যাক্সেসের প্রচেষ্টা থেকে সুরক্ষা লগ থেকে ইভেন্টগুলি মেলে। এটি অনুমানের কাজ, তবে মনে হয় এটি পাসওয়ার্ড আক্রমণ সনাক্ত করে। লঙ্ঘনকারী আইপিগুলি সংগ্রহ করা অংশটি এখানে:

    $current_date_utc = (Get-Date).ToUniversalTime()

    # Set number of failed login attempts after which an IP address will be blocked
    $int_block_limit = 10

    $dat_time_window = [DateTime]::Now.AddDays(-1)

    $logfn = (netsh advfirewall show allprofiles | Select-String Filename | select-object -unique | % { $_ -replace "%systemroot%",$env:systemroot }).substring(10).trimstart().trimend()

    $badevts = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $dat_time_window | foreach-object { [datetime]$_.TimeWritten } | sort-object

    $fwlog = Select-String -Path $logfn -Pattern "ALLOW TCP" |
        % {
            if ($_ -match "(201.-..-..) (.+) ALLOW TCP (.+) (.+) (.+) 3389") 
            {
                new-object psobject -property @{ 
                  dt = $Matches[1] + ' ' + $Matches[2]
                  ip = $Matches[3]
                }
            }
        }

    $ipa = @()
    $j = 0

    for ($i=0; $i -lt $fwlog.Count; $i++)
    {
        $conn = ([datetime]$fwlog[$i].dt).ticks
        while (($j -lt $badevts.Count) -and (($badevts[$j]).ticks -lt $conn)) { $j++ }
        if ($j -ge $badevts.Count) { break }
        if ((($badevts[$j]).ticks - $conn) -le 30000000) { $ipa += ,($fwlog[$i].ip) }
    }

    $arr_new_bad_ips_all = $ipa |
        Group-Object |
        Where {$_.Count -ge $int_block_limit} |
        Select -property Name

দ্রষ্টব্য: ফায়ারওয়াল লগগুলি সক্ষম করতে ভুলবেন না। দ্রষ্টব্য 2: আমি কোনও পাওয়ারশেল বিশেষজ্ঞ নই তাই কিছু গুরু আমার কোড সংশোধন / উন্নত করতে পারলে ভাল লাগবে।


1

আমি ts_ block freeby ব্যবহার করছি ।

মূলত এটি একটি "ভিবিএস স্ক্রিপ্ট প্রোগ্রাম যা উইন্ডোজ দ্বারা অবৈধ টার্মিনাল পরিষেবাদি লগনের প্রতিক্রিয়া হিসাবে উইন্ডোজ দ্বারা লগ হওয়া ইভেন্টগুলি গ্রহণ করার জন্য ডাব্লুএমআই ইভেন্ট সিঙ্ক হিসাবে কাজ করে।"

নিখুঁতভাবে কাজ করতে দেখে মনে হচ্ছে এবং স্ক্রিপ্টটি যদি আপনার এটির মোড দরকার হয় তবে সোজা is হয় আপনি এটিকে প্রয়াসগুলিতে প্রবেশ করতে দিতে পারেন এবং তারপরে আপনার অনুমোদিত প্রচেষ্টার সংখ্যার উপর ভিত্তি করে নিষিদ্ধ করতে পারেন এবং / অথবা আপনি যে হার্ড-কোড লগইন নামগুলিতে অ্যাক্সেস দিতে চান না তা করতে পারেন।

আমি দুর্ঘটনাক্রমে দু'বার একই নাম যুক্ত করে ধরা পড়েছিলাম এবং পরিষেবাটি প্রতি 1500ms পুনরায় আরম্ভ করে কেবল একটি অন্তহীন লুপে চলে যায়, তবে আপনি ভিবিএসের সাথে ঠিক থাকলে ঠিক করা / মোড ঠিক করা খুব সহজ।

আমার বর্তমান সেটিংসটি কেবল একটি পুনরায় চেষ্টা করুন এবং 'অ্যাডমিন' 'অ্যাডমিন' 'অ্যাডমিনিস্ট্রেটর' 'অতিথি' ইত্যাদির মতো লগইনগুলি স্বয়ংক্রিয়ভাবে নিষিদ্ধ হওয়ার কারণে আপনি 2 দিনের জন্য নিষিদ্ধ হয়েছেন। আইপিতে পরিবর্তন করার জন্য সোজা হওয়া উচিত?

কিন্ডা আসক্তি প্রবেশ করান এবং দেখুন যে কোনও সমালোচকদের রাতারাতি নিষিদ্ধ করা হয়েছে ...


0

আপনি কি সার্ভার / ডোমেনে লগইন করা বা সার্ভারে চলমান কোনও ওয়েব সাইটে লগ ইন করতে চান? আপনি যদি সার্ভার / ডোমেনে লগইন করতে চান তবে উত্তরটি নেই। উইন্ডোজ আইপি অ্যাড্রেসগুলি সুরক্ষা সত্তা নয় বলে ব্যর্থ লগনের প্রয়াসের ভিত্তিতে আইপি ঠিকানাগুলি ব্লক করার কোনও ধারণা নেই। এটি করতে পারে এমন তৃতীয় পক্ষের সরঞ্জাম থাকতে পারে, তবে আমি এর আগে কখনও দেখিনি বলে আমি কোনও বিষয়ে সচেতন নই।


0

যদি এমন কোনও ওয়েবসভার থাকে যা আক্রমণ করা হয় তবে আপনি গতিশীল আইপি নিষেধাজ্ঞার এক্সটেনশনটি ইনস্টল করতে পারেন । যদি এটি সার্ভারের স্ট্যান্ডার্ড প্রমাণীকরণের জন্য হয় তবে আপনার ডোমেন এবং সার্ভার বিচ্ছিন্নতা প্রয়োগ করতে সক্ষম হওয়া উচিত যা ডোমেনের সাথে যুক্ত কম্পিউটারগুলিতে আক্রমণের পরিধি সীমাবদ্ধ করে এবং আপনার অ্যাক্সেস পাওয়ার দরকার সিস্টেমগুলি থেকে কেবল প্রচেষ্টা চালানোর অনুমতি দেওয়া যেতে পারে set সার্ভার. উইন্ডোজগুলিতে ব্রুট ফোর্স আক্রমণ প্রতিরোধের জন্য অ্যাকাউন্ট লকআউট নীতিটি 10 ​​মিনিটের মতো একটি সেটিংসে সেট করা এবং 3 বারের জন্য একটি খারাপ পাসওয়ার্ড নীতি সেট করা হয় - এর অর্থ হ'ল আক্রমণটি করা অ্যাকাউন্টটি 3 চেষ্টার পরে 10 মিনিটের জন্য লক হয়ে যায়। আইপি সংযোগগুলি উইন্ডোগুলিতে ডিফল্টরূপে লকযোগ্য হয় না। (একদিকে আমিও আগ্রহী যে সিস্টেমটিতে প্রভাব ফেলতে প্রতি সেকেন্ডে কত লগন চেষ্টা করছে)


আমার এডাব্লুএস ছোট উদাহরণে, প্রতি 4 সেকেন্ডে 1 টি প্রচেষ্টা 50% সিপিইউ খাওয়ার জন্য যথেষ্ট। আপনি যদি আমাকে জিজ্ঞাসা করেন তবে খুব বাজে ...
রোমানস্ট

বাহ, আমি অবাক হয়েছি কেন ব্যবহার এত বেশি? আমার ভিএমগুলিকে রেজিস্টার করতে কত প্রচেষ্টা নিচ্ছে তা দেখতে আমাকে কিছু পরীক্ষা করতে হবে।
জিম বি

আমি মনে করি এটি কারণ আমি নেটওয়ার্ক স্তরের প্রমাণীকরণ ব্যবহার করছি না, তাই প্রতিটি লগইন প্রয়াস আসলে একটি দূরবর্তী ডেস্কটপ সেশনের মাধ্যমে আক্রমণকারীর কাছে উপস্থাপিত করার জন্য একটি লগন ইউআই স্পিন করে। আমি দেখতে পাচ্ছি কেন এটি ব্যয়বহুল হতে পারে।
রোমানস্ট

0

http://nerderies.blogspot.co.at/2012/12/automatically-banning-ips-with-windows.html

আপনি যা চান তা বাক্স সমাধানের বাইরে থাকলে (ইনস্টল ও সম্পন্ন) আপনি এখানে একটি নিখরচায় সরঞ্জাম খুঁজে পেতে পারেন এবং সম্ভবত এটি পড়তে হবে:

বর্তমান সংস্করণ: 1.2 (.NET ফ্রেমওয়ার্ক 4.0 ক্লায়েন্ট প্রোফাইল) -> এভলওয়াচারের বর্তমান সংস্করণটি ডাউনলোড করুন (ব্যক্তিগত এবং বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে)

1.2 এ নতুন (ডকুমেন্টেশনের আরও তথ্য):

  • ম্যানেজমেন্ট কনসোল
  • ডাব্লুসিএফ পরিষেবা প্যাটার্ন
  • কালো তালিকাভুক্তি
  • 3 টি স্ট্রাইকের পরে কালো তালিকায় স্বয়ংক্রিয়ভাবে চলাচল (প্রতি ডিফল্ট)

পুরানো সার্ভারগুলির জন্য (। নেট ফ্রেমওয়ার্ক 2.0)

-> ইভলওয়াচারের হ্রাস করা সংস্করণটি ডাউনলোড করুন (ব্যক্তিগত এবং বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে)


0

রিমুন্ডার দুর্দান্ত স্ক্রিপ্টটিকে একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করে , আমি একটি প্রধান জিনিসটি হারিয়েছি যা অনুপস্থিত ছিল: ব্যর্থ এফটিপি লগইন থেকে আইপি ঠিকানাগুলি ব্লক করা । কেউ এফটিপি-র মাধ্যমে লগইন করতে ব্যর্থ হলে উইন্ডোজ সার্ভার সুরক্ষা লগে আইপি ঠিকানা লগ করে না, তবে পরিবর্তে "উত্স নেটওয়ার্ক ঠিকানা" একটি ড্যাশে সেট করে। ব্রুট ফোর্স আক্রমণের জন্য এফটিপি হ'ল একটি সাধারণ আক্রমণকারী ভেক্টর, তাই আমি তার স্ক্রিপ্টে একাধিক লগইন ব্যর্থতার জন্য বর্তমান দিনের এফটিপি লগগুলি স্ক্যান করার পাশাপাশি সেই আইপি ঠিকানাগুলিও ব্লক করার ক্ষমতা যুক্ত করেছি।

আপডেট 2014/02/07: আমি আমার সমস্ত পুরানো এফটিপি লগগুলি প্রক্রিয়া করার জন্য যখন এইগুলিতে কিছু টুইট করেছি, তখন বুঝতে পেরেছিলাম যখন তাদের প্রচুর পরিশ্রম হয়েছিল (50,000+), তখন এটি তৈরি করা অ্যারেগুলি বিশাল হবে এবং প্রক্রিয়াটি অবিশ্বাস্যভাবে ধীর করে দেবে। আমি তখন থেকে এটিকে আবার আরও লিখেছি এফটিপি লগগুলি প্রক্রিয়াকরণ করার সময় এটি আরও কার্যকর করার জন্য।

আমি আরও জানতে পেরেছি যে একটি উইন্ডোজ ফায়ারওয়াল নিয়মে কতগুলি আইপি হতে পারে তার জন্য 1000 এর একটি নির্বিচারে হার্ড সীমা রয়েছে। সেই সীমাবদ্ধতার কারণে, আমার সর্বশেষতমটি পূরণ করার পরে স্বয়ংক্রিয়ভাবে একটি নতুন নিয়ম তৈরি করার প্রয়োজন হয়েছিল। এটি এখন এটি করে, এবং প্রাথমিক ফায়ারওয়াল নিয়মও তৈরি করে (যদি আপনি নিজের তৈরি না করেন) যাতে কোনও একমাত্র সেটআপ 468 ঘটনা ঘটলে তা শিডিয়ুলারে চালিত করে।

এখানে কোডটি যা উভয় উইন্ডোজ সার্ভার ২০০৮ আর 2 এবং উইন্ডোজ 7 এ পরীক্ষা করা হয়েছে:

# This Windows Powershell script will automatically block IP addresses that attempt to login to the system
# and fail the number of times set below with the $int_block_limit variable or more. Is scans both the Security
# log, which covers Remote Desktop and other attempts, as well as the current day's FTP log. If the $int_block_limit
# limit is hit on either of those logs (separately, not combined), then the IP address will be added to the
# firewall rule.
#
# The script will automatically create a firewall rule named "BlockAttackers (Created yyyy-MM-dd HH:mm:ss UTC)" using
# the current time if one with a name that includes "BlockAttackers" doesn't already exist. Because there's a hard
# limit of 1000 entries (IP addresses) you can block per rule, it will also create similarly-named rules once that
# limit is reached for the latest one.
#
# I recommend setting the script to run as a scheduled task triggered by event 4625 login audit failures from the
# Security log, or alternatively you could set it to run after some amount of time (i.e. every 10 minutes).
#
# Authors:
# Majority of script written by serverfault.com user kevinmicke
# Windows Security Log portion written by serverfault.com user remunda, which provided the starting point for kevinmicke
#
# Details: https://serverfault.com/questions/233222/ban-ip-address-based-on-x-number-of-unsuccessful-login-attempts


# Set number of failed login attempts after which an IP address will be blocked
$int_block_limit = 10

# Time window during which to check the Security log, which is currently set to check only the last 24 hours
$dat_time_window = [DateTime]::Now.AddDays(-1)

# Select from the Security log all IP addresses that have more than $int_block_limit audit failures (event 4625) within $dat_time_window
$arr_new_bad_ips_security_log = @()
$arr_new_bad_ips_security_log = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $dat_time_window |
    Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]}} |
    Group-Object -property IpAddress |
    Where {$_.Count -ge $int_block_limit} |
    Select -property Name

# Get current time UTC to figure out filename for current FTP log
$current_date_utc = (Get-Date).ToUniversalTime()

# Set path to today's FTP log file
$str_log_file_name = "C:\inetpub\logs\LogFiles\FTPSVC2\u_ex" + $current_date_utc.ToString("yyMMdd") + ".log"

# Search today's FTP log file for "530 1326" to find lines that contain IPs of systems that failed to log in,
# get just the IP from each line, group the IPs by IP to count the attempts from each one, and select only the
# IPs that have $int_block_limit or more bad logins today
$arr_new_bad_ips_ftp = @()
$arr_new_bad_ips_ftp = Select-String $str_log_file_name -pattern "530 1326" |
    ForEach-Object {$_.Line.Substring(20,15) -replace " .*", ""} |
    Group |
    Where {$_.Count -ge $int_block_limit} |
    Select -property Name

# Concatenate the two arrays of IPs (one from Security log, one from FTP log)
$arr_new_bad_ips_all = @()
# $arr_new_bad_ips_all = @($arr_new_bad_ips_security_log) + @($arr_new_bad_ips_ftp_over_limit)
$arr_new_bad_ips_all = @($arr_new_bad_ips_security_log) + @($arr_new_bad_ips_ftp)

# Sort the array, selecting only unique IPs (in case one IP shows up in both the Security and FTP logs)
$arr_new_bad_ips_all_sorted = @()
$arr_new_bad_ips_all_sorted = $arr_new_bad_ips_all |
    Foreach-Object { [string]$_.Name } |
    Select-Object -unique

# Get firewall object
$firewall = New-Object -comobject hnetcfg.fwpolicy2

# Get all firewall rules matching "BlockAttackers*"
$arr_firewall_rules = $firewall.Rules | Where {$_.Name -like 'BlockAttackers*'}

# If no "BlockAttackers*" firewall rule exists yet, create one and set it to a variable
if ($arr_firewall_rules -eq $null) {
    $str_new_rule_name = "BlockAttackers (Created " + $current_date_utc.ToString("yyyy-MM-dd HH:mm:ss") + " UTC)"
    netsh advfirewall firewall add rule dir=in action=block name=$str_new_rule_name description="Rule automatically created by BlockAttackers Powershell script written by Kevin Micke." enable=yes remoteip="0.0.0.0" | Out-Null
    $arr_firewall_rules = $firewall.Rules | Where {$_.Name -like 'BlockAttackers*'}
}

# Split the existing IPs from current "BlockAttackers*" firewall rule(s) into an array so we can easily search them
$arr_existing_bad_ips = @()
foreach ($rule in $arr_firewall_rules) {
    $arr_existing_bad_ips += $rule.RemoteAddresses -split(',')
}

# Clean subnet masks off of IPs that are currently blocked by the firewall rule(s)
$arr_existing_bad_ips_without_masks = @()
$arr_existing_bad_ips_without_masks = $arr_existing_bad_ips | ForEach-Object {$_ -replace "/.*", ""}

# Select IP addresses to add to the firewall, but only ones that...
$arr_new_bad_ips_for_firewall = @()
$arr_new_bad_ips_for_firewall = $arr_new_bad_ips_all_sorted | Where {
    # contain an IP address (i.e. aren't blank or a dash, which the Security log has for systems that failed FTP logins)
    $_.Length -gt 6 -and
    # aren't already in the firewall rule(s)
    !($arr_existing_bad_ips_without_masks -contains $_) -and
    # aren't the local loopback
    !($_.StartsWith('127.0.0.1')) -and
    # aren't part of the local subnet
    !($_.StartsWith('192.168.')) -and
    !($_.StartsWith('10.0.'))
}

# If there are IPs to block, do the following...
if ($arr_new_bad_ips_for_firewall -ne $null) {
    # Write date and time to script-specific log file
    [DateTime]::Now | Out-File -Append -Encoding utf8 C:\blockattackers.txt
    # Write newly-blocked IP addresses to log file
    $arr_new_bad_ips_for_firewall | Out-File -Append -Encoding utf8 C:\blockattackers.txt

    # Boolean to make sure the new IPs are only added on one rule
    $bln_added_to_rule = 0

    # Array to hold bad IPs from each rule one at a time, so we can count to make sure adding the new ones won't exceed 1000 IPs
    $arr_existing_bad_ips_current_rule = @()

    # For each "BlockAttackers*" rule in the firewall, do the following...
    foreach ($rule in $arr_firewall_rules) {
        if ($bln_added_to_rule -ne 1) {
            # Split the existing IPs from the current rule into an array so we can easily count them
            $arr_existing_bad_ips_current_rule = $rule.RemoteAddresses -split(',')

            # If the number of IPs to add is less than 1000 minus the current number of IPs in the rule, add them to this rule
            if ($arr_new_bad_ips_for_firewall.Count -le (1000 - $arr_existing_bad_ips_current_rule.Count)) {
                # Add new IPs to firewall rule
                $arr_new_bad_ips_for_firewall | %{$rule.RemoteAddresses += ',' + $_}

                # Write which rule the IPs were added to to log file
                echo "New IP addresses above added to Windows Firewall rule:" $rule.Name | Out-File -Append -Encoding utf8 C:\blockattackers.txt

                # Set boolean so any other rules are skipped when adding IPs
                $bln_added_to_rule = 1
            }
        }
    }

    # If there wasn't room in any other "BlockAttackers*" firewall rule, create a new one and add the IPs to it
    if ($bln_added_to_rule -ne 1) {
        $str_new_rule_name = "BlockAttackers (Created " + $current_date_utc.ToString("yyyy-MM-dd HH:mm:ss") + " UTC)"
        netsh advfirewall firewall add rule dir=in action=block name=$str_new_rule_name description="Rule automatically created by BlockAttackers Powershell script written by Kevin Micke." enable=yes remoteip="0.0.0.0" | Out-Null
        $new_rule = $firewall.rules | Where {$_.Name -eq $str_new_rule_name}

        # Add new IPs to firewall rule
        $arr_new_bad_ips_for_firewall | %{$new_rule.RemoteAddresses += ',' + $_}

        # Write which rule the IPs were added to to log file
        echo "New IP addresses above added to newly created Windows Firewall rule:" $new_rule.Name | Out-File -Append -Encoding utf8 C:\blockattackers.txt
    }
}

এফওয়াইআই: যাঁরা আগে কোনও সিস্টেমে পাওয়ারশেল স্ক্রিপ্টটি চালান না তাদের জন্য আপনাকে প্রথমে একটি নতুন পাওয়ারশেল খুলতে হবে এবং চালনা Set-ExecutionPolicy RemoteSignedকরতে হবে যাতে আপনি স্থানীয় স্ক্রিপ্টগুলি চালাতে পারেন। অন্যথায় আপনি একটি ত্রুটি পেয়ে যাবেন: "blockattacacers.ps1 লোড করা যাবে না কারণ এই সিস্টেমে স্ক্রিপ্টগুলি কার্যকর করা অক্ষম করা হয়েছে।"
কেভিনমিক

0

স্ক্রিপ্ট remuda , দ্বারা সম্পাদিত kevinmicke (21:59 7 ফেব্রুয়ারী) এফটিপি নিয়ন্ত্রণ চ্যানেল, যা আমার সিস্টেম (উইন্ডোজ সার্ভার 2008 R2) একটি নিজস্ব ফোল্ডারটি পরীক্ষা করা হয়নি। এছাড়াও 530 11001-গুলি সনাক্ত করা যায় নি, যা হ্যাকার যখন নিয়ন্ত্রণ চ্যানেলে কেবল অ্যাক্সেস করার চেষ্টা করে তখন উপস্থিত হয় বলে মনে হয়। সুতরাং আমি দ্বিতীয় এফটিপি-লগ-ফোল্ডারটি পরীক্ষা করতে স্ক্রিপ্টের কয়েকটি লাইন যুক্ত করেছি:

# এই উইন্ডোজ পাওয়ারশেল স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে আইপি ঠিকানাগুলিতে ব্লক করবে যা সিস্টেমে লগইন করার চেষ্টা করে
# এবং $ int_ block_limit পরিবর্তনশীল বা আরও অনেকের সাথে নীচে নির্ধারিত সময়ের সংখ্যা ব্যর্থ করুন। সুরক্ষা উভয় স্ক্যান
# লগ, যা রিমোট ডেস্কটপ এবং অন্যান্য প্রচেষ্টা, পাশাপাশি বর্তমান দিনের এফটিপি লগকে coversেকে দেয়। যদি $ int_ block_limit
# সীমাটি সেই লগগুলির মধ্যে দুটিতে আঘাত করা হয় (পৃথকভাবে, সংযুক্ত নয়), তারপরে আইপি ঠিকানা যুক্ত করা হবে
# ফায়ারওয়াল নিয়ম।
#
# স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে "ব্লকএট্যাকারস (yyyy-MM-dd HH: মিমি: ss ইউটিসি)" নামে একটি ফায়ারওয়াল নিয়ম তৈরি করবে
# বর্তমান সময়ে যদি "ব্লকএট্যাকারস" অন্তর্ভুক্ত এমন একটি নাম ইতিমধ্যে বিদ্যমান না থাকে। কারণ একটি কঠিন আছে
1000 টি প্রবেশের সীমা (আইপি অ্যাড্রেস) আপনি প্রতি নিয়মকে ব্লক করতে পারেন, এটি একবারে একই নামযুক্ত নিয়ম তৈরি করবে
# সীমা সর্বশেষতমের জন্য পৌঁছেছে।
#
# আমি ইভেন্ট থেকে 4625 লগইন অডিট ব্যর্থতা দ্বারা ট্রিগার হওয়া একটি নির্ধারিত টাস্ক হিসাবে চালানোর জন্য স্ক্রিপ্টটি সেট করার পরামর্শ দিচ্ছি
# সুরক্ষা লগ, অথবা বিকল্পভাবে আপনি এটিকে কিছু সময়ের পরে চালানোর জন্য সেট করতে পারেন (অর্থাত প্রতি প্রতি 10 মিনিট)।
#
# লেখক:
# সার্ভারফল্ট ডটকম ব্যবহারকারী কেভিনমিককে লিখেছেন বেশিরভাগ স্ক্রিপ্ট
# উইন্ডোজ সুরক্ষা লগ অংশটি সার্ভারফল্ট ডট কম ব্যবহারকারীর রিমুন্ডা দ্বারা লিখিত, যা কেভিনমিককে প্রারম্ভিক বিন্দু সরবরাহ করে
# এফটিপি-র কন্ট্রোল চ্যানেলটি সার্ভারফ্লট ডট কম ব্যবহারকারী ইউউ মার্টেনস যুক্ত করেছেন Che
#
# বিশদ: https://serverfault.com/questions/233222/ban-ip-address-based-on-x-number-of-unsuccessful-login-attempts


# ব্যর্থ লগইন প্রচেষ্টাগুলির সংখ্যা নির্ধারণ করুন যার পরে একটি আইপি ঠিকানা অবরুদ্ধ করা হবে
$ int_ block_limit = 3

সুরক্ষা লগ চেক করার জন্য # সময় উইন্ডো, যা বর্তমানে কেবল সর্বশেষ 24 ঘন্টা পরীক্ষা করতে সেট করা আছে
$ ডাটা_টাইম_উইন্ডো = [তারিখটাইম] :: এখন.এডডয়েস (-১)

# সুরক্ষা লগ থেকে এমন সমস্ত আইপি ঠিকানা নির্বাচন করুন যা $ ডাটা_টাইম_উন্ডোর মধ্যে $ int_ block_limit নিরীক্ষণ ব্যর্থতা (ইভেন্ট 4625) এর বেশি রয়েছে
r আরআর_নু_ব্যাড_ইপস_সিকিউরিটি_লগ = @ ()
r আরআর_নেউ_আবাদ_ইপস_সিকিউরিটি_লগ = গেম-ইভেন্টলগ -লগনাম 'সিকিউরিটি' -ইনস্ট্যান্সআইডি 4625 -রপর $ ডাটা_টাইম_উইন্ডো |
    সিলেক্ট-অবজেক্ট @ {n = 'আইপিএড্রেস'; ই = {। _। রিপ্লেসমেন্টসস্ট্রিংস [-2]}} |
    গ্রুপ-অবজেক্ট-প্রপার্টি আইপিএড্রেস |
    যেখানে {$ _। গণনা -ge $ int_ block_limit} |
    প্রপার্টি নাম নির্বাচন করুন

# বর্তমান এফটিপি লগের জন্য ফাইলের নামটি খুঁজে পেতে বর্তমান সময়ের ইউটিসি পান Get
$ বর্তমান_ তারিখ_টেক = (গেট-ডেট)।

# আজকের এফটিপি কন্ট্রোল চ্যানেল লগ ফাইলের পথ নির্ধারণ করুন
_ str_log_file_name_control_channel = "সি: \ ইনপপ \ লগস \ লগফায়ার্স \ এফটিপিএসভিসি \ u_ex" + $ বর্তমান_সামান্য_টেক.টোস্ট্রিং ("yymmdd") + ".লগ"

# 530 1 "এর জন্য লগ ইন করতে ব্যর্থ হওয়া সিস্টেমগুলির আইপি ধারণ করে এমন লাইনগুলি খুঁজে পেতে আজকের এফটিপি কন্ট্রোল চ্যানেল লগ ফাইল অনুসন্ধান করুন,
# প্রতিটি লাইন থেকে কেবল আইপি পান, প্রতিটি থেকে প্রচেষ্টা গণনা করতে আইপি দ্বারা আইপিগুলি গ্রুপ করুন এবং কেবলমাত্র নির্বাচন করুন
# আইপি যেগুলিতে আজ $ int_ block_limit বা আরও খারাপ লগইন রয়েছে
r আরআর_নু_ব্যাড_ইপস_ফুট_কন্ট্রোল_চ্যানেল = @ ()
r আরআর_নিউ_আবাদ_ইপস_ফুট_কন্ট্রোল_চ্যানেল = নির্বাচন-স্ট্রিং $ _আর_লগ_ফায়াল_নাম_কন্ট্রোল_চ্যানেল-প্যাটার্ন "530 1" |
    ফরইচ-অবজেক্ট {$ _। লাইন.সুবস্ট্রিং (20,15) -প্লেস "। *", ""} |
    দল |
    যেখানে {$ _। গণনা -ge $ int_ block_limit} |
    প্রপার্টি নাম নির্বাচন করুন

# আজকের এফটিপি লগ ফাইলের পথ নির্ধারণ করুন
$ str_log_file_name = "সি: \ ইনপটব \ লগস \ লগফায়ার্স \ এফটিপিএসভিসি * \ u_ex" + $ বর্তমান_সামান্য_ট্যাক.টোস্ট্রিং ("yyMMdd") + ".লগ"

# 530 1 "এর জন্য লগ ইন করতে ব্যর্থ হওয়া সিস্টেমগুলির আইপি ধারণ করে এমন লাইনগুলি অনুসন্ধান করতে আজকের এফটিপি লগ ফাইল অনুসন্ধান করুন,
# প্রতিটি লাইন থেকে কেবল আইপি পান, প্রতিটি থেকে প্রচেষ্টা গণনা করতে আইপি দ্বারা আইপিগুলি গ্রুপ করুন এবং কেবলমাত্র নির্বাচন করুন
# আইপি যেগুলিতে আজ $ int_ block_limit বা আরও খারাপ লগইন রয়েছে
# এফটিপিএসভিসিতে * * এর পরিবর্তে এফটিপি-সার্ভারের আইডি যুক্ত করতে হবে, বা ডান লগ-ফোল্ডারটি নিতে হবে
r আরআর_নু_ব্যাড_ইপস_ফুট = @ ()
r আরআর_নউ_ব্যাড_ইপস_ফুটপি = নির্বাচন-স্ট্রিং $ _আর_লগ_ফায়াল_নাম -প্যাটার্ন "530 1" |
    ফরইচ-অবজেক্ট {$ _। লাইন.সুবস্ট্রিং (20,15) -প্লেস "। *", ""} |
    দল |
    যেখানে {$ _। গণনা -ge $ int_ block_limit} |
    প্রপার্টি নাম নির্বাচন করুন

# আইপি এর দুটি অ্যারে সংহত করুন (সুরক্ষা লগ থেকে একটি, এফটিপি লগ থেকে একটি)
r আরআর_নু_ব্যাড_ইপস_সেল = @ ()
# $ আরআর_নু_ব্যাড_পিজ_সাল = @ ($ আরআর_নু_ব্যাড_ইপস_সিকিউরিটি_লগ) + @ (r আরআর_নউ_বাডি_পেস_ফুট_ওভার_লিমিট)
$ আরআর_নু_ব্যাড_ইপস_সাল = @ ($ আরআর_নু_ব্যাড_ইপস_সিকিউরিটি_লগ) + @ (r আরআর_নেউ_ব্যাডস_পিস_ফন্ট_কন্ট্রোল_চ্যানেল) + @ ($ আরআর_নেউ_আবার_ইপস_ফটপ)

# অ্যারে বাছাই করুন, কেবল অনন্য আইপি নির্বাচন করে (কোনও আইপি যদি সুরক্ষা এবং এফটিপি উভয় লগতে প্রদর্শিত হয়)
r আরআর_নু_ব্যাড_ইপস_সাল_সোর্টার্ড = @ ()
$ আরআর_নু_ব্যাড_ইপস_স_লম্বিত = $ আরআর_নু_ব্যাড_পিস_সকল |
    অগ্রণী-অবজেক্ট {[স্ট্রিং] $ _। নাম} |
    নির্বাচন-অবজেক্ট-ইউনিক

# ফায়ারওয়াল অবজেক্ট পান
$ ফায়ারওয়াল = নতুন-অবজেক্ট-কমবজেক্ট hnetcfg.fwpolicy2

"ব্লকএট্যাকারস *" এর সাথে মেলে সমস্ত ফায়ারওয়াল নিয়ম পান
। arr_firewall_rules = $ ফায়ারওয়াল.বিধি | যেখানে {$ _। নামের মতো 'ব্লকএট্যাকারস *'}

# যদি কোনও "ব্লকএট্যাকারস *" ফায়ারওয়াল নিয়মটি এখনও বিদ্যমান না থাকে, একটি তৈরি করুন এবং এটিকে একটি ভেরিয়েবলে সেট করুন
যদি ($ arr_firewall_rules -eq $ নাল) {
    $ str_new_rule_name = "ব্লকএট্যাকারস (তৈরি করা হয়েছে" + $ বর্তমান_ তারিখ_ট্যাক.টস্ট্রিং ("yyyy-MM-dd HH: মিমি: এসএস") + "ইউটিসি)"
    netsh advfirewall ফায়ারওয়াল যোগ করুন নিয়ম dir = ক্রিয়া = ব্লকের নাম = $ str_new_rule_name বিবরণ = "বিধি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে।" সক্ষম = হ্যাঁ রিমোটইপ = "0.0.0.0" | আউট-নাল
    । arr_firewall_rules = $ ফায়ারওয়াল.বিধি | যেখানে {$ _। নামের মতো 'ব্লকএট্যাকারস *'}
}

# বর্তমান "ব্লকএট্যাকারস *" ফায়ারওয়াল বিধি (গুলি) থেকে বিদ্যমান আইপিগুলিকে একটি অ্যারেতে বিভক্ত করুন যাতে আমরা সহজেই তাদের সন্ধান করতে পারি
r অ্যারে_ অস্তিত্ব_ব্যাড_ইপস = @ ()
ভবিষ্যদ্বাণী ($ arr_firewall_rules এ নিয়ম) {
    r arr_existing_bad_ips + = $ বিধি। রিমোট অ্যাড্রেসস -স্প্লিট (',')
}

# ফায়ারওয়াল বিধি দ্বারা নিয়মিতভাবে অবরুদ্ধ আইপিগুলির বাইরে সাবনেট মাস্কগুলি সাফ করুন
r অ্যারে_ অস্তিত্ব_আবাদ_ইপস_বিহীন_মাস্ক = @ ()
r arr_existing_bad_ips_without_masks = r arr_existing_bad_ips | ফরইচ-অবজেক্ট {$ _- স্থান "/.*", ""}

# 115 এবং 116 লাইনে আপনার সার্ভারের আইপি (আইপিভি 4 এবং আইপিভি 6) লিখুন।
# ফায়ারওয়ালে যুক্ত করতে আইপি ঠিকানাগুলি নির্বাচন করুন, তবে কেবলমাত্র ...
r আরআর_নু_ব্যাড_ইপস_ফায়ারওয়াল = @ ()
r অ্যারে_নিউ_আবাদ_ইপস_ফ_ফায়ারওয়াল = $ আরআর_নো_ব্যাড_পিস_সাল_সোর্টার্ড | কোথায় {
    # টিতে একটি আইপি ঠিকানা রয়েছে (যেমন ফাঁকা বা ড্যাশ নয়, যা এফটিপি লগিন ব্যর্থ হওয়া সিস্টেমগুলির জন্য সুরক্ষা লগতে রয়েছে)
    $ _। দৈর্ঘ্য -gt 6-এবং
    # ইতিমধ্যে ফায়ারওয়াল নিয়মে নেই
    ! (r অ্যারে_অস্তিমান_ব্যাড_ইপস_বিহীন_মাস্ক -সূচী $ _) -আর
    # স্থানীয় লুপব্যাক নয়
    ! ($ _। স্টার্টস উইথ ('127.0.0.1')) এবং
    # স্থানীয় সাবনেটের অংশ নয়
    ! ($ _। স্টার্টস উইথ ('192.168।')) এবং
    ! ($ _। স্টার্টস উইথ ('0.0।')) -আর
    ! ($ _। স্টার্টস উইথ ('10 .0। ​​')) এবং
    ! ($ _। স্টার্টস উইথ ('*। *। *। *' *)) এবং
    ! ($: _ StartsWith (। '*: *: *: *: *: *'))
}

# যদি আইপি ব্লক করতে হয় তবে নিম্নলিখিতগুলি করুন ...
যদি ($ আরআর_নু_ব্যাড_ইপস_ফ_ফায়ারওয়াল -ne ull নাল) {
    # স্ক্রিপ্ট-নির্দিষ্ট লগ ফাইলটিতে তারিখ এবং সময় লিখুন
    [তারিখটাইম] :: এখন | আউট-ফাইল-অ্যাপেন্ড-এনকোডিং utf8 সি: \ ইনপটপ \ লগসমূহ \ লগফাইলস \ blockattackers.txt
    # লগ ফাইলের জন্য সদ্য-অবরুদ্ধ আইপি ঠিকানা লিখুন
    r আরআর_নু_ব্যাড_ইপস_ফ_ফায়ারওয়াল | আউট-ফাইল-অ্যাপেন্ড-এনকোডিং utf8 সি: \ ইনপটপ \ লগসমূহ \ লগফাইলস \ blockattackers.txt

    # নতুন আইপিগুলি কেবল একটি নিয়মে যুক্ত করা হয়েছে তা নিশ্চিত করতে বুলিয়ান
    n bln_added_to_rule = 0

    # অ্যারে একবারে প্রতিটি নিয়ম থেকে খারাপ আইপি রাখার জন্য, তাই আমরা নিশ্চিত করতে পারি যে নতুন যুক্ত করা 1000 আইপি-র বেশি হবে না
    r অ্যারে_ডিজিটিং_আবাদ_ইপস_কন্টেন_রুল = @ ()

    # ফায়ারওয়ালে প্রতিটি "ব্লকএট্যাকার *" নিয়মের জন্য, নিম্নলিখিতগুলি করুন ...
    ভবিষ্যদ্বাণী ($ arr_firewall_rules এ নিয়ম) {
        যদি ($ bln_added_to_rule -ne 1) {
            # বিদ্যমান নিয়ম থেকে বিদ্যমান আইপিগুলিকে একটি অ্যারেতে বিভক্ত করুন যাতে আমরা সেগুলি সহজেই গণনা করতে পারি
            r আরআর_অস্তিত্ব_আবাদ_ইপস_সকালীন_রোলে = $ নিয়ম em রিমোট অ্যাড্রেসস -স্প্লিট (',')

            # যদি আইপি যুক্ত করতে হয় তবে নিয়মে আইপি সংখ্যাটি 1000 বিয়োগের কম হলে এই নিয়মে এগুলি যুক্ত করুন
            যদি (r arr_new_bad_ips_for_firewall.Count -le (1000 - r arr_existing_bad_ips_current_rule.Count)) {
                # ফায়ারওয়াল নিয়মে নতুন আইপি যুক্ত করুন
                r আরআর_নু_ব্যাড_ইপস_ফ_ফায়ারওয়াল | % {$ বিধি। রিমোট অ্যাড্রেসস + = ',' + $ _}

                # আইপিগুলিতে লগ ফাইল যুক্ত করার জন্য কোন নিয়মটি লিখুন
                প্রতিধ্বনি "উইন্ডোজ ফায়ারওয়াল নিয়মে উপরের নতুন আইপি ঠিকানাগুলি যুক্ত হয়েছে:" $ नियम।নাম | আউট-ফাইল-অ্যাপেন্ড-এনকোডিং utf8 সি: \ ইনপটপ \ লগসমূহ \ লগফাইলস \ blockattackers.txt

                # বুলিয়ান সেট করুন যাতে আইপি যুক্ত করার সময় অন্য কোনও নিয়ম বাদ দেওয়া হয়
                n bln_added_to_rule = 1
            }
        }
    }

    # যদি অন্য কোনও "ব্লকএট্যাকারস *" ফায়ারওয়াল নিয়মে জায়গা না থাকে তবে একটি নতুন তৈরি করুন এবং এতে আইপি যুক্ত করুন
    যদি ($ bln_added_to_rule -ne 1) {
        $ str_new_rule_name = "ব্লকএট্যাকারস (তৈরি করা হয়েছে" + $ বর্তমান_ তারিখ_ট্যাক.টস্ট্রিং ("yyyy-MM-dd HH: মিমি: এসএস") + "ইউটিসি)"
        netsh advfirewall ফায়ারওয়াল যোগ করুন নিয়ম dir = ক্রিয়া = ব্লকের নাম = $ str_new_rule_name বিবরণ = "বিধি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে।" সক্ষম = হ্যাঁ রিমোটইপ = "0.0.0.0" | আউট-নাল
        । new_rule = $ ফায়ারওয়াল.রুলস | যেখানে {$ _। নাম -eq $ str_new_rule_name}

        # ফায়ারওয়াল নিয়মে নতুন আইপি যুক্ত করুন
        r আরআর_নু_ব্যাড_ইপস_ফ_ফায়ারওয়াল | % {$ new_rule.RemoteAddresses + = ',' + $ _}

        # আইপিগুলিতে লগ ফাইল যুক্ত করার জন্য কোন নিয়মটি লিখুন
        প্রতিধ্বনি "নতুন তৈরি উইন্ডোজ ফায়ারওয়াল নিয়মে উপরের নতুন আইপি ঠিকানাগুলি যুক্ত হয়েছে:" $ new_rule.Name | আউট-ফাইল-অ্যাপেন্ড-এনকোডিং utf8 সি: \ ইনপটপ \ লগসমূহ \ লগফাইলস \ blockattackers.txt
    }
}

FTPSVC*54 লাইনে FTP- র লগ-ফোল্ডারের নামটি কারণ পূর্ণ করতে হবে। 115 এবং 116 লাইনে আপনার সার্ভারের আইপি (আইপিভি 4 এবং আইপিভি 6) প্রবেশ করতে হবে, অন্যথায় নিজস্ব সার্ভার আইপি ফায়ারওয়াল-বিধিতে একশ বার যুক্ত হতে পারে। ভেরিয়েবলটি $int_block_limitআমি আমার সার্ভারে 1 এ সেট করছি, সুতরাং স্ক্রিপ্টটি হ্যাকারদের আক্রমণকে আটকাচ্ছে যা দুই সেকেন্ডের মধ্যে 4625-ইভেন্টের কারণ হয়ে থাকে। আমি এখনও কয়েক মিনিটের সময়কালে 4625-ইভেন্টগুলি ঘটানোর সাথে সাথে স্ক্রিপ্টটি চালানোর বিষয়ে ভাবছি। কারণ হিসাবে, স্ক্রিপ্টগুলি পৃথক করা এবং 46625-ইভেন্ট দ্বারা চালিত 4625-ইভেন্টগুলি এবং অন্য একটি এফটিপি-র লগ-ফোল্ডারগুলি প্রতি 5 বা 10 মিনিটের মধ্যে পৃথক ফায়ারওয়াল-বিধি-বিধান সহ চেক করে স্ক্রিপ্টগুলি পরীক্ষা করাও সম্ভব হবে cause এবং লগ-ফাইল।


-1

আমি এসকিউএল জন্য আমার যোগ করেছেন

# Select from the Application log (SQL) all IP addresss that have more than $int_block_limit logon failure within $dat_time_window
$arr_new_bad_ips_SQL_log = @()
$arr_new_bad_ips_SQL_log = Get-EventLog -LogName 'Application' -After $dat_time_window |
    Where-Object{$_.EventID -eq 18456} |
    Select-Object @{n='CLIENT';e={$_.ReplacementStrings[-1]}} |
    Group-Object -property CLIENT |
    Where {$_.Count -ge $int_block_limit} |
    Select -property Name |
    {
        $_.Name = $_.Name.Replace(" [CLIENT: ", "");
        $_.Name = $_.Name.Replace("]", "");
        return $_;
    }

তারপরে আপনাকে ips_all এ অ্যারে যুক্ত করতে হবে

$arr_new_bad_ips_all = @($arr_new_bad_ips_SQL_log) + @($arr_new_bad_ips_security_log) + @($arr_new_bad_ips_ftp_control_channel) + @($arr_new_bad_ips_ftp)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.