netstat / ss / lsof
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
netstat -nlp - Для просмотра списка сетевых сервисов, слушающих какие-либо порты netstat -nlp|grep udp - Для просмотра списка сетевых сервисов, слушающих какие-либо порты iptables -L -n -v - проверка фаервола iptables -L - посмотреть таблицы iptables route -n - посмотреть таблицу маршрутизации и gateway ifconfig -a - посмотреть сетевушки ifconfig eth0 - посмотреть сетевушку eth0 cat /etc/resolv.conf - посмотреть dns ss -s - общая информация о соединениях ss -l - информация об ожидающих соединений сокетах ss -lp - информация об ожидающих соединений сокетах, а также именах процессов, их использующих ss -at - информация обо всех задействованных TCP сокетах ss -au - информация обо всех задействованных UDP сокетах ss -o state established '( dport = :smtp or sport = :smtp )' - информация обо всех установленных SMTP-соединениях ss -o state established '( dport = :http or sport = :http )' - информация обо всех установленных HTTP-соединениях ss -x src /tmp/.X11-unix/* - локальные процессы, подключённые к X-серверу ss -tulpan - показать все lsof -i udp информация кто использует UDP lsof -i :22 информация кто использует 22 порт |
сеть
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sudo ethtool -s eth0 speed 100 duplex full autoneg off# Принудительно задать скорость сетевому интерфейсу 100Mbit и режим Full Duplex и отключить автоматическое определение sudo ethtool -s eth0 speed 10 duplex half autoneg off# Принудительно задать скорость сетевому интерфейсу 10Mbit и режим Half Duplex и отключить автоматическое определение arping -v -i eth0 макадресс - nmap -PR сеть/маска nmap cb.vu # Сканировать все зарезервированные порты хоста nmap -sP 192.168.16.0/24 # Выяснить какой IP каким хостом используется в сети 0/24 nmap -sS -sV -O cb.vu # Провести stealth SYN сканирование с определением типа и версии OS tcpdump -npi iface_name ether src MAC-address узнать MAC устройства iface_name -имя интерфейса MAC-address -мак адрес устройства arp -a показать таблицу arp (арп) ping 192.168.3.1 traceroute ya.ru -показать маршрут route -N -посмотреть маршруты ip ifconfig eth0 inet 192.168.10.15 netmask 255.255.255.0 ifconfig eth0 up ifconfig eth0 192.168.0.1 netmask 255.255.255.0 |
Сеть отладка
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 ip route get to 8.8.8.8 Показать адреса: ip a ip -o -6 a ip -o -4 a ip -o a show ovsbr0 ip -o a show eth0 |
Маршрутизация
1 2 3 4 5 6 |
Печать таблицы маршрутизации route -n # Linux или используйте "ip route" netstat -rn # Linux, BSD и UNIX Узнаем какой маршрут будет использован для ip 8.8.8.8 ip route get to 8.8.8.8 |
Добавление и удаление маршрута
1 2 3 4 5 6 |
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 |
Настройка дополнительных IP адресов
1 2 3 4 |
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 |
Смена MAC адреса
1 2 3 4 |
Для начала вы должны деактивировать сетевой интерфейс.. и не говорите никому для чего вы хотите сменить MAC...) ifconfig eth0 down ifconfig eth0 hw ether 00:01:02:03:04:05 # Linux ifconfig eth0 up |
wi-fi / iwconfig / iw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
ip link set wlp2s0 up - включить устройство wlp2s0 !!! Если у вас возникнет ошибка: !!! RTNETLINK answers: Operation not possible due to RF-kill !!! Можно установить утилиту rfkill и с ее помощью решить эту проблему. lspci | grep -i wireless - поиск беспроводных pci-карт ip link list - выводе этой команды будет содержать все сетевые интерфейсы iw dev - показать устройства wi-fi iwconfig wlan0 essid "MyNet" - присвоить SSID "MyNet" iwconfig wlan0 channel 3 - установит канал 3 iwconfig wlan0 mode Ad-Hoc - сменить режим Managed на Ad-Hoc iwconfig wlan0 ap any - использовать любую точку доступа iwconfig wlan0 sens -50 - установить чувствительность -50 iwconfig wlan0 retry 20 - установить значение 20 для повторной передачи MAC ifconfig wlan0 key 1234-pass-123 - установить пароль 1234-pass-123 iwconfig wlp4s0 mode ad-hoc - настройка режима работы ad-hoc iwconfig wlp4s0 essid ваш_essid - подключение к незащищенной сети iwconfig wlp4s0 essid ваш_essid freq 2432M - подключение с задающим каналом сети iwconfig wlp4s0 essid ваш_essid key s:ваш_ключ -подключение к WEP зашифрованному каналу сети, ключа ASCII iwconfig wlp4s0 power on - включение режима экономии питания iw dev wlp4s0 link iwconfig wlp4s0 - показать статус соединения iw dev wlp4s0 scan iwlist wlp4s0 scan -сканирование сети на точки доступа iw dev wlp4s0 set type ibss - настройка режима работы ad-hoc iw dev wlp4s0 connect ваш_essid - подключение к незащищенной сети iw dev wlp4s0 connect ваш_essid 2432 - подключение с задающим каналом сети iw dev wlp4s0 connect ваш_essid key 0:ваш_ключ - -подключение к WEP зашифрованному каналу сети, ключа ASCII iw dev wlp4s0 set power_save on - включение режима экономии питания iw dev wlp4s0 scan | less - сканируем сеть |
Список открытых портов:
1 2 3 4 5 6 7 |
netstat -an | grep LISTEN lsof -i # Ссписок всех интернет подключений Linux socklist # Список открытых сокетов Linux sockstat -4 # Список приложений слушающих сокеты netstat -anp --udp --tcp | grep LISTEN # Linux netstat -tup # Список активных подключений входящие/исходящие Linux netstat -tupl # Список слушающих портов Linux |
firewall
1 2 3 4 5 6 7 8 9 |
Проверить, запущен-ли фаервол (как правило в типичных конфигурациях) iptables -L -n -v # Статус Открыть iptables firewall iptables -P INPUT ACCEPT # Открыть все iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -Z # Сбросить счетчики во всех цепочках iptables -F # Сбросить все цепочки iptables -X # Удалить все цепочки |
Forward route (Форвардинг маршрутов)
1 2 3 4 5 6 |
Проверить и если нужно, включить форвардинг маршрутов 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 |
NAT Трансляция сетевых адресов
1 2 3 4 5 |
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 |
DNS
1 2 3 4 5 6 7 8 9 10 11 |
В Unix DNS записи действительны для всех интерфейсов и хранятся в /etc/resolv.conf. Зона к которой принадлежит хост, так-же хранится в этом файле. Минимальная конфигурация: nameserver 78.31.70.238 search sleepyowl.net intern.lab domain sleepyowl.net Проверить доменное имя: # hostname -d # Что и dnsdomainname Вы можете очистить DNS кэш, но помните, некоторые приложения используют свой, персональный кэш(например Фаерфокс), и на них обнуление не подействует. # /etc/init.d/nscd restart # Перезапустить nscd(демон кэширования имен) Linux/BSD/Solaris |
Forward queries
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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:
1 2 3 4 |
dig -x 78.31.70.238 host 78.31.70.238 nslookup 78.31.70.238 cat /etc/hosts |
Отдельные хосты могут быть настроены в файле /etc/hosts, вместо запуска named, для разрешения имени в адрес.
1 2 3 |
Формат следующий: 78.31.70.238 sleepyowl.net sleepyowl Приоритет между файлом hosts и DNS запросом, может быть сконфигурирован в /etc/nsswitch.conf и /etc/host.conf. |
DHCP
1 2 3 4 5 |
Некоторые дистрибутивы (SuSE) используют в качестве клиента dhcpd. Интерфейс по-умолчанию eth0. dhcpcd -n eth0 # Обновить (не всегда работает) dhcpcd -k eth0 # Освободить и выключить "Срок аренды"(lease) и вся информация сохраняется в: /var/lib/dhcpcd/dhcpcd-eth0.info |
Анализ трафика
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Небольшая консольная утилита для мониторинга канала трафика, так-же может показывать потоки на отдельных интерфейсах. Анализ с помощью 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 Некоторые важные опции: -A Печатать текст из пакетов (без заголовков) -X Печатать пакеты в hex и ASCII -l Включить буферизацию вывода -D Показать все активные сетевые интерфейсы |
Traffic control (QoS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Traffic control управляет очередностью, порядком, планированием и другими параметрами трафика в сети. Следующие примеры, небольшие практические приемы для Linux and FreeBSD позволяющие лучше использовать пропускную способность. Ограничение загрузок(upload) Для 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 QoS Quality of service Приоритет очередей в tc для оптимизации VoIP. Полные примеры можно посмотреть на voip-info.org или http://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 # Использовать диапазон портов tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 123.23.0.1 flowid 1:1 # или/и использовать IP сервера Проверить состояние или удалить: tc -s qdisc ls dev eth0 # Проверить состояние очереди tc qdisc del dev eth0 root # Удалмть все QoS |
NIS (Информационная служба сети)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Некоторые команды для конфигурирования NIS клиента: ypwhich # Получить имя подключенного NIS сервера domainname # Доменное имя NIS ypcat group # Показать группу из NIS cd /var/yp && make # Пере собрать базу данных yp pcinfo -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. cat /etc/yp.conf ypserver servername domain domain.net broadcast |
netcat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
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 |
Включение «ip forward без» перезагрузки:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Все это красиво, наверное… Но уж как-то по-советски, как с гландами в том анекдоте…. Все гораздо проще стандартными средствами, без перезагрузок, как и положено в Linux – посредством sysctl (в любом дистрибутиве) В файле /etc/sysctl.conf вставляем следующие строки - #disable ipv6 settins net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 Сохраняем файл. 3.Применяем: sysctl -p Вуа-ля! Работаем дальше, и не надо ничего и никого перегружать… |
network
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
##настройки интерфейса который получает интернет allow-hotplug eth0 - автоматически определить интерфейс iface eth0 inet static - статический ип адресс address 192.168.3.112 - адрес интерфейса netmask 255.255.255.0 - маска сети network 192.168.3.0 - сеть broadcast 255.255.255.255 - спрашивает ип gateway 192.168.3.1 - сюда стучится за инетом dns-nameserves 192.168.3.1 - отсюда берет днс auto eth0 - запустить интерфейс ##настройка интерфейса который его раздает iface eth1 inet static address 192.168.15.1 netmask 255.255.255.0 auto eth1 |
Основы iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
PACKET IN --->---PREROUTING---[ маршрутизация ]--->----FORWARD---->---POSTROUTING--->--- PACKET OUT - mangle | - mangle - mangle - nat (dst) | - filter - nat (src) | | | | INPUT OUTPUT - mangle - mangle - filter - nat (dst) | - filter | | `---->----[ приложение ]---->----' iptables [-t table] command [match] [target/jump] iptables [-t имя-таблицы] команда [шаблон] [-j действие] # 0 ##### 1 ######## 2 # 3 ###### 4 ##### #0 Опция -t задает таблицу. Если опция упущена, то по умолчанию предполагается использование таблицы filter. Если предполагается использование другой таблицы, то это требуется указать явно. #1 Mangle - обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр. Nat - эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях. Filter - здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили. #2 Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п. Список команд: -A имя-цепочки правило (добавить правило в конец цепочки; ключ --set-counters позволяет установить счётчики пакетов и байтов) -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ --set-counters позволяет установить счётчики пакетов и байтов) -R имя-цепочки номер правило (заменить; ключ --set-counters позволяет установить счётчики пакетов и байтов) -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1) -D имя-цепочки правило (удалить правило по текстуальному совпадению) -C имя-цепочки пакет (тестировать прохождение пакета; исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами) -L [имя-цепочки] (показать список правил; дополнительные ключи: -v (вывести дополнительную информацию, в частности, счётчики) --exact (показывать счётчики без округления до KB, MB и т.д.) --numeric (показывать адреса и номера портов в виде чисел) --line-numbers (выводить номера правил) -F имя-цепочки (удалить все правила из цепочки) -Z имя-цепочки (обнулить счетчики) -N имя-цепочки (создать цепочку) -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок) -P имя-цепочки действие (изменить действие по умолчанию: ACCEPT, DROP, QUEUE, RETURN) -E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку) #3 Раздел шаблон задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет. Здесь можно указать самые разные критерии - IP-адрес источника пакета или сети, сетевой интерфейс. IP-адрес места назначения, порт, протокол и т.д. Остальные параметры для фильтации можно посмотреть в справке по утилите iptables(man iptables) #4 И наконец действие указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, "сбросить" пакет, выдать на источник сообщение об ошибке и т.п. Список некоторых действий: ACCEPT - пропустить пакет; просмотр таблицы завершается DROP - выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц REJECT - выбросить, известив отправителя (--reject-with тип-извещения) |
пример iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
LOCAL_IF="eth0" INET_IF="eth0:g" #======================= # Удалить все правила из цепочки. #======================= iptables -F iptables -X #======================= # Устанавливаем политику по умолчанию. #======================= iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD ACCEPT #======================= # Создаем правила для всех интерфейсов. #======================= # http - открываем 80 порт iptables -A INPUT -i ALL -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -i ALL -p icmp -j ACCEPT #======================= # Создаем правила для внутреннего интерфейса. #======================= # ssh - открываем 22 iptables -A INPUT -p tcp -i $LOCAL_IF -m tcp --dport 22 -j ACCEPT осталось запустить скрипт примеры отдельных цепочек: Разрешаем все на внутренних интерфейсах (lo, eth0, eth1 - внутренние интрефейсы) iptables -A INPUT -i eth1 -j ACCEPT iptables -A INPUT -i eth0 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT Разрешаем доступ к заданному порту из инета iptables -A INPUT -p tcp -m tcp -d внешний_ip --dport 80 -j ACCEPT Открываем протокол iptables -A INPUT -p gre -j ACCEPT |
ip taples nat
скрипт для раздачи интернета сделать испольнительным
для авто запуска можно добавить стрку в /etc/init.d/rc.local : /путь к файлу
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/sh INET="eth1" INETIP="X.X.X.X" iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP echo "1" > /proc/sys/net/ipv4/ip_forward |
Сканирование портов
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Чтобы выявить наличие уязвимых сервисов на машине, атакующий производит разведку с помощью сканера портов и различных систем обнаружения уязвимости. Обычно в качестве сканера портов используется nmap, который способен осуществлять сканирование десятком различных способов и в некоторых случаях умеет выявлять версии ОС и сервисов. Вот список особенно популярных флагов nmap, которые обычно используют взломщики: Флаги nmap, используемые при сканировании -sT — обычное TCP-сканирование с помощью открытия соединения на указанный порт и его завершения; -sS — SYN/ACK-сканирование, связь разрывается сразу после ответа на запрос открытия соединения; -sU — UDP-сканирование; -sF — сканирование пакетами с установленным флагом FIN; -sX — сканирование пакетами с установленными флагами FIN, PSH и URG; -sN — сканирование пакетами без установленных флагов. |
Начальная настройка iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 |
outif="eth1" iptables -F iptables -i $outif -A INPUT \ -m conntrack \ --ctstate ESTABLISHED,RELATED \ -j ACCEPT iptables -i $outif -A INPUT -p tcp \ --dport 80 -j ACCEPT iptables -i $outif -P INPUT DROP iptables -i $outif -P OUTPUT ACCEPT |
Начальная настройка ipfw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
outif="rl0" ipfw add allow ip from any to any \ via lo0 ipfw add allow ip from me to any \ via $outif ipfw add allow tcp from any to me \ established via $outif ipfw add allow tcp from any 80 \ to me via $outif ipfw add deny ip from any to any \ via $outif |
Начальная настройка pf
1 2 3 4 5 6 7 8 9 |
outif="rl0" set skip on lo0 block all pass out on $outif from $outif \ to any keep state pass in on $outif proto from any \ to $outif port 80 |
Методы борьбы с экзотическими видами сканирования
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# Запрет FIN-сканирования iptables -A INPUT –p tcp \ –m tcp \ –-tcp-flags FIN,ACK FIN -j DROP FreeBSD> ipfw add reject tcp from any to any \ not established tcpflags fin # Запрет X-сканирования iptables -A INPUT –p tcp –m tcp \ --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG \ –j DROP ipfw add reject tcp from any to any \ tcpflags fin, syn, rst, psh, ack, urg # Запрет N-сканирования iptables -A INPUT –p tcp –m tcp \ –-tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP ipfw add reject tcp from any to any \ tcpflags !fin, !syn, !rst, !psh, !ack, !urg В OpenBSD все эти строки можно заменить простой записью в начале /etc/pf.conf: scrub in all |
Борьба со сканированием с помощью iptables
1 2 3 4 5 6 7 8 9 10 11 |
# Проверка на стук в нерабочие порты (10 в час) iptables -A INPUT -m recent --rcheck \ --seconds 3600 --hitcount 10 --rttl -j RETURN # Вторая проверка на стук в нерабочие порты (2 в минуту) iptables -A INPUT -m recent --rcheck \ --seconds 60 --hitcount 2 --rttl -j RETURN # Заносим адреса стучащихся в список iptables -A INPUT -m recent --set # Отбрасываем пакеты всех, кто превысил лимит на количество подключений iptables -P INPUT -j DROP |
patch-omatic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
Установив пакет xtables-addons, содержащий наработки проекта patch-omatic, мы получим доступ к модулю PSD (Port Scan Detect), реализованному по образу и подобию демона scanlogd. Все предыдущие строки могут быть легко заменены простым правилом: # iptables -A INPUT -m psd -j DROP К сожалению, в пакетных фильтрах ipfw и pf ничего подобного нет, но это не беда, потому как сканированию портов хорошо противодействует демон PortSentry и тот самый scanlogd. Запрет Icmp-сообщений Хорошей практикой также является запрет ICMP-сообщений, которые могут выдать дополнительную информацию о хосте или быть использованы для выполнения различных злонамеренных действий (например, модификации таблицы маршрутизации). Ниже приведена таблица со списком возможных типов ICMP-сообщений: Типы ICMP-сообщений 0 — echo reply (echo-ответ, пинг) 3 — destination unreachable (адресат недосягаем) 4 — source quench (подавление источника, просьба посылать пакеты медленнее) 5 — redirect (редирект) 8 — echo request (echo-запрос, пинг) 9 — router advertisement (объявление маршрутизатора) 10 — router solicitation (ходатайство маршрутизатора) 11 — time-to-live exceeded (истечение срока жизни пакета) 12 — IP header bad (неправильный IPзаголовок пакета) 13 — timestamp request (запрос значения счетчика времени) 14 — timestamp reply (ответ на запрос значения счетчика времени) 15 — information request (запрос информации) 16 — information reply (ответ на запрос информации) 17 — address mask request (запрос маски сети) 18 — address mask reply (ответ на запрос маски сети) Как видишь, ответ на некоторые ICMP-сообщения может привести к разглашению некоторой информации о хосте, в то время как другие — привести к модификации таблицы маршрутизации, поэтому их необходимо запретить. Обычно выход во внешний мир разрешают ICMP-сообщениям 0, 3, 4, 11 и 12, в то время как на вход принимают только 3, 8 и 12. Вот как это реализуется в различных брандмауэрах: Запрет опасных ICMP-сообщений Linux> iptables -A INPUT -p icmp \ -icmp-type 3,8,12 -j ACCEPT Linux> iptables -A OUTPUT -p icmp \ -icmp-type 0,3,4,11,12 -j ACCEPT FreeBSD> ipfw add allow icmp \ from any to $outif in \ via $outif icmptype 3,8,12 FreeBSD> ipfw add allow icmp \ from $outif to any out \ via $outif icmptype 0,3,4,11,12 OpenBSD> pass in inet proto icmp \ from any to $outif \ icmp-type { 3, 8, 12 } keep state OpenBSD> pass out inet proto icmp \ from $outif to any \ icmp-type { 0, 3, 4, 11, 12 } \ keep state При желании ты можешь запретить весь ICMPтрафик, включая пинг-запросы, но это может повлиять на корректность работы сети. |
Брутфорс
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Разведав информацию об открытых портах и ОС, взломщик предпринимает попытки проникновения в систему, которые могут быть основаны на эксплуатации дыр в сервисах, либо на подборе паролей. Предотвратить возможность взлома сервисов брандмауэр нам не поможет, однако затормозить процесс перебора паролей — легко. Для этого применяются возможности по ограничению количества пакетов, пришедших на машину с одного IP-адреса. Вот как это можно сделать с помощью iptables: Защита от брутфорса с помощью iptables # Цепочка для проверки соединений iptables -N brute_check # Блокировка адреса, если за 60 секунд он инициировал более 2-х соединений iptables -A brute_check -m recent \ --update --seconds 60 \ --hitcount 3 -j DROP # Если нет — разрешаем соединение и заносим адрес в список iptables -A brute_check -m recent \ --set -j ACCEPT # Очищаем цепочку INPUT iptables -F INPUT # Отправляем в цепочку brute_check всех, кто пытается подключиться к 22-му порту iptables -A INPUT -m conntrack \ --ctstate NEW -p tcp \ --dport 22 -j brute_check iptables -P INPUT DROP То же самое можно проделать и с использованием pf: Защита от брутфорса с помощью pf # Создаем таблицу для брутфорсеров table <bruteforcers> persist # Блокируем всех, кто в нее попадает block in quick from <bruteforcers> # Помещаем в таблицу bruteforcers всех, кто инициирует более двух соединений на 22-ой порт в минуту pass in on $ext_if inet proto tcp to $outif \ port 22 flags S/SA keep state \ (max-src-conn-rate 60/2, \ overload <bruteforcers> flush) Брандмауэр ipfw не обладает достаточной функциональностью для эффективного противодействия брутфорсерам, поэтому его пользователи должны использовать инструменты более высокого уровня, такие как специальные модули PAM, системы обнаружения вторжений и программы вроде sshguard. |
Спуфинг
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Спуфинг (подмена адреса отправителя пакета) может быть использован для осуществления DoS-атак или обхода брандмауэра. В первом случае спуфинг дает огромное преимущество атакующему, так как существенно затрудняет реакцию на атаку (пакеты, приходящие с совершенно разными адресами отправителя, не так просто классифицировать и заблокировать) и затягивает процесс закрытия новых соединений (обычно поддельный адрес недостижим, поэтому закрытие соединения происходит лишь по истечению таймаута). Спуфинг, осуществляемый для обхода системы защиты, менее опасен и в большинстве случаев поддается контролю. Достаточно часто, блокируя внешние сетевые сервисы хоста, системные администраторы оставляют их открытыми для определенного диапазона адресов (например, для подключения со своей домашней машины). Вычислив один из этих адресов, взломщик может сформировать пакет, указав этот адрес в качестве обратного, и таким образом «проскользнуть » через брандмауэр. Далее он может угадать номера последовательности TCP-пакетов и сделать так, чтобы доверяющий обратному адресу сервис выполнил нужное ему действие. Это очень трудная в реализации атака, которая, тем не менее, может быть выполнена грамотным специалистом, а если речь идет о протоколе UDP, то это под силу и кулхацкеру. К счастью, защититься от подобных атак легко. Достаточно не открывать порты незащищенных сервисов во внешний мир, а в случае резкой необходимости использовать защитные системы самих сервисов (например, сертификаты ssh) или механизм «стука в порты» (о нем рассказано в конце статьи). Ситуация становится более сложной, когда дело касается сетевого моста, разделяющего внутреннюю и внешнюю сети (или две локальных сети). Доверительные отношения внутри локальной сети — обычное дело. Сервисы доступны всем, никакой аутентификации, шифрования и т.д. — просто лакомый кусочек для взломщика. Находясь во внешней сети, он может узнать сетевую маску внутренней сети и сформировать пакеты с соответствующим ей обратным адресом, что приведет к получению доступа ко всем ресурсам локалки. Это действительно опасная ситуация, но ее легко предотвратить с помощью правильной настройки брандмауэра или ОС. Для этого достаточно запретить прохождение пакетов, обратные адреса которых соответствуют используемым во внутренней сети, с внешнего интерфейса: Linux> iptables -A INPUT -i $outif \ -s 192.168.1.0/24 -j DENY FreeBSD> ipfw add deny ip from \ 192.168.1.0/24 to any via $outif OpenBSD> block in on $outif from \ 192.168.1.0/24 to any В качестве альтернативы или дополнительной меры защиты можно (и даже нужно) использовать специальные директивы ipfw и pf и настройки ядра Linux: Linux> echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter FreeBSD> ipfw add deny ip from any to any not antispoof in OpenBSD> antispoof quick for $ext_if Эти три команды приводят к одинаковым результатам. Все пакеты, обратные адреса которых соответствуют маске сети другого интерфейса, отбрасываются. |
Полезности IPTABLES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
В конце статьи мы рассмотрим несколько интересных возможностей iptables/netfilter, которые могут оказаться полезными при защите сервера. Начнем с механизма удаленного управления брандмауэром, получившего имя «стук в порты» (port knoking). Суть его заключается в том, чтобы заставить файервол выполнять определенные действия после подключения к заданному порту. Ниже приведен пример правил, открывающих порт SSH на 10 секунд после «стука» в 27520-ый порт: iptables и port knocking # Цепочка для проверки соединений на защищаемый порт iptables -N knock # Разрешаем соединение, если стук был в течение последних 10 секунд iptables -A knock -m recent --rcheck --seconds 10 \ -j ACCEPT # Очищаем INPUT iptables -F INPUT # Разрешаем все, что относится к уже установленным соединениям iptables -A INPUT -m conntrack \ --ctstate ESTABLISHED,RELATED -j ACCEPT # Все попытки открыть соединение с 22-м портом отправляем на проверку в цепочку knock iptables -A INPUT -m conntrack --ctstate NEW \ -p tcp --dport 22 -j knock # Заносим адрес стучащегося в 27520-й порт в список iptables -A INPUT -m conntrack --ctstate NEW \ -p tcp --dport 27520 -m recent --set # При стуке в соседние порты удаляем адрес из списка iptables -A INPUT -m conntrack --ctstate NEW -p tcp \ -m multiport --dport 27519,27521 -m recent --remove # Запрещаем все iptables -P INPUT DROP Третье с конца правило добавляет адрес стучащегося в список. Если та же машина в течение 10 секунд после стука обратится к 22-му порту, соединение будет установлено. Предпоследнее правило — защита от «перебора стука». Если злоумышленник попытается стучать последовательно во все порты с надеждой, что один из них откроет 22-й порт, сработает это правило, и его адрес будет удален из списка сразу после попадания в него. Вторая полезность iptables распространяется в пакете xtables-addons (patch-o-matic) и носит имя TARPIT. Это действие (такое же, как ACCEPT или DENY), которое «подвешивает» соединение, не позволяя атакующей стороне его закрыть. Соединение, пакеты которого попадают в TARPIT, будет благополучно установлено, однако размер окна будет равен нулю, благодаря чему удаленная машина не сможет отправлять данные, расходуя свои ресурсы, а соединение будет закрыто только по истечению таймаута. TARPIT можно использовать в экстренных случаях для защиты от DoS: # iptables -A INPUT -p tcp -m tcp -dport 80 -j TARPIT Или же для введения атакующего в заблуждение и борьбы против сканеров портов (только обычное TCP-сканирование, '-sT'): # iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT # iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT # iptables -A INPUT -p tcp -m tcp -j TARPIT Эти правила создают видимость системы, в которой открыты все порты, однако при попытке подключения к любому из них (кроме 80 и 25) соединения будут «подвисать». Того же результата, но без «провисших» соединений, можно добиться с помощью действия DELUDE, которое правильно отвечает на все попытки инициации соединения, но посылает RST-пакет в ответ на все остальные пакеты. Для еще большего запутывания атакующего ты можешь использовать действие CHAOS, которое случайным образом активирует одно из двух описанных выше действий. Выводы Обладая достаточным количеством знаний и вдумчиво читая документацию, ты можешь создать очень крепкий бастион, к которому будет не так-то просто подобраться. Современные брандмауэры, а в особенности pf и iptables, предлагают множество средств защиты от не прошенных гостей, которые ты можешь получить абсолютно безвозмездно. Links sf.net/projects/sentrytools — PortSentry http://www.openwall.com/scanlogd — scanlogd Борьба с утечкой ресурсов При использовании действия TARPIT обязательно добавляй в конфиг следующее правило, иначе «провисшие» соединения будут съедать ресурсы при обработке подсистемой conntrack: # iptables -t raw -I PREROUTING -p tcp --dport 25 -j NOTRACK |
Обжимка
1 2 3 4 5 6 7 8 9 |
языком вниз - слева направо бело оранжевый оранжевый бело зеленый синий бело синий зеленый бело коричневый коричневый |