скрипт

!/usr/bin/env bash

full_net_audit.sh

Автоматизированный сетевой аудит на Kali Linux:

– Nmap: discovery + полное сканирование

– Nmap NSE vuln + vulners (CVE)

– логическая карта сети (SERVER / WORKSTATION)

– TShark: захват и анализ трафика

– ssh-audit, Netcat

– текстовый и PDF-отчёт

set -euo pipefail

NETWORK=”${1:-}” # например, 192.168.1.0/24
IFACE=”${2:-eth0}” # сетевой интерфейс по умолчанию
TARGET_SSH_PORT=”22″ # порт SSH по умолчанию

timestamp=”$(date +”%Y-%m-%d_%H-%M-%S”)”
OUTDIR=”audit_${timestamp}”
mkdir -p “${OUTDIR}”

log() {
echo “[$(date +”%H:%M:%S”)] $*”
}

if [[ -z “${NETWORK}” ]]; then
echo “Использование: $0 <сеть/маска> [интерфейс]” >&2
echo “Пример: $0 192.168.1.0/24 eth0” >&2
exit 1
fi

log “Создан каталог отчёта: ${OUTDIR}”

#

Проверка наличия необходимых утилит

#

log “Проверка наличия необходимых утилит…”
MISSING=0
for bin in nmap tshark ssh-audit nc enscript ps2pdf; do
if ! command -v “$bin” >/dev/null 2>&1; then
echo “Требуется утилита: $bin (установите через apt/pip)” >&2
MISSING=1
fi
done
if [[ $MISSING -ne 0 ]]; then
echo “Установите отсутствующие утилиты и запустите скрипт снова.” >&2
exit 1
fi

VULNERS_PATH=”/usr/share/nmap/scripts/vulners.nse”
if [[ ! -f “${VULNERS_PATH}” ]]; then
log “ВНИМАНИЕ: vulners.nse не найден (${VULNERS_PATH}). Будет использован только –script vuln.”
fi

#

1. Сканирование сети Nmap

#

log “Сканирование сети Nmap (обнаружение хостов)…”
NMAP_HOST_DISC=”${OUTDIR}/nmap_host_discovery.nmap”
nmap -sn “${NETWORK}” -oN “${NMAP_HOST_DISC}” -oX “${OUTDIR}/nmap_host_discovery.xml”

Извлекаем список живых хостов

HOSTS_FILE=”${OUTDIR}/alive_hosts.txt”
grep “Nmap scan report for” “${NMAP_HOST_DISC}” | awk ‘{print $5}’ | sort -u > “${HOSTS_FILE}” || true

HOST_COUNT=”$(wc -l < “${HOSTS_FILE}” 2>/dev/null || echo 0)”
log “Найдено хостов: ${HOST_COUNT}”

#

2. Детальное сканирование портов и сервисов

#

log “Детальное сканирование портов и сервисов для живых хостов…”
NMAP_DETAILS=”${OUTDIR}/nmap_detailed.nmap”
if [[ -s “${HOSTS_FILE}” ]]; then
nmap -sV -sC -O -p- -iL “${HOSTS_FILE}” -oN “${NMAP_DETAILS}” -oX “${OUTDIR}/nmap_detailed.xml”
else
log “Файл с хостами пустой, пропускаю детальное сканирование.”
fi

#

2a. Проверка уязвимостей Nmap NSE

#

log “Проверка уязвимостей Nmap (скрипты категории vuln)…”
NMAP_VULN=”${OUTDIR}/nmap_vuln.nmap”
NMAP_VULN_XML=”${OUTDIR}/nmap_vuln.xml”

if [[ -s “${HOSTS_FILE}” ]]; then
# Все скрипты категории vuln [web:23][web:29]
nmap -sV –script vuln -iL “${HOSTS_FILE}” -oN “${NMAP_VULN}” -oX “${NMAP_VULN_XML}”
else
log “Нет живых хостов, vuln-скан пропущен.”
fi

Дополнительный скан с vulners.nse (CVE) [web:20][web:26][web:27]

NMAP_VULNERS=”${OUTDIR}/nmap_vulners.nmap”
if [[ -f “${VULNERS_PATH}” && -s “${HOSTS_FILE}” ]]; then
log “Дополнительный скан с vulners.nse (CVE‑matching)…”
head -n 10 “${HOSTS_FILE}” | while read -r vh; do
[[ -z “$vh” ]] && continue
log “vulners для ${vh}”
echo “===== ${vh} =====” >> “${NMAP_VULNERS}”
nmap -sV –script vulners “${vh}” >> “${NMAP_VULNERS}” 2>&1
echo >> “${NMAP_VULNERS}”
done
else
log “vulners.nse отсутствует или нет хостов — пропускаю дополнительный CVE‑скан.”
fi

#

2b. Построение карты сети (логическое)

#

log “Построение логической карты сети (сервера / АРМ)…”

TOPOLOGY_TXT=”${OUTDIR}/network_map.txt”

“${TOPOLOGY_TXT}”

if [[ -s “${NMAP_DETAILS}” ]]; then
current_host=””
current_os=””
current_ports=””

while IFS= read -r line; do
# Новый хост
if [[ “$line” =~ ^Nmap\ scan\ report\ for\ ]]; then
# Классифицируем предыдущий хост
if [[ -n “${current_host}” ]]; then
role=”WORKSTATION”
if echo “${current_ports}” | grep -Eq ‘(:80/|:443/|:25/|:110/|:143/|:445/|:1433/|:1521/|:3306/|:5432/)’ \
|| echo “${current_os}” | grep -Eiq ‘server|linux’; then
role=”SERVER”
fi
echo “${current_host} | ${role} | OS: ${current_os} | PORTS: ${current_ports}” >> “${TOPOLOGY_TXT}”
fi

  current_host="$(echo "$line" | awk '{print $5}')"
  current_os=""
  current_ports=""
  continue
fi

# Информация об ОС [web:35][web:38]
if [[ "$line" =~ ^OS\ details: ]]; then
  current_os="${line#OS details: }"
  continue
fi
if [[ "$line" =~ ^Aggressive\ OS\ guesses: ]]; then
  current_os="${line#Aggressive OS guesses: }"
  continue
fi

# Порты: "PORT   STATE SERVICE VERSION"
if echo "$line" | grep -Eq '^[0-9]+/tcp'; then
  port="$(echo "$line" | awk '{print $1}')"
  svc="$(echo "$line" | awk '{print $3}')"
  current_ports+="${port}(${svc}),"
  continue
fi

done < “${NMAP_DETAILS}”

# Последний хост
if [[ -n “${current_host}” ]]; then
role=”WORKSTATION”
if echo “${current_ports}” | grep -Eq ‘(:80/|:443/|:25/|:110/|:143/|:445/|:1433/|:1521/|:3306/|:5432/)’ \
|| echo “${current_os}” | grep -Eiq ‘server|linux’; then
role=”SERVER”
fi
echo “${current_host} | ${role} | OS: ${current_os} | PORTS: ${current_ports}” >> “${TOPOLOGY_TXT}”
fi

log “Карта сети сохранена в ${TOPOLOGY_TXT}”
else
log “Нет детальных данных Nmap, карта сети не построена.”
fi

#

3. Захват трафика TShark

#

log “Захват трафика на интерфейсе ${IFACE} (20 секунд)…”
PCAP_FILE=”${OUTDIR}/capture.pcap”
(timeout 20 tshark -i “${IFACE}” -w “${PCAP_FILE}” >/dev/null 2>&1) || true

log “Анализ трафика: HTTP-запросы и возможные логины/пароли…”
TS_HTTP=”${OUTDIR}/tshark_http.txt”
TS_CRED=”${OUTDIR}/tshark_credentials.txt”

if [[ -f “${PCAP_FILE}” ]]; then
# HTTP‑запросы (display filter http.request) [web:19]
tshark -r “${PCAP_FILE}” -Y “http.request” \
-T fields -e ip.src -e ip.dst -e http.host -e http.request.uri \
> “${TS_HTTP}” 2>/dev/null || true

# Возможные логины/пароли: HTTP Basic и FTP USER/PASS [web:19]
tshark -r “${PCAP_FILE}” \
-Y ‘http.authbasic || ftp.request.command == “USER” || ftp.request.command == “PASS”‘ \
-T fields -e ip.src -e ip.dst -e ftp.request.command -e ftp.request.arg -e http.authorization \
> “${TS_CRED}” 2>/dev/null || true
else
log “Файл pcap не создан, анализ трафика пропущен.”
fi

#

4. Аудит SSH (ssh-audit)

#

log “Аудит SSH сервисов…”
SSH_AUDIT_REPORT=”${OUTDIR}/ssh_audit.txt”

“${SSH_AUDIT_REPORT}”

if [[ -s “${HOSTS_FILE}” ]]; then
while read -r host; do
[[ -z “$host” ]] && continue
log “SSH-audit для ${host}:${TARGET_SSH_PORT}”
{
echo “===== ${host}:${TARGET_SSH_PORT} =====”
ssh-audit “${host}:${TARGET_SSH_PORT}” || echo “SSH недоступен”
echo
} >> “${SSH_AUDIT_REPORT}” 2>&1
done < “${HOSTS_FILE}”
fi

#

5. Проверка портов Netcat (22/80/443)

#

log “Проверка ключевых портов Netcat (22,80,443)…”
NC_REPORT=”${OUTDIR}/netcat_ports.txt”

“${NC_REPORT}”

KEY_PORTS=(22 80 443)
if [[ -s “${HOSTS_FILE}” ]]; then
while read -r host; do
[[ -z “$host” ]] && continue
for port in “${KEY_PORTS[@]}”; do
echo “===== ${host}:${port} =====” >> “${NC_REPORT}”
nc -vz -w 3 “${host}” “${port}” >> “${NC_REPORT}” 2>&1 || echo “Порт недоступен” >> “${NC_REPORT}”
echo >> “${NC_REPORT}”
done
done < “${HOSTS_FILE}”
fi

#

6. Генерация текстового отчёта

#

REPORT_TXT=”${OUTDIR}/report.txt”

log “Формирование текстового отчёта…”
{
echo “ОТЧЁТ СЕТЕВОГО АУДИТА”
echo “Дата: $(date)”
echo “Сеть: ${NETWORK}”
echo “Интерфейс: ${IFACE}”
echo

echo “1. Результаты сканирования Nmap (обнаружение хостов)”
echo “———————————————“
cat “${NMAP_HOST_DISC}” 2>/dev/null || echo “Нет данных”
echo

echo “2. Детальное сканирование Nmap (порты и сервисы)”
echo “———————————————“
cat “${NMAP_DETAILS}” 2>/dev/null || echo “Нет данных”
echo

echo “2a. Проверка уязвимостей Nmap (NSE vuln/vulners)”
echo “———————————————“
echo “== Скрипты категории vuln (обобщённый vuln‑скан) ==”
cat “${NMAP_VULN}” 2>/dev/null || echo “Нет данных”
echo
echo “== Дополнительный скан с vulners.nse (CVE/высокий риск) ==”
cat “${NMAP_VULNERS}” 2>/dev/null || echo “Нет данных или скрипт vulners.nse недоступен”
echo

echo “2b. Логическая карта сети (сервера / АРМ)”
echo “———————————————“
cat “${TOPOLOGY_TXT}” 2>/dev/null || echo “Нет данных”
echo

echo “3. Анализ трафика (HTTP-запросы)”
echo “———————————————“
cat “${TS_HTTP}” 2>/dev/null || echo “Нет данных”
echo

echo “4. Возможные учетные данные / авторизация”
echo “———————————————“
cat “${TS_CRED}” 2>/dev/null || echo “Нет данных”
echo

echo “5. Аудит SSH (ssh-audit)”
echo “———————————————“
cat “${SSH_AUDIT_REPORT}” 2>/dev/null || echo “Нет данных”
echo

echo “6. Проверка портов (Netcat)”
echo “———————————————“
cat “${NC_REPORT}” 2>/dev/null || echo “Нет данных”
echo

echo “7. Общие рекомендации по устранению уязвимостей”
echo “———————————————“
echo “- Отключить устаревшие и слабые протоколы/шифры SSH (SSHv1, слабые ciphers, MAC).” # [web:5][web:14]
echo “- Ограничить доступ к административным сервисам по IP и использовать файрвол.”
echo “- Перенести чувствительные сервисы на шифрованные протоколы (HTTPS, SFTP).”
echo “- Закрыть незадействованные порты и сервисы, оставить минимально необходимый набор.”
echo “- Использовать сложные пароли/ключи, включить fail2ban или аналог для защиты от брутфорса.”
echo “- Для сервисов с обнаруженными CVE (по vuln/vulners) обновить ПО до актуальных версий или отключить сервис, если он не критичен.” # [web:20][web:21][web:27][web:71]
} > “${REPORT_TXT}”

#

7. Конвертация отчёта в PDF

#

REPORT_PS=”${OUTDIR}/report.ps”
REPORT_PDF=”${OUTDIR}/report.pdf”

log “Конвертация отчёта в PDF…”
if enscript -B -q -p “${REPORT_PS}” “${REPORT_TXT}” && ps2pdf “${REPORT_PS}” “${REPORT_PDF}”; then
log “PDF отчёт создан: ${REPORT_PDF}”
else
log “Не удалось сконвертировать в PDF. Проверьте наличие enscript и ps2pdf.”
fi

log “Аудит завершён. Каталог с результатами: ${OUTDIR}”
log “Основной текстовый отчёт: ${REPORT_TXT}”
log “PDF отчёт (если создан): ${REPORT_PDF}”