Оглавление

Сеть

Маршрутизация | Дополнительный IP | Смена MAC | Порты | Firewall | IP Forward | NAT | DNS | DHCP | Трафик | QoS | NIS | Netcat

Анализ трафика

Linux

# ethtool eth0                            # Показать Ethernet статус 
# ethtool -s eth0 speed 100 duplex full   # Принудительная установка режима 100Mbit Full duplex
# ethtool -s eth0 autoneg off             # Отключить автоопределение
# ethtool -p eth1                         # Мигать индикатором сетевой карты - если поддерживается
# ip link show                            # Список сетевых интерфейсов в Linux (подобна ifconfig)
# ip link set eth0 up                     # Активировать сетевое устройство (или отключить). Подобна "ifconfig eth0 up"
# ip addr show                            # Список всех IP адресов в Linux (подобна ifconfig)
# ip neigh show                           # Тоже что и arp -a

Other OSes

# ifconfig fxp0                           # Проверить поле "media" во FreeBSD
# arp -a                                  # Показать таблицу маршрутизации роутера (или хоста) (все OS)
# ping cb.vu                              # Пинговать хост
# traceroute cb.vu                        # Печать путь маршрута до точки назначения
# ifconfig fxp0 media 100baseTX mediaopt full-duplex # 100Mbit full duplex (FreeBSD)
# netstat -s                              # Общесистемная статистика по всем сетевым протоколам

Дополнительные команды, которые не всегда установлены по умолчанию, но найти их не трудно:

# arping 192.168.16.254     # Пропинговать на уровне ethernet
# tcptraceroute -f 5 cb.vu  # Использкет tcp вместо icmp что-бы отслеживать маршрут через фаервол

Маршрутизация

Печать таблицы маршрутизации

# route -n                  # Linux или используйте "ip route"
# netstat -rn               # Linux, BSD и UNIX
# route print               # Windows

Добавление и удаление маршрута

FreeBSD

# route add 212.117.0.0/16 192.168.1.1
# route delete 212.117.0.0/16
# route add default 192.168.1.1

Добавить постояный маршрут маршрут в /etc/rc.conf

static_routes="myroute"
route_myroute="-net 212.117.0.0/16 192.168.1.1"

Linux

# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.16.254
# ip route add 192.168.20.0/24 via 192.168.16.254       # Как и выше с ip маршрутом
# route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0
# route add default gw 192.168.51.254
# ip route add default via 192.168.51.254 dev eth0      # Как и выше с ip маршрутом
# route delete -net 192.168.20.0 netmask 255.255.255.0

Solaris

# route add -net 192.168.20.0 -netmask 255.255.255.0 192.168.16.254
# route add default 192.168.51.254 1                    # 1 = прыгнуть на следующий шлюз
# route change default 192.168.50.254 1

Постоянные записи устанавливаются в /etc/defaultrouter.

Windows

# Route add 192.168.50.0 mask 255.255.255.0 192.168.51.253
# Route add 0.0.0.0 mask 0.0.0.0 192.168.51.254

Используйте "add -p" что-бы сделать маршрут постоянным.

Настройка дополнительных IP адресов

Linux

# ifconfig eth0 192.168.50.254 netmask 255.255.255.0       # Первый IP адрес
# ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0     # Второй IP адрес
# ip addr add 192.168.50.254/24 dev eth0                   # Эквивалентные команды для ip
# ip addr add 192.168.51.254/24 dev eth0 label eth0:1

FreeBSD

# ifconfig fxp0 inet 192.168.50.254/24                     # Первый IP адрес
# ifconfig fxp0 alias 192.168.51.254 netmask 255.255.255.0 # Второй IP адрес
# ifconfig fxp0 -alias 192.168.51.254                      # Удалить псевдоним для второго IP адреса

Постоянные записи в /etc/rc.conf

ifconfig_fxp0="inet 192.168.50.254  netmask 255.255.255.0"
ifconfig_fxp0_alias0="192.168.51.254 netmask 255.255.255.0"

Solaris

Проверка настроек с ifconfig -a

# ifconfig hme0 plumb                                      # Установить сетевую карту
# ifconfig hme0 192.168.50.254 netmask 255.255.255.0 up    # Первый IP адрес
# ifconfig hme0:1 192.168.51.254 netmask 255.255.255.0 up  # Второй IP адрес

Смена MAC адреса

Для начала вы должны деактивировать сетевой интерфейс.. и не говорите никому для чего вы хотите сменить MAC...)

# ifconfig eth0 down
# ifconfig eth0 hw ether 00:01:02:03:04:05      # Linux
# ifconfig fxp0 link 00:01:02:03:04:05          # FreeBSD
# ifconfig hme0 ether 00:01:02:03:04:05         # Solaris
# sudo ifconfig en0 ether 00:01:02:03:04:05     # Mac OS X Tiger
# sudo ifconfig en0 lladdr 00:01:02:03:04:05    # Mac OS X Leopard

Под Windows существует масса инструментов для смены MAC адреса, например etherchange или поищите на тему "Mac Makeup", "smac".

Сетевые порты

Список открытых портов:

# netstat -an | grep LISTEN
# lsof -i                                 # Ссписок всех интернет подключений Linux
# socklist                                # Список открытых сокетов Linux
# sockstat -4                             # Список приложений слушающих сокеты
# netstat -anp --udp --tcp | grep LISTEN  # Linux
# netstat -tup                            # Список активных подключений входящие/исходящие Linux
# netstat -tupl                           # Список слушающих портов Linux
# netstat -ano                            # Windows

firewall

Проверить, запущен-ли фаервол (как правило в типичных конфигурациях)

Linux

# iptables -L -n -v                  # Статус
Открыть iptables firewall
# iptables -P INPUT       ACCEPT     # Открыть все
# iptables -P FORWARD     ACCEPT
# iptables -P OUTPUT      ACCEPT
# iptables -Z                        # Сбросить счетчики во всех цепочках
# iptables -F                        # Сбросить все цепочки
# iptables -X                        # Удалить все цепочки

FreeBSD

# ipfw show                     # Статус
# ipfw list 65535                    # Какого типа фаервол, закрытый или открытый 
# sysctl net.inet.ip.fw.enable=0     # Отключить
# sysctl net.inet.ip.fw.enable=1     # Включить

Форвардинг маршрутов

Linux

Проверить и если нужно, включить форвардинг маршрутов

# cat /proc/sys/net/ipv4/ip_forward  # Проверить включен или нет форвардинг, 0=off, 1=on
# echo 1 > /proc/sys/net/ipv4/ip_forward

или добавьте в /etc/sysctl.conf:

net.ipv4.ip_forward = 1

FreeBSD

Проверить и если нужно включить:

# sysctl net.inet.ip.forwarding         # Проверить включена или нет, 0=off, 1=on
# sysctl net.inet.ip.forwarding=1
# sysctl net.inet.ip.fastforwarding=1	# Для выделенного маршрута или фаервола
Запись в /etc/rc.conf:
gateway_enable="YES"                    # Установите YES если данный хост является шлюзом

Solaris

# ndd -set /dev/ip ip_forwarding 1      # Включить форвардинг маршрутов 0=off, 1=on

NAT Трансляция сетевых адресов

Linux

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE	# Включить NAT
# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \
--to 192.168.16.44:22           # Перебросить порт 20022 на внутренний IP порт ssh
# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \
--to 192.168.16.254:993-995     # Переброс портов из диапазона 993-995
# ip route flush cache
# iptables -L -t nat            # Проверить статус NAT

FreeBSD

# natd -s -m -u -dynamic -f /etc/natd.conf -n fxp0
Или добавьте в /etc/rc.conf:
firewall_enable="YES"           # YES - Включить фаервол
firewall_type="open"            # Тип фаервола (см. /etc/rc.firewall)
natd_enable="YES"               # Включить natd (если firewall_enable == YES)
natd_interface="tun0"           # Сетевой интерфейс или IP адрес, который будет использовать natd
natd_flags="-s -m -u -dynamic -f /etc/natd.conf"

Для переброски портов:

# cat /etc/natd.conf 
same_ports yes
use_sockets yes
unregistered_only
# redirect_port tcp insideIP:2300-2399 3300-3399  # Диапазон портов
redirect_port udp 192.168.51.103:7777 7777

DNS

В Unix DNS записи действительны для всех интерфейсов и хранятся в /etc/resolv.conf. Зона к которой принадлежит хост, так-же хранится в этом файле. Минимальная конфигурация:

nameserver 78.31.70.238
search sleepyowl.net intern.lab
domain sleepyowl.net

Проверить доменное имя:

# hostname -d                        # Что и dnsdomainname

Windows

В Windows, DNS настраивается для каждого интерфейса. Что-бы посмотреть текущую конфигурацию и сбросить DNS кэш, используйте:

# ipconfig /?                        # Помощь по использованию команды
# ipconfig /all                      # Посмотреть всю информацию, включая DNS

Flush DNS

Вы можете очистить DNS кэш, но помните, некоторые приложения используют свой, персональный кэш(например Фаерфокс), и на них обнуление не подействует.

# /etc/init.d/nscd restart           # Перезапустить nscd(демон кэширования имен) Linux/BSD/Solaris
# lookupd -flushcache                # OS X Tiger
# dscacheutil -flushcache            # OS X Leopard и более новые
# ipconfig /flushdns                 # Windows

Forward queries

Dig, утилита для проверки настроек DNS. Например, используем для проверки публичный DNS server 213.133.105.2 ns.second-ns.de. Обратите внимание с какого сервера клиент получит ответ (упрощенный ответ).

# dig sleepyowl.net
sleepyowl.net.          600     IN      A       78.31.70.238
;; SERVER: 192.168.51.254#53(192.168.51.254)

Маршрутизатор 192.168.51.254, прислал в качестве ответа, запись типа А. Запись определенного типа для запроса и DNS сервер, могут быть указаны с символом @:

# dig MX google.com
# dig @127.0.0.1 NS sun.com          # Проверить локальный сервер
# dig @204.97.212.10 NS MX heise.de  # Запрос к внешнему серверу
# dig AXFR @ns1.xname.org cb.vu      # Получить всю зону (пересылка зоны)

Еще одна полезная утилита, host:

# host -t MX cb.vu                   # Получить записть типа MX(Mail Exchange)
# host -t NS -T sun.com              # Получить NS запись через TCP соединение
# host -a sleepyowl.net              # Получить все

Reverse queries

Узнать имя по IP адресу можно с помощью таких утилит как dig, host или nslookup:

# dig -x 78.31.70.238
# host 78.31.70.238
# nslookup 78.31.70.238

/etc/hosts

Отдельные хосты могут быть настроены в файле /etc/hosts, вместо запуска named, для разрешения имени в адрес. Формат следующий:

78.31.70.238   sleepyowl.net   sleepyowl

Приоритет между файлом hosts и DNS запросом, может быть сконфигурирован в /etc/nsswitch.conf И /etc/host.conf. Подобный файл присутствует и в Windows, лежит как правило тут:

C:\Windows\System32\Drivers\Etc

dhcp

Linux

Некоторые дистрибутивы (SuSE) используют в качестве клиента dhcpd. Интерфейс по-умолчанию eth0.

# dhcpcd -n eth0           # Обновить (не всегда работает)
# dhcpcd -k eth0           # Освободить и выключить

"Срок аренды"(lease) и вся информация сохраняется в:

/var/lib/dhcpcd/dhcpcd-eth0.info

FreeBSD

FreeBSD (и Debian) использует dhclient. Для настройки нужного сетевого интерфейса (например bge0):

# dhclient bge0

"Срок аренды"(lease) и вся информация сохраняется в:

/var/db/dhclient.leases.bge0
Используйте
/etc/dhclient.conf
для добавления опция или изменения существующих:
# cat /etc/dhclient.conf
interface "rl0" {
    prepend domain-name-servers 127.0.0.1;
    default domain-name "sleepyowl.net";
    supersede domain-name "sleepyowl.net";
}

Windows

Dhcp аренда(lease) может быть обновлена с помощью ipconfig:
# ipconfig /renew          # Обновить все адаптеры
# ipconfig /renew LAN      # Обновить сетевой адаптер с именем "LAN"
# ipconfig /release WLAN   # Освободить сетевой адаптер с именем "WLAN"

Неплохой идеей будет дать сетевым адаптерам более внятные имена

Анализ трафика

Bmon небольшая консольная утилита для мониторинга канала трафика, так-же может показывать потоки на отдельных интерфейсах.

Анализ с помощью tcpdump

# tcpdump -nl -i bge0 not port ssh and src \(192.168.16.121 or 192.168.16.54\)
# tcpdump -n -i eth1 net 192.168.16.121           # Выборка входящий/исходящий по одному IP адресу
# tcpdump -n -i eth1 net 192.168.16.0/24          # Выборка входящий/исходящий по адресу сети
# tcpdump -l > dump && tail -f dump       # Вывод через буфкр
# tcpdump -i rl0 -w traffic.rl0                   # Писать заголовки в бинарный файл
# tcpdump -i rl0 -s 0 -w traffic.rl0              # Писать в бинарник полные пакеты
# tcpdump -r traffic.rl0                          # Прочитать из файла (так-же для ethereal
# tcpdump port 80                                 # Классические команды
# tcpdump host google.com
# tcpdump -i eth0 -X port \(110 or 143\)          # Проверить защищенность pop или imap
# tcpdump -n -i eth0 icmp                         # Выборка icmp(ping)
# tcpdump -i eth0 -s 0 -A port 80 | grep GET      # -s 0 для полных пакетов, -A для ASCII
Некоторые важные опции: В Windows можно воспользоваться windump с www.winpcap.org. Windump -D выведет список интерфейсов.

Сканирование nmap

Nmap это сканер портов с онределением установленной операционной системы, он установлен во многих дистрибутивах, существует версия и под Windows. Если вы не просканируете свои сервера, за вас это сделают хакеры.. )
# nmap cb.vu               # Просканировать все зарезервированные порты хоста
# nmap -sP 192.168.16.0/24 # Выяснить какой IP каким хостом используется в сети 0/24
# nmap -sS -sV -O cb.vu    # Провести stealth SYN сканирование с определением типа и версии OS
PORT      STATE  SERVICE             VERSION
22/tcp    open   ssh                 OpenSSH 3.8.1p1 FreeBSD-20060930 (protocol 2.0)
25/tcp    open   smtp                Sendmail smtpd 8.13.6/8.13.6
80/tcp    open   http                Apache httpd 2.0.59 ((FreeBSD) DAV/2 PHP/4.
[...]
Running: FreeBSD 5.X
Uptime 33.120 days (since Fri Aug 31 11:41:04 2007)

Некоторые другие полезные инструменты: hping (www.hping.org), сборщик/анализатор IP пакетов, fping (fping.sourceforge.net), проверка хостов round-robin.

Traffic control (QoS)

Traffic control управляет очередностью, порядком, планированием и другими параметрами трафика в сети. Следующие примеры, небольшие практические приемы для Linux and FreeBSD позволяющие лучше использовать пропускную способность.

Ограничение загрузок (upload)

Linux

Для 512kbit Кбитного модема.

# tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540
# tc -s qdisc ls dev eth0                         # Статус
# tc qdisc del dev eth0 root                      # Удалить очередь
# tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540

FreeBSD

FreeBSD использует dummynet, шейпер трафика, конфигурирыемый в IPFW. Pipes, так называемые трубы для трафика, ограничивают пропускную способность в [K|M]{bit/s|Byte/s}, 0 означает безлимитный. Например, ограничим пропускную способность в 500 Кбит.

# kldload dummynet                                # Загрузить модуль если необходимо
# ipfw pipe 1 config bw 500Kbit/s                 # Создать трубу с ограничением трафика 500Кбит/с
# ipfw add pipe 1 ip from me to any               # Отклонять излишний трафик

QoS Quality of service

Linux

Приоритет очередей в tc для оптимизации VoIP. Полные примкры можно посмотреть на voip-info.org или www.howtoforge.com. Следующий пример демонстрирует использование QoS для VoIP трафика.

# tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0
# tc qdisc add dev eth0 parent 1:1 handle 10: sfq
# tc qdisc add dev eth0 parent 1:2 handle 20: sfq
# tc qdisc add dev eth0 parent 1:3 handle 30: sfq
# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \
  match ip dport 10000 0x3C00 flowid 1:1          # Использовать диапазон портов
  match ip dst 123.23.0.1 flowid 1:1              # или/и использовать IP сервера
Проверить состояние или удалить:
# tc -s qdisc ls dev eth0                         # Проверить состояние очереди
# tc qdisc del dev eth0 root                      # Удалмть все QoS

FreeBSD

Максимальная пропускная способность соединения 500Кбит/с, мы назначаем 3 очереди с приоритетами 100:10:1 для VoIP:ssh:все остальное.
# ipfw pipe 1 config bw 500Kbit/s 
# ipfw queue 1 config pipe 1 weight 100
# ipfw queue 2 config pipe 1 weight 10
# ipfw queue 3 config pipe 1 weight 1
# ipfw add 10 queue 1 proto udp dst-port 10000-11024
# ipfw add 11 queue 1 proto udp dst-ip 123.23.0.1 # или/и используем IP
# ipfw add 20 queue 2 dsp-port ssh
# ipfw add 30 queue 3 from me to any              # Все остальное
Состояние и удаление:
# ipfw list                                       # Посмотреть состояние
# ipfw pipe list                                  # Состояние Pipes
# ipfw flush                                      # Удалмть все правила кроме дефолтовых

NIS (Информационная служба сети)

Некоторые команды для конфигурирования NIS клиента:
# ypwhich                          # Получитьимя имя подключенного NIS сервера
# domainname                       # Доменное имя NIS
# ypcat group                      # Показать группу из NIS
# cd /var/yp && make       # Пересобрать базу данных yp
# rpcinfo -p servername            # Отчет RPC служб сервера
Ypbind запущен ?
# ps auxww | grep ypbind
/usr/sbin/ypbind -s -m -S servername1,servername2	# FreeBSD
/usr/sbin/ypbind                                        # Linux
# yppoll passwd.byname
Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007
The master server is servername.domain.net.

Linux

# cat /etc/yp.conf
ypserver servername
domain domain.net broad
cast

netcat

Netcat (nc), известна так-же как "network Swiss Army Knife", предназначена для манипуляция, создания, чтения/записи TCP/IP соединений. Вот несколько полезных примеров, в сети их можно найти массу, например: тут или тут. Вмнсто netcat, можно использовать сокращение nc. Так-же можете посмотреть socat.

Передача файлов

Копирование большого файла через TCP соединение. Передача происходит очень быстро и не требует поднятия NFS, SMB, FTP и т.д... просто сделайте файл доступным на сервере и заберите его с клиента. В данном случае 192.168.1.1, IP адрес сервера.
server# tar -cf - -C VIDEO_TS . | nc -l -p 4444      # Заархивировать директорию и выставить архив на порт 4444
client# nc 192.168.1.1 4444 | tar xpf - -C VIDEO_TS  # забрать файл с порта 4444 и разархивировать в дмректорию

server# cat largefile | nc -l 5678                   # Приготовить к отправке один файл
client# nc 192.168.1.1 5678 > largefile              # Забрать файл

server# dd if=/dev/da0 | nc -l 4444                  # Приготовить к отправке файл образа раздела
client# nc 192.168.1.1 4444 | dd of=/dev/da0         # Забрать файл образа для создания дублеката раздела
client# nc 192.168.1.1 4444 | dd of=da0.img          # или файл образа и сохранить как файл

server  nc -l 5555 < ./test.file            # Файл выставляется в сокет nc с адресом 192.168.1.1, порт 5555
client  nc 192.168.1.1 5555 > ~/test.file   # На другой машине, забираем файл, с 192.168.1.1 порт 5555 

Другие трюки

Тут, вы должны понимать, что вы делаете.

Удаленный shell

Опция -e только для Windows версии или используйте nc 1.10
# nc -lp 4444 -e /bin/bash                        # Предоставить удаленную оболочку
# nc -lp 4444 -e cmd.exe                          # Удаленная оболочка в Windows

Аварийный Веб сервер

Обслуживать один файл на 80 порту в цикле.
# while true; do nc -l -p 80 < unixtoolbox.xhtml; done

Чат

Элис и Боб могут общаться через простой TCP сокет. Текст передается по нажатию Enter.
alice# nc -lp 4444
bob  # nc 192.168.1.1 4444

Оглавление