rubric/modules/infosecmodules/infosec_netsec.go

243 lines
9.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package infosecmodules
import (
"rubric/utils"
)
var NetsecModule = Module{
Key: "netsec",
Aliases: []string{"ns", "network", "сетьбез"},
Title: "Сетевая безопасность",
Description: "Сканирование, анализ трафика, IDS/IPS, VPN, сегментация сети",
Run: showNetsec,
}
func showNetsec() {
utils.Header("InfoSec — Сетевая безопасность")
utils.Section("Сетевая разведка и сканирование")
utils.Code(`# nmap — сетевой сканер:
nmap 192.168.1.1 # базовое сканирование
nmap 192.168.1.0/24 # сканировать подсеть
nmap -sV 192.168.1.1 # определить версии сервисов
nmap -sV -sC 192.168.1.1 # + скрипты по умолчанию
nmap -p 22,80,443 192.168.1.1 # конкретные порты
nmap -p 1-1000 192.168.1.1 # диапазон портов
nmap -p- 192.168.1.1 # все 65535 портов
nmap -A 192.168.1.1 # OS, версии, скрипты, traceroute
nmap -O 192.168.1.1 # определить ОС
nmap -sn 192.168.1.0/24 # только ping sweep (без портов)
nmap -sS 192.168.1.1 # SYN scan (stealth, нужен root)
nmap -sU -p 53,161 192.168.1.1 # UDP сканирование
nmap -Pn 192.168.1.1 # не пинговать перед сканом
nmap --script vuln 192.168.1.1 # проверка уязвимостей
nmap -oA results 192.168.1.1 # сохранить в 3 форматах
# masscan — очень быстрое сканирование:
masscan -p80,443 192.168.0.0/16 --rate=10000
# rustscan — быстрый сканер на Rust:
rustscan -a 192.168.1.1 -- -sV -sC`)
utils.Section("Анализ трафика")
utils.Code(`# tcpdump — захват пакетов в CLI:
tcpdump -i eth0 # всё с интерфейса
tcpdump -i eth0 port 80 # только HTTP
tcpdump -i eth0 host 192.168.1.10 # к/от хоста
tcpdump -i eth0 'tcp and port 443' # HTTPS
tcpdump -i eth0 -w capture.pcap # сохранить в файл
tcpdump -r capture.pcap # читать файл
tcpdump -i eth0 -n -A port 80 # без разрешения имён, ASCII
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' # SYN пакеты
# Фильтры BPF (Berkeley Packet Filter):
host 10.0.0.1 # хост
net 192.168.1.0/24 # подсеть
port 22 # порт
tcp / udp / icmp # протокол
src host 10.0.0.1 # только источник
dst port 80 # только назначение
not port 22 # исключить SSH`)
utils.Println(utils.ColorBold + "Wireshark — GUI анализ:" + utils.ColorReset)
utils.Code(`# Фильтры дисплея Wireshark:
ip.addr == 192.168.1.1 # IP
tcp.port == 80 # порт
http # только HTTP
http.request.method == "POST" # POST запросы
tls.handshake # TLS handshake
!(arp or dns) # исключить ARP и DNS
tcp.flags.syn == 1 # SYN пакеты
frame contains "password" # строка в пакете
tcp.analysis.retransmission # ретрансмиссии
# Tshark — CLI версия Wireshark:
tshark -i eth0 -f "port 80" -w output.pcap
tshark -r capture.pcap -T fields -e ip.src -e http.host`)
utils.Section("IDS/IPS — системы обнаружения вторжений")
utils.Code(`IDS (Intrusion Detection System) — обнаруживает, уведомляет
IPS (Intrusion Prevention System) — обнаруживает И блокирует
Типы:
NIDS — сетевой (анализирует трафик)
HIDS — хостовый (файлы, логи, процессы)
Signature-based — сравнение с известными паттернами
Anomaly-based — отклонение от нормы (ML)
Snort — популярный NIDS/IPS:
snort -i eth0 -c /etc/snort/snort.conf
snort -r capture.pcap -c /etc/snort/snort.conf
# Правило Snort:
alert tcp any any -> $HOME_NET 22 (
msg:"Brute force SSH";
flow:to_server;
threshold:type both, track by_src, count 5, seconds 60;
sid:1000001; rev:1;
)
Suricata — современная замена Snort:
Многопоточный, поддерживает Lua-скрипты, YAML-конфиг
OSSEC / Wazuh — HIDS:
Анализ логов, мониторинг файловой системы (FIM),
мониторинг реестра Windows, активный ответ`)
utils.Section("Брандмауэры и сегментация")
utils.Code(`Типы файрволов:
Packet Filter — фильтрация по IP/порту/протоколу (L3-L4)
Stateful — отслеживает состояние соединений
Application (L7) — анализирует контент приложений
WAF — Web Application Firewall (HTTP/HTTPS)
NGFW — Next-Gen FW (IPS + AppID + SSL inspection)
Сегментация сети:
DMZ — демилитаризованная зона (веб-серверы, доступные снаружи)
Разделение на VLAN по функции: серверная, управление, пользователи
Micro-segmentation — в облаке и K8s (Network Policy)
# iptables (Linux):
# Разрешить входящий SSH:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешить установленные соединения:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Заблокировать всё остальное входящее:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Сохранить правила:
iptables-save > /etc/iptables/rules.v4
# nftables (современная замена iptables):
nft add table ip filter
nft add chain ip filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule ip filter input tcp dport 22 accept
nft add rule ip filter input ct state established,related accept
# Kubernetes Network Policy:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes: [Ingress, Egress]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-api
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 8000`)
utils.Section("VPN — виртуальные частные сети")
utils.Code(`Типы VPN:
Remote Access VPN — подключение удалённых пользователей
Site-to-Site VPN — соединение офисов
Split Tunneling — часть трафика через VPN, остальное напрямую
Протоколы:
WireGuard — современный, быстрый, простой (рекомендуется)
OpenVPN — популярный, гибкий, на TLS
IPsec — стандарт, сложная настройка
L2TP/IPsec — устаревает
PPTP — СЛОМАН, не использовать
# WireGuard — быстрая настройка:
# Установка:
apt install wireguard
# Генерация ключей:
wg genkey | tee privatekey | wg pubkey > publickey
# /etc/wireguard/wg0.conf (сервер):
[Interface]
PrivateKey = <server_private_key>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.0.0.2/32
# /etc/wireguard/wg0.conf (клиент):
[Interface]
PrivateKey = <client_private_key>
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <server_public_key>
Endpoint = server_ip:51820
AllowedIPs = 0.0.0.0/0 # весь трафик через VPN
PersistentKeepalive = 25
# Запуск:
wg-quick up wg0
systemctl enable wg-quick@wg0`)
utils.Section("Сетевые атаки и защита")
utils.Code(`ARP Spoofing / MITM:
Атака: отправка ложных ARP-ответов → перехват трафика
Защита: Dynamic ARP Inspection (DAI) на коммутаторе
DNS Spoofing / Cache Poisoning:
Атака: подмена DNS-ответов
Защита: DNSSEC, DNS over HTTPS (DoH), DNS over TLS (DoT)
DDoS — Distributed Denial of Service:
Volumetric — переполнение канала (UDP flood, DNS amplification)
Protocol — исчерпание ресурсов (SYN flood, Ping of Death)
Application — L7 атаки (HTTP flood, Slowloris)
Защита: CDN (Cloudflare), rate limiting, scrubbing centers
SYN Flood:
Атака: отправка SYN без ACK → очередь half-open соединений
Защита: SYN cookies (sysctl net.ipv4.tcp_syncookies=1)
Man-in-the-Middle (MITM):
Перехват и изменение трафика
Защита: TLS с пиннингом сертификата, HSTS, HPKP
Защита от сканирования:
fail2ban — блокировка после N неудачных попыток
Port knocking — последовательность "стуков" для открытия порта
Honeypots — приманки для обнаружения злоумышленников`)
utils.Footer()
}