Включение логирование на удаленный хост в конфигурации Cisco

logging trap debugging
logging host 192.168.0.171 transport udp port 514
Полезные команды связанные с логированием

Логирование нарушения списков доступа (ACL). Бывает полезно при разборе сетевых. инцидентов. В стандартных списков доступа в интересующей стройке указывается параметр log, который позволяет фиксировать тип, дату и время нарушения списка доступа. В расширенном списке доступа можно в интересующей строке внести параметр log-input позволяющий получать ещё и такую информацию как интерфейс и MAC-адрес источника. На контроле списка доступа можно построить логирование попыток доступа к устройству Cisco.

На устройство могут заходить только админы из сети 10.10.10.0/26, все остальные попытки будут отклоняться и логироваться.

ip access-list extended acl-CiscoAccess
 permit 10.10.10.0 0.0.0.63
 deny any log-input

...
...
...

line vty 0 15
 access-class acl-CiscoAccess in

Логирование событий серверов и клиентов, работающих на устройстве. Например, для настройки логирования событий SSH сервера используется команда:

ip ssh logging events

Для логирования событий синхронизации времени по NTP:

ntp logging

Дальнейшие команды актуальны только при отсутствии TACACS сервера. Запись в журнал всех попыток подключения к устройству:

login on-failure log
login on-success log

Запись в лог команд вводимых в режиме конфигурации:

archive
 log config
 logging enable
 notify syslog contenttype plaintext
 hidekeys

Уведомления о загрузки ЦП. В этом примере срабатывает уведомление при возрастании нагрузки более 80% и снижении загруз меньше 20% в течении 5 секунд:

process cpu threshold type total rising 80 interval 5 falling 20 interval 5

В этом примере создается уведомление (запись в журнал) при привышении нагрузки более 40% в течении 300 секунд:

process cpu statistics limit entry-percentage 40 size 300

Просмотр журнала истории уведомлений ЦП:

show processes cpu history table
show processes cpu sorted 1min

Скрипт приема syslog сообщений

$day = Get-Date -Format "dd"
$month = Get-Date -Format "MM"
$year = Get-Date -Format "yyyy"
$today = "$day-$month-$year"



$SysLogPort = 514                  # Default SysLog Port
$Buffer = New-Object Byte[] 1024   # Maximum SysLog message size
$EnableMessageValidation = $True   # Enable check of the PRI and Header
$EnableLocalLogging = $True        # Enable local logging of received messages
$EnableConsoleLogging = $True     # Enable logging to the console
$EnableHostNameLookup = $false      # Lookup hostname for connecting IP
$EnableHostNamesOnly = $true       # Uses Host Name only instead of FQDNs
$LogFolder = "C:\scripts\log\"
$CriticalSound = new-Object System.Media.SoundPlayer;
$CriticalSound.SoundLocation="c:\WINDOWS\Media\Windows Critical Stop.wav";
$GoodSound = new-Object System.Media.SoundPlayer;
$GoodSound.SoundLocation="c:\WINDOWS\Media\tada.wav";



Add-Type -TypeDefinition @"
public enum Syslog_Facility
{
        kern,
        user,
        mail,
        system,
        security,
        syslog,
        lpr,
        news,
        uucp,
        clock,
        authpriv,
        ftp,
        ntp,
        logaudit,
        logalert,
        cron,
        local0,
        local1,
        local2,
        local3,
        local4,
        local5,
        local6,
        local7,
}
"@

Add-Type -TypeDefinition @"
public enum Syslog_Severity
{
        Emergency,
        Alert,
        Critical,
        Error,
        Warning,
        Notice,
        Informational,
        Debug
}
"@

function Start-SysLog {
    $Socket = CreateSocket
    StartReceive $Socket
}


function CreateSocket {
    $Socket = New-Object Net.Sockets.Socket(
        [Net.Sockets.AddressFamily]::Internetwork,
        [Net.Sockets.SocketType]::Dgram,
        [Net.Sockets.ProtocolType]::Udp)

    $ServerIPEndPoint = New-Object Net.IPEndPoint(
        [Net.IPAddress]::Any,
        $SysLogPort)

    $Socket.Bind($ServerIPEndPoint)

    Return $Socket
}

## Не используется ??
function GetHostName([String]$HostName) {
    if (!$EnableHostNameLookup) { Return $HostName }
    if ([Net.IPAddress]::TryParse($HostName, [Ref]$Null)) {
        $Temp = (nslookup -q=ptr $HostName | ?{ $_ -Like "*name = *" })
        $Temp = $Temp -Replace ".*name = "
        if ($Temp -ne [String]::Empty) { $HostName = $Temp }
    }
    if ($EnableHostNamesOnly) {
        Return $HostName.Split(".")[0]
    }
    Return $HostName
}

function StartReceive([Net.Sockets.Socket]$Socket) {
    # Placeholder to store source of incoming packet
    $SenderIPEndPoint = New-Object Net.IPEndPoint([Net.IPAddress]::Any, 0)
    $SenderEndPoint = [Net.EndPoint]$SenderIPEndPoint

    $ServerRunning = $True
    While ($ServerRunning -eq $True) {
        $BytesReceived = $Socket.ReceiveFrom($Buffer, [Ref]$SenderEndPoint)
        $Message = $Buffer[0..$($BytesReceived - 1)]


        $MessageString = [Text.Encoding]::ASCII.GetString($Message)
        ### Тест
        # Write-Host $MessageString

        $Priority = [Int]($MessageString -Replace "<|>.*")  

        [int]$FacilityInt = [Math]::truncate([decimal]($Priority / 8))
        $Facility = [Enum]::ToObject([Syslog_Facility], $FacilityInt)
        [int]$SeverityInt = $Priority - ($FacilityInt * 8 )
        $Severity = [Enum]::ToObject([Syslog_Severity], $SeverityInt)


        $HostName =  $SenderEndPoint.Address.IPAddressToString

        if($Facility -eq "System") {
            # $MessageString = "<SCOM:$Severity> $(Get-Date -Format "MMM dd @ hh:mmtt") $MessageString"
            $MessageString = "[$(Get-Date -Format "yyyy-MM-dd HH:mm:ss")] $HostName <$Severity> - $MessageString"
        }
        else {
            # $MessageString = " $MessageString"
            $MessageString = "[$(Get-Date -Format "yyyy-MM-dd HH:mm:ss")] $HostName <$Severity> - $MessageString"
        }
        switch($Severity) {
            Emergency
                    {$Fore = 'White'; $Back = 'Red'}
            Alert
                    {$Fore = 'White'; $Back = 'Red'}
            Error
                    {$Fore = 'Red'; $Back = 'Black'}
            Critical
                    {
                        $Fore = 'Red'; $Back = 'Black'
                        $CriticalSound.Play()
                    }
            Warning
                    {$Fore = 'Black'; $Back = 'Yellow'}
            Notice
                    {$Fore = 'Black'; $Back = 'white'}
            Informational
                    {
                    $Fore = 'White'; $Back = 'Green'
                    #$GoodSound.Play()
                    }
            Debug
                    {$Fore = 'Black'; $Back = 'white'}
            default
                    {$Fore = 'White'; $Back = 'Red'}
        }

        Write-Host $MessageString -ForegroundColor $Fore -BackgroundColor $Back



        $Day = (Get-Date).Day
        $DateStamp = (Get-Date).ToString("yyyyMMdd")
        # $LogFile = "$LogFolder$HostName-$DateStamp.log"
        $LogFile = "$LogFolder$DateStamp.log"
        $MessageString >> $LogFile


    }
}



Start-SysLog

Не забываем открыть необходимые сетевые порты (UDP\514) в брэндмауре

Ссылки