Куда я попал?
SECURITM это SGRC система, ? автоматизирующая процессы в службах информационной безопасности. SECURITM помогает построить и управлять ИСПДн, КИИ, ГИС, СМИБ/СУИБ, банковскими системами защиты.
А еще SECURITM это место для обмена опытом и наработками для служб безопасности.

Резервное копирование и архивирование конфигураций сетевого оборудования

Цель: сохранение возможности быстрого восстановления конфигурации сетевого оборудования (при сбросе, сбое или замене оборудования).

С заданной периодичностью со всего сетевого оборудования (коммутаторов и маршрутизаторов) собирается текущая конфигурация.
Пример реализации для оборудования Cisco - в заметке.
Собираются:
  1. Конфигурация (show running-config view full)
  2. Таблицы соединений с другим коммутационным оборудованием (show cdp neighbors detail)
  3. Таблицы розданных IP по DHCP (show ip dhcp binding)
  4. Таблицы подключенных MAC адресов (show mac address-table)
Глубина хранения архивных версий: N лет.
Место хранения резервных копий: XXX.
Примечание: доступ к месту хранения скрипта и резервных копий должен быть ограничен.

Проверка работоспособности защитной меры:
  1. Проверить, что список проверяемых коммутаторов соответствует актуальному
  2. Проверить, что подключения проходят успешно (смотреть логи отработки скрипта);
  3. Проверить, что конфигурации собираются успешно (проверить каталог с результатами).
Рекомендации к заполнению карточки:
  • Описать методологию выполнения, хранения и проверки резервных копий конфигураций;
  • Добавить шаблон регулярной задачи на выполнение и проверку резервных копий конфигураций;
  • Если ведется реестр скриптов - привязать соответствующий скрипт к карточке как инструмент.
Область действия: Вся организация
Классификация
Тип
Восстановительная ?
Реализация
Автоматически
Периодичность
Еженедельно
Ответственный
Не определено
Инструменты
Не определено

Ресурсная оценка

Качественная оценка

Количественная оценка

Итоговая оценка

Стоимость

Трудозатраты

Сложность

Стоимость, тыс. руб

Трудозатраты, дней/ год

CAPEX

?
Неизвестно
Неизвестно
Неизвестно
Неизвестно
Неизвестно
Отсутствует

OPEX

?
Неизвестно
Неизвестно
Неизвестно
Неизвестно
Неизвестно

Заметки

2
3 года назад

Скрипт архивирования конфигураций Cisco

В файл cisco_ip_list.txt добавить список устройств, в тело скрипта прописать пароль доступа, настроить запуск скрипта по расписанию через Планировщик задач.

# PowerShell
#iex (New-Object Net.WebClient).DownloadString("https://gist.github.com/darkoperator/6152630/raw/c67de4f7cd780ba367cccbc2593f38d18ce6df89/instposhsshdev")
#Get-Command -Module Posh-SSH

$username = "cisco_audit"
$password = "[PAST PASSWORD HERE, USE READ ONLY USER]" | ConvertTo-SecureString -asPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential($username,$password)

#$cred = Get-Credential

$ssh_hosts = Get-Content c:\scripts\Cisco\cisco_ip_list.txt

[array]$bad_hosts = $null

$today = "$((get-date).Year)-$((get-date).month)-$((get-date).day)"
foreach ($ssh_host in $ssh_hosts)
{
    $data_conf = ""
    $data_cdp = ""
    write-output $ssh_host

    if(!($SSHSession = New-SSHSession -ComputerName $ssh_host -AcceptKey -Force -Credential $Cred -Verbose -ErrorAction SilentlyContinue -WarningAction SilentlyContinue))
    {
        write-output "not connected"
        $bad_hosts += $ssh_host
        continue
    }

    $dir = "C:\scripts\Cisco\result\$today\$($ssh_host)"
    if (!(Test-Path $dir))
    {
        mkdir $dir
    }
    else
    {
        #Remove-SSHSession -SessionId 0
        #continue
    }

    $SSH = $SSHSession | New-SSHShellStream

    $SSH.WriteLine( "enable" )
    sleep 1
    $SSH.WriteLine("cisco")
    sleep 1
    $SSH.WriteLine("terminal length 0")
    sleep 1
    $SSH.read()
    
    $SSH.WriteLine("show running-config view full")
    sleep 8
    $data_conf = $SSH.read()
    $data_conf > $dir\config.txt
        
    $SSH.WriteLine("show cdp neighbors detail")
    sleep 1
    $data_cdp = $SSH.read()
    $data_cdp > $dir\cdp.txt

    $SSH.WriteLine("show ip dhcp binding")
    sleep 2
    $data_conf = $SSH.read()
    $data_conf > $dir\dhcp_bind.txt

    $SSH.WriteLine("show mac address-table")
    sleep 2
    $data_conf = $SSH.read()
    $data_conf > $dir\mac.txt

    Remove-SSHSession -SessionId 0
}

Get-SSHSession

$sshSession | Remove-SSHSession

if(Test-Path "c:\scripts\Cisco\result\cisco_ip_list_bad.txt")
{
    rm c:\scripts\Cisco\result\cisco_ip_list_bad.txt
}
$bad_hosts > c:\scripts\Cisco\result\cisco_ip_list_bad.txt
1 год назад

Скрипт проверки конфигураций Cisco на соответствие требованиям

Скрипт использует данные полученные предыдущим скриптом архивирования конфигураций Cisco
$workdir = "C:\scripts\Cisco"
# $today = "$((get-date).Year)-$((get-date).month)-$((get-date).day)"
$today = Get-Date -Format 'yyyy-MM-dd'

# LOG function
$dt=Get-Date -Format "dd-MM-yyyy"
New-Item -ItemType directory $workdir\log\ -Force | out-null #Создаю директорию для логов
$global:logfilename="$workdir\log\"+$dt+"_LOG.log"
[int]$global:errorcount=0 #Ведем подсчет ошибок
[int]$global:warningcount=0 #Ведем подсчет предупреждений
function global:Write-log	# Функция пишет сообщения в лог-файл и выводит на экран.
{param($message,[string]$type="info",[string]$logfile=$global:logfilename,[switch]$silent)	
	$dt=Get-Date -Format "dd.MM.yyyy HH:mm:ss"	
	$msg=$dt + "`t" + $type + "`t" + $message #формат: 01.01.2001 01:01:01 [tab] error [tab] Сообщение
	Out-File -FilePath $logfile -InputObject $msg -Append -encoding unicode
	if (-not $silent.IsPresent) 
	{
		switch ( $type.toLower() )
		{
			"error"
			{			
				$global:errorcount++
				write-host $msg -ForegroundColor red			
			}
			"warning"
			{			
				$global:warningcount++
				write-host $msg -ForegroundColor yellow
			}
			"completed"
			{			
				write-host $msg -ForegroundColor green
			}
			"info"
			{			
				write-host $msg
			}			
			default 
			{ 
				write-host $msg
			}
		}
	}
}
Clear-Host

$CheckList = Get-Content $workdir\CheckList.txt
$LastDir = (Get-ChildItem -LiteralPath "$workdir\result" -Directory -Filter *-*-* | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1).BaseName
$devicelist = Get-ChildItem -LiteralPath "$workdir\result\$LastDir" -Directory


if(Test-Path "$workdir\result\Compliance\$today.csv")
{
    rm $workdir\result\Compliance\$today.csv
}

foreach($dir in $devicelist)
{
    $IP = $dir.BaseName
    $config = Get-Content $workdir\result\$LastDir\$IP\config.txt
    $hostname = (($config | select-string -pattern "hostname" -casesensitive) -replace  'hostname','').Trim()
    Write-output ""
    Write-log "Check $hostname ($IP)" -type info
    
    $CheckPart = $null
    foreach($check in $CheckList)
    {

        if(!$check) {continue}
        if($check[0] -eq "#") 
        {
            $CheckPart = $check
            continue
        }

        if($check.Contains('|'))
        {
            Write-log "Multi string: $Check" -type warning
            $status = $false
            $result = $null
            foreach($SubCheck in $Check.Split("|"))
            {
                
                $SubResult = $config | select-string -Pattern $SubCheck
                if($SubResult)
                {
                    Write-log $SubCheck -type completed
                    $status = $true
                    $result = $SubResult
                } 
                else
                {
                    Write-log $SubCheck -type error
                }

            }

        } 
        else
        {
            $result = $config | select-string -Pattern $Check
            if($result)
            {
                Write-log $Check -type completed
                $status = $true
            } 
            else
            {
                Write-log $Check -type error
                $status = $false
            }
        }

        
        "$IP;$hostname;$CheckPart;$check;$status" | Out-File -FilePath "$workdir\result\Compliance\$today.csv" -Append

    }
    
}

Пример файла конфигурации CheckList.txt

#Настройка пароля к режиму enable
enable secret 5

#Настройка доступа по SSH
login block-for 60 attempts 3 within 60
ip ssh version 2
exec-timeout 20 0
transport input ssh

#Установка баннера
You have connected to the network equipment of MyCorp

#Настройка парольного доступа к консольному и AUX портам
aaa authentication login AAA_CONSOLE line
login authentication AAA_CONSOLE

#Установка хэшированных алгоритмом SCRYPT паролей
username admin privilege 15 secret 9

#Отключение неиспользуемых сервисов
no ip http server
no ip http secure-server
no service pad
no vstack
no ip domain-lookup|no ip domain lookup

#Отключение протокола cdp
no cdp enable

#Настройка портов доступа
switchport port-security maximum
switchport port-security mac-address sticky
switchport port-security violation restrict

Мы используем cookie-файлы, чтобы получить статистику, которая помогает нам улучшить сервис для вас с целью персонализации сервисов и предложений. Вы может прочитать подробнее о cookie-файлах или изменить настройки браузера. Продолжая пользоваться сайтом, вы даёте согласие на использование ваших cookie-файлов и соглашаетесь с Политикой обработки персональных данных.