networkmanager
apt install network-manager
systemctl status NetworkManager
nmcli device status состояние интерфейсов
nmcli general status
nmcli connection show список доступных подключений (ethernet, vpn и WiFi-сетей)
nmcli device wifi list список доступных Wi-Fi-сетей
nmcli connection show "Проводное соединение 2" информация о сети
nmcli connection up "Проводное соединение 2" подключиться
nmcli conn down "Проводное соединение 2" отключиться
nmcli radio wifi состояние Wi-Fi
nmcli connection add con-name "dhcp" type ethernet ifname ens33 создать подключение, передать тип устройства ethernet (Проводное соединение) и ifname, название сетевого интерфейса
nmcli conn modify "dhcp" ipv4.dns 8.8.8.8 настройки подключения (modify)
nmcli radio wifi on включить или выключить (off) Wi-Fi
nmcli device wifi connect "TP-Link" password 12345678 name "TP-Link Wifi" подключиться к Wi-Fi сети
nmcli networking off отключить сеть через (если управление через Network Manager, указывается в блоке конфигурации renderer для netplan)
nmcli networking on включить сеть
systemctl restart NetworkManager
wireless
apt install wireless-tools
iwconfig
apt install iw
iw list
apt install wavemon
wavemon отобразить качество соединения и мощность передатчика
networking
nano /etc/network/interfaces
auto ens33 активировать интерфейс при загрузке
iface ens33 inet static статический
address 192.168.1.50/24
#netmask 255.255.255.0
gateway 192.168.1.254
dns-nameservers 8.8.8.8 1.1.1.1
auto ens33
iface ens33 inet dhcp динамический
service networking restart перезагрузка сети
systemctl restart networking.service
ip
ip a ip addr show
ip -s link вывести ститстику всех сетевых интерфейсов
ip -br a show вывести только название интерфейса, статус работы и ip-адрес
ip link set dev ens33 up включить сетевой интерфейс
ip link set dev ens33 down выключить сетевой интерфейс
ip link set mtu 1550 dev ens33 изменить mtu
ip link set dev ens33 address AA:BB:CC:DD:EE:FF изменить mac-адрес (предварительно нужно отключить интерфейс, работает до перезагрузки)
ip addr add 192.168.3.106/24 broadcast 192.168.3.255 dev ens33 добавить адрес
ip addr del 192.168.3.106/24 dev ens33 удалить адрес
ip route show отобразить таблицу маршрутизации
ip route add 192.168.4.0 via 192.168.3.100 добавить маршрут
ip route del 192.168.4.0 via 192.168.3.100 удалить маршрут
ip route add 192.168.4.0 dev ens33 указать сетевой интерфейс, через который отправлять пакеты в определенную подсеть
ip neigh show отобразить ARP-таблицу
ip neigh add 192.168.3.110 lladdr b0:be:76:43:21:41 dev ens33
ip neigh del dev end33 192.168.3.110
ip neigh flush очистить ARP-таблицу
net-tools
ifconfig ens33 up/down
ifdown -a выключить все сетевые интерфейсы (пропадут из списка ifconfig) и включить (ifup -a)
ifconfig ens33 192.168.3.106 netmask 255.255.255.0 broadcast 192.168.3.255
ifconfig -s || netstat -i список сетевых интерфейсов
netstat -atu ALL (-a) tcp (-t) и udp (-u)
netstat -lntup LISTEN (-l) dont resolve names (-n) и сканирует директорию /proc для вывода PID/Program name (-p)
arp -a таблица сопоставления ip и mac адресов
route -e отобразить таблицу маршрутизации
route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.3.100 добавить маршрут в подсеть 192.168.4.0 через шлюз 192.168.3.100
route del -net 192.168.4.0 netmask 255.255.255.0 удалить маршрут
networkd
systemctl status systemd-networkd
networkctl list список всех адаптеров, тип и состояния
networkctl status статус службы, Address и Gateway адаптера, DNS-адреса и лог systemd-networkd
networkctl status ens33 характеристики адаптера (Network File, Driver, Vendor, Model, MTU, Speed)
ss
ss -a All отобразить все сокеты
ss -l показать только прослушиваемые сокеты (LISTEN)
ss -t отобразить только установленные TCP соединения (ESTAB/ESTABLISHED)
ss -ua отобразить все открытые UDP сокеты
ss -da DHCP сокеты
ss -x отобразить только локальные UNIX соединения
ss -r Resolve, определять сетевые имена адресов с помощью DNS
ss -p Processes, показать процессы, использующие сокет
ss -n Numeric не определять имена служб (отображать только номер порта в числовом формате)
ss -ltp | grep 8080
ss -tna | grep 22
dns
resolv
cat /etc/resolv.conf | grep nameserver
nano /etc/resolv.conf работает до перезагрузки
domain domain.local
search domain.local
nameserver 8.8.8.8
nameserver 1.1.1.1
resolved
networkctl status отображает список всех настроенные DNS-серверов в системе через netplan (или другое) для всех адаптеров
resolvectl status в systemd 239 (ubuntu 22.04) systemd-resolve переименован в resolvectl, выводит настроенные сервера для global и список все адресов для конкретного сетевого интерфейса Link (ens33)
resolvectl status | grep "Current DNS" отображает текущие используемые DNS-сервер
systemd-resolve --status служба локального DNS сервера
resolvectl flush-caches && systemd-resolve --flush-caches очистить локальный кэш DNS
journalctl -u systemd-resolved | grep -E "IN A|IN PTR|IN AAAA|IN PTR|IN MX" логи кэша DNS
systemctl status systemd-resolved статус службы и его лог
cat /run/systemd/resolve/stub-resolv.conf файл-заглушка для демона systemd-resolved, по умолчанию nameserver 127.0.0.53, который перенаправляет обращения к локальному DNS серверу, а он, в свою очередь уже получает информацию от других серверов в интернете
nano /etc/systemd/resolved.conf конфигурационный файл, отвечающий за настройку DNS-серверов
Включить кэширование:
[Resolve]
DNS=8.8.8.8, 192.168.3.101
Cache=yes
ln -svi /run/systemd/resolve/resolv.conf /etc/resolv.conf создать симлинк для совместимости с приложениями, которые не используют библиотечные вызовы, а обращаются к DNS серверам напрямую, получая их из /etc/resolv.conf
ls -la /etc/resolv.conf
nano /etc/resolv.conf не управляется напрямую службой systemd-resolved, а иногда с помощью использования initscripts или NetworkManager, и любые пользовательские изменения могут быть изменены через время или после перезагрузки
nameserver 8.8.8.8
apt install resolvconf сервис для обновления списа адресов в /etc/resolv.conf (что бы он не перезаписывался)
systemctl status resolvconf
nano /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.8.8
nameserver 1.1.1.1
dig
dig
dig google.com
dig @1.1.1.1 google.com a использовать DNS сервер Cloudflare для преобразования имени
dig @9.9.9.9 google.com mx использовать DNS сервер Quad9 для получения MX записи (A, NS, TXT)
dig -x 8.8.8.8 @9.9.9.9 разрешить ip в имя
mtr
mtr google.com объединяет traceroute и ping каждого узла в трассеровке
mtr -I ens33 google.com указать интерфейс для проверки
mtr -b google.com отображать имя и ip
mtr --tcp google.com использовать TCP SYN-пакеты или UDP-дейтаграммы (--udp)
mtr -s 1000 google.com указать размер пакета
mtr -r -c 1 google.com --json указать кол-во ping пакетов (-c 1 и -i 2 изменить интервал) и вывести в виде отчета (--report) в формате json/xml/csv/raw
doggo
curl -sS https://raw.githubusercontent.com/mr-karan/doggo/main/install.sh | sh DNS cli client (https://github.com/mr-karan/doggo)
doggo yandex.ru запросить домен, используя настройки по умолчанию
doggo yandex.ru MX запросить MX записи домена
doggo yandex.ru MX @8.8.8.8 использует указанный сервер для преобразования имен DNS
doggo -q yandex.ru -t MX --nameserver 1.1.1.1
doggo yandex.ru --aa --ad запрос с установленными флагами авторитетного ответа и аутентифицированных данных
doggo yandex.ru --cd --do запрос с отключенной проверкой и установленными флагами DNSSEC OK
doggo yandex.ru --gp-from Germany Запрос с использованием API Globalping из указанной локации
vnstat
apt install vnstat журнал часового, ежедневного и ежемесячного сетевого трафика
systemctl status vnstat проверить службу
vnstat -l мониторинг в реальном режиме
vnstat -h ежедневная почасовая история
netcat
nc -zv 192.168.3.100 5985 проверить порт без попытки соединения (-z) в подробном режиме (-v)
nc -zvn 192.168.3.100 1-1000 сканирование tcp-портов, не используя преобразование DNS (-n)
nc -zvn 192.168.3.100 1-1000 2>&1 | grep succeeded перенаправить вывод ошибок в stdout и отфильтровать вывод
nc -zvnu 192.168.3.100 5550-5560 сканирование udp-портов (-u)
nc -lp 8081 открыть сокет (чат сервер) в режиме прослушивания (-listen) с указанием номера порта (-p)
nc 192.168.3.101 8081 подключиться к сокету (чат-клиент)
nc -lp 8081 > out.txt все поступившие данные на сокет записываются в файл (вместо вывода в консоль)
cat /etc/passwd | nc -N 192.168.3.101 8081 передать содержимое файла на удаленный сокет принимающей стороны (содержимое /etc/passwd запишется в out.txt) и закрыть удаленный сокет (-N)
nc -l -w 1 -p 8081 задать timeout (-w) ожидания, в течении которого сервер слушает запрос, если будет 0, может не успеть считать запрос, на стороне клиента timeout должен быть не ниже
nc -w 5 -Uvl server.sock > out.txt создать UNIX-сокет и передать вывод в файл, сокет закроется через 5 секунд (-w 5) или если будет задан параметр -N на стороне клиента
lsblk | nc -Uv server.sock подключиться к локальному сокету с второго терминала и отправить вывод команды в файл сокета приема
while true; do echo -e "HTTP/1.1 200 OK\n\n$(systemd-analyze plot)" | nc -l -w 1 -p 8085; done HTTP-сервер с выводом анализа загрузки системы
socket api
port=8085
while true
do
request=$(nc -l -w 1 -p $port)
request=$(echo "$request" | head -n 1)
method=$(echo "$request" | cut -d " " -f 1)
endpoint=$(echo "$request" | cut -d " " -f 2)
if [[ $endpoint == "/api/date" ]]
then
response="HTTP/1.1 200 OK\nContent-Type: application/text\n\n$(date)"
elif [[ $endpoint == "/api/disk" ]]
then
response="HTTP/1.1 200 OK\nContent-Type: application/json\n\n$(lsblk -e7 --json)"
else
response="HTTP/1.1 404 Not Found\n\n404 Not Found\n"
fi
echo -e "$response" | nc -l -w 1 -p $port
done
curl -s http://192.168.3.101:8085/api/date
curl -s http://192.168.3.101:8085/api/disk | jq .blockdevices[]
socket proxy
ncat -l 8080 -k --sh-exec "ncat 192.168.3.101 80"
socat TCP-LISTEN:8080,fork,reuseaddr TCP:192.168.3.101:80
proxy
sudo apt-get install -y dotnet-runtime-8.0
arch="x64" # или "arm64"
sudo curl -s -L "https://github.com/Lifailon/froxy/releases/download/0.4.0/froxy-0.4.0-linux-$arch" -o /usr/local/bin/froxy
sudo chmod +x /usr/local/bin/froxy
froxy --socks 1080 запустить SOCKS прокси на порту 1080
froxy --forward 8080 запустить HTTP/HTTPS прокси на порту 1080
froxy --forward 8080 >> froxy.log & запустить фоновый процесс и передать вывод логов в файл
froxy --local 5514 --remote 192.168.3.100:514 запустить обратный прокси сервер на порту 5514, который перенаправляет на хост 192.168.3.100 и порт 514 (syslog)
froxy --local 192.168.3.100:2121 --remote 192.168.3.101:21 TCP туннелирование для RDP
froxy --local 127.0.0.1:8443 --remote https://example.com принимать HTTPS трафик на порту 8443 и переадресовать на указанный URL (поддерживаются GET и POST запросы с передачей заголовков и тела запроса от клиента, для использования API запросы и прохождения авторизации на сайтах)
froxy --local *:8443 --remote https://example.com --user admin --pass admin слушать на всех интерфейсах и использовать авторизацию
nmap
nmap localhost узнать какие локальные порты прослушиваются
nmap -sV localhost определить какое какая ОС и ПО работает на портах и их версия
nmap -sL 192.168.3.0/24 список хостов с разрешением имен без пинга
nmap -sP 192.168.3.0/24 ping метод host discovery (TCP ACK SYN пакет, используя системныей вызов connect) с отображением производителя сетевой платы
nmap -F 192.168.3.0/24 fast mode port
nmap -A 192.168.3.100 подробное сканирование ОС и ПО (ssh на другом порту, version, ad sites, rdp-ntlm-info)
nmap -sA 192.168.3.100 обнаружить фильтрацию пакетов fw (filtered/unfiltered) с помощью TCP ACK
nmap -PN 192.168.3.100 сканировании защищенного хоста без ping
nmap -sO 192.168.3.100 определить какие именно IP-протоколы доступны и их статус, если отсутствует, значит фильтруется
nmap -PU 192.168.3.100 обойти межсетевой экран с помощью UDP-пинга
nmap -sS 192.168.3.100 выполнить полуоткрытое сканирование (TCP SYN) без установки подключения
nmap -sU 192.168.3.100 проверка только UDP-портов
masscan
apt install masscan асинхронный (отправляет пакеты SYN) сканер TCP портов (https://github.com/robertdavidgraham/masscan)
masscan 192.168.3.100 -p80
masscan 192.168.3.100 -p0-65535 --rate 100
masscan 192.168.3.100 -p0-65535 --rate 100 --ping-timeout 1000
masscan 192.168.3.1-100 -p80
masscan 192.168.3.0/24 -p80,443
masscan 192.168.3.100 -p80 --output-format json --output-file result.json
rustscan
wget https://github.com/RustScan/RustScan/releases/download/2.0.1/rustscan_2.0.1_amd64.deb \ snap install nmapтребуется установить пакет зависимости \apt-get install -fразрешить зависимости \dpkg --install rustscan_2.0.1_amd64.deb\rustscan -a 127.0.0.1\rustscan -a 192.168.3.100` 32400/tcp open plex
tcp
function tcp-scan () {
if [ "$1" == "" ]; then
exit 1
fi
START_PORT=$2; [ -z "$START_PORT" ] && START_PORT=1
END_PORT=$3; [ -z "$END_PORT" ] && END_PORT=65535
PORT_PROTOCOL="tcp"
scan_port(){
PORT_NUMBER=$1
PORT_SCAN_RESULT=`2>&1 echo "" > /dev/$PORT_PROTOCOL/$TARGET_NAME_OR_IP/$PORT_NUMBER | grep connect`
[ "$PORT_SCAN_RESULT" == "" ] && echo -e $PORT_NUMBER\/$PORT_PROTOCOL' \t 'open' \t\t '`grep $PORT_NUMBER/$PROTOCOL /etc/services | head -n1 | awk '{print $1}'`
}
TARGET_NAME_OR_IP=$1
echo -e 'PORT \t\t STATE \t\t SERVICE'
for PORT_NUMBER in `seq $START_PORT $END_PORT`; do
scan_port $PORT_NUMBER
done
}
tcp-scan 192.168.3.100 1024 5000
tcpdump
tcpdump -D список доступных сетевых интерфейсов
tcpdump -n -i ens33 icmp слушать icmp-пакеты от всех на указанном интерфейсе (-i) без отображения доменных имен (-n)
tcpdump -n -i ens33 udp -e слушать udp-пакеты и отображать MAC-адреса (-e)
tcpdump -n -i ens33 port 8080 слушать трафик 8080 порта
tcpdump -n -i ens33 port 80 or 443
tcpdump -n -i ens33 portrange 21-80
tcpdump -n -i ens33 ip src 192.168.3.99 and dst 192.168.3.103 отобразить ip пакеты, которые отправлены с указанного (src) ip-адреса на указанный (dst) ip-адрес
tcpdump -n -i ens33 -X host 192.168.3.100 and port 32400 отобразить содержимое пакетов (-X) для хоста и порта
tshark
apt install tshark
apt install termshark terminal UI for tshark (https://github.com/gcla/termshark)
tshark -D список интерфейсов
tshark -i 1
disown
tshark -i 1 -Y "syslog" захват пакетов syslog (udp.port == 514)
tshark -i 1 host 192.168.3.104 захват пакетов для конкретного IP-адреса
tshark -i 1 net 192.168.3.0/24 захват пакетов указанной подсети
tshark -i 1 src host 192.168.3.104 захват исходящих пакетов
tshark -i 1 dst host 192.168.3.104 захват входящих пакетов
tshark -i 1 dst host 192.168.3.104 and port 8086 отфильтровать по входящему хосту и порту
tshark -i 1 dst host 192.168.3.104 and port 8086 and src host 192.168.3.99 отфильтровать по исходящему хосту
tshark -i 1 -x dst host 192.168.3.104 and port 8086 and src host 192.168.3.101 прочитать пакеты в шестнадцатеричном формате (-x)
tshark -i 1 -O TCP dst host 192.168.3.104 and port 8086 and src host 192.168.3.101 прочитать TCP-заголовки
tshark -i 1 -a duration:10 -w ~/192.168.3.0.pcap сохранить захват
tshark -Y 'ip.addr == 192.168.3.106' -r ~/192.168.3.0.pcap прочитать файл захвата с использованием фильтра
tshark -Y "(ip.addr == 192.168.3.106) or (ip.addr == 192.168.3.107)" -r ~/192.168.3.0.pcap отфильтровать по двум адресам (или)
tshark -Y "(ip.addr == 192.168.3.104) and (tcp.port == 8086)" -r ~/192.168.3.0.pcap отфильтровать по двум параметрам (и)
tshark -Y "!(ip.addr == 192.168.3.104)" -r ~/192.168.3.0.pcap исключить
tshark -Y "not arp and not (udp.port == 53)" -r ~/192.168.3.0.pcap отобразить весь udp-трафик, исключив ping и dns пакеты
ping
fping
fping yandex.ru google.com параллельная проверка доступности двух хостов
fping -p 5 yandex.ru google.com 5 параллельных запросов к каждому хосту
fping -ag 192.168.3.0/24 icmp проверка все подсети
fping < hosts.txt произвести ping всех хостов указанных в файле с новой строки
netping
sudo curl -s https://raw.githubusercontent.com/Lifailon/net-tools/rsa/netping.sh -o /usr/bin/netping
sudo chmod +x /usr/bin/netping
netping 192.168.3.0
firewall
ufw
systemctl status ufw
ufw status
ufw enable включить ufw (Uncomplicated Firewall)
ufw disable отключить
ufw reload перезапустить/применить настройки
ufw reset сбросить настройки (отключить ufw и удалить все правила)
ufw default deny incoming все входящие пакеты отклонять (политика по умолчанию, какие действия будут применяться к пакетам, если они не подпадают под созданные правила)
ufw default allow outgoing все исходящие разрешать
ufw allow in 22 разрешить входящий трафик на порт 22
ufw allow out 22 разрешить исходящий трафик на порт 22
ufw deny in 80/tcp запретить входящий TCP-трафик на 80 порт
ufw delete deny in 80/tcp удалить правило
ufw allow 161,10050,10051/tcp открыть несколько портов
ufw allow proto tcp from 0.0.0.0/24 to 192.168.3.100 port 3389 разрешить доступ со всех IP-адресов по TCP-протоколу к IP-адресу и порту 3389
ufw allow from 192.168.3.0/24 to 192.168.3.110 разрешить подключение всем с подсети 192.168.1.0 к интерфейсу 192.168.1.2 (для Proxmox MGW)
ufw allow 25/tcp открыть для всех направлений 25 порт
ufw limit ssh лимт подключений к определенному порту с одного IP-адреса (для защиты от перебора), по умолчанию подключения блокируются, если пользователь пытается создать шесть и больше подключений за 30 секунд (настроить время и количество запросов можно только через iptables)
ufw logging on включить логирование
ufw logging medium выбрать уровень логирования (low/medium/high)
cat /var/log/ufw директория хранения логов. Синтаксис: [UFW ALLOW/BLOCK/AUDIT] IN=интерфейс OUT=итерфейс SRC=ip_источника DST=ip_назначения LEN=размер_пакета TOS=0x10 PREC=0x00 TTL=64 ID=728 DF PROTO=протокол SPT=порт_источника DPT=порт назначения LEN=размер_пакета
show
ufw show listening отображает все прослушиваемые порты и правила для них (с указанием очередного номера в списке: [20] allow 161,10050,10051/tcp)
ufw show raw все активные правила в формате iptables
ufw show added недавно добавленные правила
ufw show builtins правила, добавленные по умолчанию
ufw show user-rules правила, добавленные пользователем
ufw show before-rules правила, которые выполняются перед принятием пакета
ufw show after-rules правила, которые выполняются после принятия пакета
ufw show logging-rules правила логгирования пакетов
firewalld
apt install firewalld
systemctl status firewalld
systemctl start firewalld
pkill -f firewalld убить процесс, если при запуске failed
firewall-cmd --state статус работы
firewall-cmd --reload применить настройки (перечитать)
firewall-cmd --list-all список созданных правил (для services и ports)
firewall-cmd --list-port только открытые порты
firewall-cmd --list-service только открытые службы
firewall-cmd --list-all-zones отобразить список зон
firewall-cmd --get-active-zones список используемых зон
firewall-cmd --list-all --zone=public информация о конкретной зоне
firewall-cmd --permanent --add-port=22/tcp открыть 22 порт
firewall-cmd --permanent --add-port=8000-8080/udp открыть диапазон портов
firewall-cmd --get-services | grep ssh отобразить список доступных служб
firewall-cmd --permanent --add-service=ssh разрешить порты для сервиса ssh
firewall-cmd --permanent --new-service=speedtest добавить службу
firewall-cmd --permanent --service=speedtest --add-port=80/tcp добавить порт к службе
firewall-cmd --info-service=speedtest информация о службе
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.3.0/24" service name="speedtest" accept' открыть доступ для подсети
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.3.0/24" port port="22" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.21.0/24' reject" закрыть доступ для подсети
firewall-cmd --list-rich-rules список правил с условиями
firewall-cmd --permanent --remove-port=22/tcp удалить правило
iptables
iptables -L -v выводит все существующие правила для каждой цепочки
iptables -L | grep -E "tcp|udp"
if (( $(iptables -L | wc -l | bc) == 8)); then echo active; else echo inactive; fi
iptables -A INPUT -p tcp --dport 22 -j ACCEPT открыть входящий порт ssh
iptables -A INPUT -p tcp -s !192.168.3.99 --dport 22 -j DROP закрыть входящий порт ssh, исключить 192.168.3.99
iptables-save сохранить настройки, что бы они были активны после перезагрузки
iptables -F удалить все правила текущей таблицы
nftables
nft -a list ruleset список существующих правил
nft list tables список существующих таблиц
nft flush ruleset очистить правила
nft add table inet filter создать таблицу filter
nft add chain inet filter input { type filter hook input priority 0\; } добавить цепочку input
nft add rule inet filter input ct state related,established counter accept
nft add rule inet filter input iifname "lo" counter accept
nft add rule inet filter input ip protocol icmp counter accept разрешить icmp
nft add rule inet filter input tcp dport {80, 443} counter accept открыть порты
nft add rule inet filter input ip saddr { 192.168.100.0/24, 1.1.1.1/32 } tcp dport 22 counter accept открыть 22 порт для подсетей
nft chain inet filter input { policy drop \; } остальное блокировать
echo "flush ruleset" > /etc/nftables.conf очистить все правила
nft -s list ruleset >> /etc/nftables.conf добавить правила в конфигурацию
systemctl enable nftables.service
nft delete rule inet filter input handle 5 удалить правило по номеру
nft add rule inet filter input position 5 tcp dport 22 counter accept добавить правило в конкретное место с номером в списке