Организация snmp управления на Edge-Core
все тестировалось на ES3528M и ES3510
тип коммутатора
на ES3528M/ES3552M
snmpget -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.1.5.1.0
на ES3510/ES3526XA
snmpget -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.1.5.1.0
работа с файлами ES3528M
указывает источник копирования 1 file, 2 runningCfg, 3 StartUpCfg, 4 tftp, 5 unit, 6 http, 7 ftp,
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.1.0 i [?]
имя копируемого файла
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.2.0 s [filename]
тип копируемого файла 1 opcode, 2 config, 3 bootrom, 5 loader
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.5.0 i [1-6]
указываем куда копировать ( все тоже самое как и в источнике ) -
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.3.0 i [1-6]
указываем с каким именем будет скопирован файл
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.4.0 s [filename]
указываем tftp сервер
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.6.0 a [ip]
говорим 1 некопировать, 2 копировать
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.8.0 i [12]
работа с файлами ES3510
указывает источник копирования 1 file, 2 runningCfg, 3 startUpCfg, 4 tftp, 5 unit
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.1.0 i [1-5]
имя копируемого файла
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.2.0 s [filename]
указываем куда копируем 1 file, 2 runningCfg, 3 startUpCfg, 4 tftp, 5 unit
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.3.0 i [1-5]
указываем с каким именем будет скопирован файл
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.4.0 s [filename]
тип копируемого файла 1 opcode, 2 config, 3 bootrom
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.5.0 i [1-3]
указываем tftp сервер
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.6.0 a [ip]
говорим 1 некопировать, 2 копировать
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.8.0 i [12]
Что мы должны указать для копирования running-config на tftp сервер ES3528M
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.1.0 i 2
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.3.0 i 4
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.4.0 s dev-[ip].cfp
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.6.0 a [tftp server ip]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.8.0 i 2
Что мы должны указать для копирования running-config на tftp сервер ES3510
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.1.0 i 2
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.3.0 i 4
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.4.0 s dev-[ip].cfp
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.6.0 a [tftp server ip]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.8.0 i 2
Что мы должны указать при обновлении софта ES3528M
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.1.0 i 4
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.2.0 s [firmware file name]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.3.0 i 1
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.4.0 s [firmware file name]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.5.0 i 1
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.6.0 a [tftp server ip]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.24.1.8.0 i 2
далее делаем скопированный файл стартовым
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.7.1.0 s [firmware file name]
перегружаем коммутатор, опции 1 работаем, 2 горячий ребут, 3 холодный ребут
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.7.3.0 i 3
Что мы должны указать при обновлении софта ES3510
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.1.0 i 4
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.2.0 s [firmware file name]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.3.0 i 1
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.4.0 s [firmware file name]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.5.0 i 1
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.6.0 a [tftp server ip]
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.24.1.8.0 i 2
далее делаем скопированный файл стартовым
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.7.1.0 s [firmware file name]
перегружаем коммутатор, опции 1 работаем, 2 горячий ребут, 3 холодный ребут
snmpset -v 2c -c [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.7.3.0 i 3
Просмотр текущей версии софта на ES3528M
snmpget -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.1.5.4.0
на ES3510
snmpget -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.1.5.4.0
Включение выключение порта
выключение
snmpset -v 2c -c [community] [ip] .1.3.6.1.2.1.2.2.1.7.[port] i 2
включение
snmpset -v 2c -c [community] [ip] .1.3.6.1.2.1.2.2.1.7.[port] i 1
Включение выключение ip source guard на порту ES3528M
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.48.1.1.2.[port] i [012]
где 0 выключено, 1 IP-SIP, 2 IP-MAC-SIP
Включение выключение ip source guard на порту ES3510
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.48.1.1.2.[port] i [012]
где 0 выключено, 1 IP-SIP, 2 IP-MAC-SIP
включение выключение ip dhcp snooping ES3528M
глобальное включение ( ip dhcp snooping )
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.1.1.0 i [12]
1 включено, 2 выключено
включение 1, выключение 2 проверки мак адреса ( no ip dhcp snooping verify mac-address ) -
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.1.2.0 i [12]
включение 1, выключени 2 добавления option 82 -
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.1.3.0 i [12]
отбрасывать 1, сохранять 2, заменять 3 option 82
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.1.4.0 i [123]
установка идентификатора устройства Agent ID, mac-hex 1, mac-ascii 2, ip-hex 3, ip ascii 4, string 5
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.1.6.0 i [12345]
включение dhcp snooping на вилане, 1 включено, 2 выключено
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.2.1.1.2.[vlan] i [12]
делаем указанный порт доверенным 1, не доверенным 2
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.6.10.94.1.46.3.1.1.2.[port] i [12]
включение выключение ip dhcp snooping ES3510
глобальное включение ( ip dhcp snooping )
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.46.1.1.0 i [12]
1 включено, 2 выключено
включение 1, выключение 2 проверки мак адреса ( no ip dhcp snooping verify mac-address ) -
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.46.1.2.0 i [12]
включение 1, выключени 2 добавления option 82 -
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.46.1.3.0 i [12]
отбрасывать 1, сохранять 2, заменять 3 option 82
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.46.1.4.0 i [123]
включение dhcp snooping на вилане, 1 включено, 2 выключено
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.46.2.1.1.2.[vlan] i [12]
делаем указанный порт доверенным 1, не доверенным 2
snmpset -v 2c -с [community] [ip] .1.3.6.1.4.1.259.8.1.5.1.46.3.1.1.2.[port] i [12]
Создание вилана на коммутаторе ES3528M и ES3510M
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.3.1.5.[vlan] i [?]
где вместо ?, 6 удалить указанный вилан, 5 создать указанный вилан
далее неоходима активация вилана
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.3.1.5.[vlan] i [12]
где 1 активировать, 2 деактивировать
укажем имя вилана
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.3.1.1.[vlan] s [name]
добавление тегированных портов
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.3.1.2.[vlan] x "f0 00 00 00"
добавление нетегированных портов
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.3.1.4.[vlan] x "f0 00 00 00"
определение нейтив вилана на порту
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.5.1.1.[port] u [vlan]
удаление вилана с портов
snmpset -v 2c -c [community] [ip] 1.3.6.1.2.1.17.7.1.4.3.1.2.[vlan] x "00 00 00 00"
Процесс понимания, чтоб не распонять :)
Похоже Hex-STRING отдаваемая с коммутатора содержит дополнительные байты данных, в целом нас интересует только
первые 7 байт для коммутаторов с 26 и 28 портами и первый три байта для 10 портовых коммутаторов.
порты определяются блоками по 4 бита в двоичном счислении с последующим преобразованием в шестнадцатеричный формат
для коммутатора с 28 портами все порты будут выглядеть как
1111 1111 1111 1111 1111 1111 1111 = FF FF FF F0
для коммутатора с 26 портами все порты будут выглядеть как
1111 1111 1111 1111 1111 1111 1100 - FF FF FF C0
для коммутатора с 10 портами все порты будут выглядеть как
1111 1111 1100 = FF C0
в каждом блоке из 4 бит последовательно указываются порты от первого в блоке до последнего
прим. портов в блоках порт 1 dec = 1000 bin, порт 2 dec = 0100 bin, 3 dec = 0010 bin, 4 dec = 0001 bin
в одном блоке указываются от 0 до 4 портов одновременно, допустимо любое значение в диапазоне от 0000 bin
до 1111 bin.
В дальшейшем двоичное значение блока преобразуется в шестнадцатеричное для передачи на устройство.
пример создание вилана на es3528m ( добавим вилан 2 на порты 11 и 18, порт 28 аплинк, назовем Test )
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.3.1.5.2 i 5
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.3.1.5.2 i 1
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.3.1.1.2 s Test
добавим указанный вилан на порт 28 тегированный
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.3.1.2.2 x "00 00 00 10"
добавляем порты 11 18 нетегированные
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.3.1.4.2 x "00 20 40 00"
определение нейтив вилана на порту
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.5.1.1.11 u 2
snmpset -v 2c -c Qorwnm12gT 10.100.10.19 1.3.6.1.2.1.17.7.1.4.5.1.1.18 u 2
---------------------
Взято с:
http://kukachik.blogspot.com/2010/08/snmp-edge-core.html#comment-form
tail -f /dev/memory
понеділок, 18 жовтня 2010 р.
вівторок, 23 червня 2009 р.
/etc/nginx/nginx.conf
# пользователь и группа от которого запускается процесс
user www www;
# 3 рабочих процесса
worker_processes 3;
# Лог для ошибок
error_log logs/error.log;
events {
# максимум рабочих соединений
worker_connections 1024;
# Метод обработки соединений
# kqueue — эффективный метод, используемый во FreeBSD
# Подробнее http://sysoev.ru/nginx/docs/events.html
use kqueue;
}
http {
# Подключаем таблицу mime
include mime.types;
# mime-тип по умолчанию
default_type application/octet-stream;
# Формат лог файла
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# Лог доступа всего веб-сервера
#access_log logs/access.log main;
# Директива задаёт таймаут при чтении заголовка запроса клиента
client_header_timeout 3m;
# Директива задаёт таймаут при чтении тела запроса клиента
client_body_timeout 3m;
# Директива задаёт таймаут при передаче ответа клиенту
send_timeout 3m;
# Директива задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 2m;
# Директива разрешает или запрещает использовать sendfile()
sendfile on;
# Директива разрешает или запрещает использовать опции TCP_NOPUSH во FreeBSD
# Подробнее http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#keepalive_timeout
#tcp_nopush on;
# Директива задаёт размер буфера для чтения заголовка запроса клиента
#client_header_buffer_size 1k;
# Директива задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента
#large_client_header_buffers 4 4k;
# Модуль позволяет описывать группы серверов, которые могут использоваться
# в директивах proxy_pass и fastcgi_pass.
upstream backend {
# Директива задаёт имя и параметры сервера. Обратите внимание, мы будем
# использовать имя "backend" в директиве proxy_pass
server 127.0.0.1:88;
}
server {
# Слушать 80 порт
listen 80;
# Использовать следующие хосты
server_name pyha.ru www.pyha.ru;
# Кодировка
#charset koi8-r;
# Лог доступа для конкретного виртуального хоста
#access_log logs/host.access.log main;
# Максимальный размер тела запроса клиента
client_max_body_size 101M;
# Разруливаем статику и динамку, смотрите описание ниже в этой статье!
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/pyha/pyha.ru;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Адрес страницы 404-ой ошибки, далее все ошибки по аналогии
#error_page 404 /404.html;
# Аналогично 404, только при этом назначается псевдоним 50x.html для всех
# 50x-тых ошибок и далее перенаправляется все на "root"
error_page 500 502 503 504 /50x.html;
location = /50x.html {
# корневая директория
root /usr/local/www/nginx-dist;
}
}
}
Взято з http://adw0rd.ru/2009/nginx-and-apache-install/
user www www;
# 3 рабочих процесса
worker_processes 3;
# Лог для ошибок
error_log logs/error.log;
events {
# максимум рабочих соединений
worker_connections 1024;
# Метод обработки соединений
# kqueue — эффективный метод, используемый во FreeBSD
# Подробнее http://sysoev.ru/nginx/docs/events.html
use kqueue;
}
http {
# Подключаем таблицу mime
include mime.types;
# mime-тип по умолчанию
default_type application/octet-stream;
# Формат лог файла
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# Лог доступа всего веб-сервера
#access_log logs/access.log main;
# Директива задаёт таймаут при чтении заголовка запроса клиента
client_header_timeout 3m;
# Директива задаёт таймаут при чтении тела запроса клиента
client_body_timeout 3m;
# Директива задаёт таймаут при передаче ответа клиенту
send_timeout 3m;
# Директива задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 2m;
# Директива разрешает или запрещает использовать sendfile()
sendfile on;
# Директива разрешает или запрещает использовать опции TCP_NOPUSH во FreeBSD
# Подробнее http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#keepalive_timeout
#tcp_nopush on;
# Директива задаёт размер буфера для чтения заголовка запроса клиента
#client_header_buffer_size 1k;
# Директива задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента
#large_client_header_buffers 4 4k;
# Модуль позволяет описывать группы серверов, которые могут использоваться
# в директивах proxy_pass и fastcgi_pass.
upstream backend {
# Директива задаёт имя и параметры сервера. Обратите внимание, мы будем
# использовать имя "backend" в директиве proxy_pass
server 127.0.0.1:88;
}
server {
# Слушать 80 порт
listen 80;
# Использовать следующие хосты
server_name pyha.ru www.pyha.ru;
# Кодировка
#charset koi8-r;
# Лог доступа для конкретного виртуального хоста
#access_log logs/host.access.log main;
# Максимальный размер тела запроса клиента
client_max_body_size 101M;
# Разруливаем статику и динамку, смотрите описание ниже в этой статье!
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/pyha/pyha.ru;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Адрес страницы 404-ой ошибки, далее все ошибки по аналогии
#error_page 404 /404.html;
# Аналогично 404, только при этом назначается псевдоним 50x.html для всех
# 50x-тых ошибок и далее перенаправляется все на "root"
error_page 500 502 503 504 /50x.html;
location = /50x.html {
# корневая директория
root /usr/local/www/nginx-dist;
}
}
}
Взято з http://adw0rd.ru/2009/nginx-and-apache-install/
четвер, 11 червня 2009 р.
файловый редактор в mc
Почему-то в любимом mc в ubuntu 8.10 по умолчанию встал редактор nano
cd /home/.mc
sudo nano ini
Далее находим строчку
use_internal_edit=0
заменяем 0 на 1
сохраняем ctrl+x
жмём Y
и запускаем MC ^)
souece:
http://brandykov.blogspot.com/2009/02/mc.html
cd /home/.mc
sudo nano ini
Далее находим строчку
use_internal_edit=0
заменяем 0 на 1
сохраняем ctrl+x
жмём Y
и запускаем MC ^)
souece:
http://brandykov.blogspot.com/2009/02/mc.html
четвер, 4 червня 2009 р.
DNS За 15 хвилин
Сервер:
OS debian 5
ip 192.168.1.1
zone org.ua (для прикладу :) )
Насам перед потрібно встановити сам DNS сервер. В якості сервера я обрав bind, отже приступимо.
#aptitude install bind9
Дочекавшись закінчення процедури інсталяції робимо наступне.
#/etc/init.d/bind9 stop
Тепер можемо приступидо до зміни конфігураційних файлів.
#nano /etc/bind/named.conf.local
Зараз нам потрібно створити файли зон які ми вказали в named.conf.local, а саме db.org.ua та db.org.ua.rev
db.org.ua:
;
; BIND data file for broadcast zone org.ua
;
$TTL 604800
@ IN SOA org.ua. root.org.ua. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.org.ua.
ns A 127.0.0.1
ns A 192.168.1.1
gw A 192.168.1.1
web A 192.168.1.2
db.org.ua.rev
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA org.ua. root.org.ua. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1 PTR ns.org.ua.
2 PTR web.org.ua.
після чого потібно внести запис про DNS сервер в /etc/resolv.conf
#nano /etc/resolv.conf
Запускаємо сервер
#/etc/init.d/bind9 start
Перевіряємо
~# dig ns.org.ua
; <<>> DiG 9.3.4-P1.1 <<>> ns.org.ua
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26392
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;ns.org.ua. IN A
;; ANSWER SECTION:
ns.org.ua. 604800 IN A 192.168.1.1
ns.org.ua. 604800 IN A 127.0.0.1
;; AUTHORITY SECTION:
org.ua. 604800 IN NS ns.org.ua.
;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Jun 4 15:47:32 2009
;; MSG SIZE rcvd: 73
OS debian 5
ip 192.168.1.1
zone org.ua (для прикладу :) )
Насам перед потрібно встановити сам DNS сервер. В якості сервера я обрав bind, отже приступимо.
#aptitude install bind9
Дочекавшись закінчення процедури інсталяції робимо наступне.
#/etc/init.d/bind9 stop
Тепер можемо приступидо до зміни конфігураційних файлів.
#nano /etc/bind/named.conf.local
zone "org.ua" {
type master;
file "/etc/bind/db.org.ua";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.org.ua.rev";
};
Зараз нам потрібно створити файли зон які ми вказали в named.conf.local, а саме db.org.ua та db.org.ua.rev
db.org.ua:
;
; BIND data file for broadcast zone org.ua
;
$TTL 604800
@ IN SOA org.ua. root.org.ua. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.org.ua.
ns A 127.0.0.1
ns A 192.168.1.1
gw A 192.168.1.1
web A 192.168.1.2
db.org.ua.rev
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA org.ua. root.org.ua. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1 PTR ns.org.ua.
2 PTR web.org.ua.
після чого потібно внести запис про DNS сервер в /etc/resolv.conf
#nano /etc/resolv.conf
search org.ua
nameserver 127.0.0.1
nameserver 192.168.1.1
Запускаємо сервер
#/etc/init.d/bind9 start
Перевіряємо
~# dig ns.org.ua
; <<>> DiG 9.3.4-P1.1 <<>> ns.org.ua
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26392
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;ns.org.ua. IN A
;; ANSWER SECTION:
ns.org.ua. 604800 IN A 192.168.1.1
ns.org.ua. 604800 IN A 127.0.0.1
;; AUTHORITY SECTION:
org.ua. 604800 IN NS ns.org.ua.
;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Jun 4 15:47:32 2009
;; MSG SIZE rcvd: 73
/etc/network/interfaces
######################################################################
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
#
# A "#" character in the very first column makes the rest of the line
# be ignored. Blank lines are ignored. Lines may be indented freely.
# A "\" character at the very end of the line indicates the next line
# should be treated as a continuation of the current one.
#
# The "pre-up", "up", "down" and "post-down" options are valid for all
# interfaces, and may be specified multiple times. All other options
# may only be specified once.
#
# See the interfaces(5) manpage for information on what options are
# available.
######################################################################
# We always want the loopback interface.
#
# auto lo
# iface lo inet loopback
# An example ethernet card setup: (broadcast and gateway are optional)
#
# auto eth0
# iface eth0 inet static
# address 192.168.0.42
# network 192.168.0.0
# netmask 255.255.255.0
# broadcast 192.168.0.255
# gateway 192.168.0.1
# A more complicated ethernet setup, with a less common netmask, and a downright
# weird broadcast address: (the "up" lines are executed verbatim when the
# interface is brought up, the "down" lines when it's brought down)
#
# auto eth0
# iface eth0 inet static
# address 192.168.1.42
# network 192.168.1.0
# netmask 255.255.255.128
# broadcast 192.168.1.0
# up route add -net 192.168.1.128 netmask 255.255.255.128 gw 192.168.1.2
# up route add default gw 192.168.1.200
# down route del default gw 192.168.1.200
# down route del -net 192.168.1.128 netmask 255.255.255.128 gw 192.168.1.2
# A more complicated ethernet setup with a single ethernet card with
# two interfaces.
# Note: This happens to work since ifconfig handles it that way, not because
# ifup/down handles the ':' any differently.
# Warning: There is a known bug if you do this, since the state will not
# be properly defined if you try to 'ifdown eth0' when both interfaces
# are up. The ifconfig program will not remove eth0 but it will be
# removed from the interfaces state so you will see it up until you execute:
# 'ifdown eth0:1 ; ifup eth0; ifdown eth0'
# BTW, this is "bug" #193679 (it's not really a bug, it's more of a
# limitation)
#
# auto eth0 eth0:1
# iface eth0 inet static
# address 192.168.0.100
# network 192.168.0.0
# netmask 255.255.255.0
# broadcast 192.168.0.255
# gateway 192.168.0.1
# iface eth0:1 inet static
# address 192.168.0.200
# network 192.168.0.0
# netmask 255.255.255.0
# "pre-up" and "post-down" commands are also available. In addition, the
# exit status of these commands are checked, and if any fail, configuration
# (or deconfiguration) is aborted. So:
#
# auto eth0
# iface eth0 inet dhcp
# pre-up [ -f /etc/network/local-network-ok ]
#
# will allow you to only have eth0 brought up when the file
# /etc/network/local-network-ok exists.
# Two ethernet interfaces, one connected to a trusted LAN, the other to
# the untrusted Internet. If their MAC addresses get swapped (because an
# updated kernel uses a different order when probing for network cards,
# say), then they don't get brought up at all.
#
# auto eth0 eth1
# iface eth0 inet static
# address 192.168.42.1
# netmask 255.255.255.0
# pre-up /path/to/check-mac-address.sh eth0 11:22:33:44:55:66
# pre-up /usr/local/sbin/enable-masq
# iface eth1 inet dhcp
# pre-up /path/to/check-mac-address.sh eth1 AA:BB:CC:DD:EE:FF
# pre-up /usr/local/sbin/firewall
# Two ethernet interfaces, one connected to a trusted LAN, the other to
# the untrusted Internet, identified by MAC address rather than interface
# name:
#
# auto eth0 eth1
# mapping eth0 eth1
# script /path/to/get-mac-address.sh
# map 11:22:33:44:55:66 lan
# map AA:BB:CC:DD:EE:FF internet
# iface lan inet static
# address 192.168.42.1
# netmask 255.255.255.0
# pre-up /usr/local/sbin/enable-masq $IFACE
# iface internet inet dhcp
# pre-up /usr/local/sbin/firewall $IFACE
# A PCMCIA interface for a laptop that is used in different locations:
# (note the lack of an "auto" line for any of these)
#
# mapping eth0
# script /path/to/pcmcia-compat.sh
# map home,*,*,* home
# map work,*,*,00:11:22:33:44:55 work-wireless
# map work,*,*,01:12:23:34:45:50 work-static
#
# iface home inet dhcp
# iface work-wireless bootp
# iface work-static static
# address 10.15.43.23
# netmask 255.255.255.0
# gateway 10.15.43.1
#
# Note, this won't work unless you specifically change the file
# /etc/pcmcia/network to look more like:
#
# if [ -r ./shared ] ; then . ./shared ; else . /etc/pcmcia/shared ; fi
# get_info $DEVICE
# case "$ACTION" in
# 'start')
# /sbin/ifup $DEVICE
# ;;
# 'stop')
# /sbin/ifdown $DEVICE
# ;;
# esac
# exit 0
# An alternate way of doing the same thing: (in this case identifying
# where the laptop is is done by configuring the interface as various
# options, and seeing if a computer that is known to be on each particular
# network will respond to pings. The various numbers here need to be chosen
# with a great deal of care.)
#
# mapping eth0
# script /path/to/ping-places.sh
# map 192.168.42.254/24 192.168.42.1 home
# map 10.15.43.254/24 10.15.43.1 work-wireless
# map 10.15.43.23/24 10.15.43.1 work-static
#
# iface home inet dhcp
# iface work-wireless bootp
# iface work-static static
# address 10.15.43.23
# netmask 255.255.255.0
# gateway 10.15.43.1
#
# Note that the ping-places script requires the iproute package installed,
# and the same changes to /etc/pcmcia/network are required for this as for
# the previous example.
# Set up an interface to read all the traffic on the network. This
# configuration can be useful to setup Network Intrusion Detection
# sensors in 'stealth'-type configuration. This prevents the NIDS
# system to be a direct target in a hostile network since they have
# no IP address on the network. Notice, however, that there have been
# known bugs over time in sensors part of NIDS (for example see
# DSA-297 related to Snort) and remote buffer overflows might even be
# triggered by network packet processing.
#
# auto eth0
# iface eth0 inet manual
# up ifconfig $IFACE 0.0.0.0 up
# up ip link set $IFACE promisc on
# down ip link set $IFACE promisc off
# down ifconfig $IFACE down
# Set up an interface which will not be allocated an IP address by
# ifupdown but will be configured through external programs. This
# can be useful to setup interfaces configured through other programs,
# like, for example, PPPOE scripts.
#
# auto eth0
# iface eth0 inet manual
# up ifconfig $IFACE 0.0.0.0 up
# up /usr/local/bin/myconfigscript
# down ifconfig $IFACE down
Джерело: http://www.cyberciti.biz/faq/setting-up-an-network-interfaces-file/
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
#
# A "#" character in the very first column makes the rest of the line
# be ignored. Blank lines are ignored. Lines may be indented freely.
# A "\" character at the very end of the line indicates the next line
# should be treated as a continuation of the current one.
#
# The "pre-up", "up", "down" and "post-down" options are valid for all
# interfaces, and may be specified multiple times. All other options
# may only be specified once.
#
# See the interfaces(5) manpage for information on what options are
# available.
######################################################################
# We always want the loopback interface.
#
# auto lo
# iface lo inet loopback
# An example ethernet card setup: (broadcast and gateway are optional)
#
# auto eth0
# iface eth0 inet static
# address 192.168.0.42
# network 192.168.0.0
# netmask 255.255.255.0
# broadcast 192.168.0.255
# gateway 192.168.0.1
# A more complicated ethernet setup, with a less common netmask, and a downright
# weird broadcast address: (the "up" lines are executed verbatim when the
# interface is brought up, the "down" lines when it's brought down)
#
# auto eth0
# iface eth0 inet static
# address 192.168.1.42
# network 192.168.1.0
# netmask 255.255.255.128
# broadcast 192.168.1.0
# up route add -net 192.168.1.128 netmask 255.255.255.128 gw 192.168.1.2
# up route add default gw 192.168.1.200
# down route del default gw 192.168.1.200
# down route del -net 192.168.1.128 netmask 255.255.255.128 gw 192.168.1.2
# A more complicated ethernet setup with a single ethernet card with
# two interfaces.
# Note: This happens to work since ifconfig handles it that way, not because
# ifup/down handles the ':' any differently.
# Warning: There is a known bug if you do this, since the state will not
# be properly defined if you try to 'ifdown eth0' when both interfaces
# are up. The ifconfig program will not remove eth0 but it will be
# removed from the interfaces state so you will see it up until you execute:
# 'ifdown eth0:1 ; ifup eth0; ifdown eth0'
# BTW, this is "bug" #193679 (it's not really a bug, it's more of a
# limitation)
#
# auto eth0 eth0:1
# iface eth0 inet static
# address 192.168.0.100
# network 192.168.0.0
# netmask 255.255.255.0
# broadcast 192.168.0.255
# gateway 192.168.0.1
# iface eth0:1 inet static
# address 192.168.0.200
# network 192.168.0.0
# netmask 255.255.255.0
# "pre-up" and "post-down" commands are also available. In addition, the
# exit status of these commands are checked, and if any fail, configuration
# (or deconfiguration) is aborted. So:
#
# auto eth0
# iface eth0 inet dhcp
# pre-up [ -f /etc/network/local-network-ok ]
#
# will allow you to only have eth0 brought up when the file
# /etc/network/local-network-ok exists.
# Two ethernet interfaces, one connected to a trusted LAN, the other to
# the untrusted Internet. If their MAC addresses get swapped (because an
# updated kernel uses a different order when probing for network cards,
# say), then they don't get brought up at all.
#
# auto eth0 eth1
# iface eth0 inet static
# address 192.168.42.1
# netmask 255.255.255.0
# pre-up /path/to/check-mac-address.sh eth0 11:22:33:44:55:66
# pre-up /usr/local/sbin/enable-masq
# iface eth1 inet dhcp
# pre-up /path/to/check-mac-address.sh eth1 AA:BB:CC:DD:EE:FF
# pre-up /usr/local/sbin/firewall
# Two ethernet interfaces, one connected to a trusted LAN, the other to
# the untrusted Internet, identified by MAC address rather than interface
# name:
#
# auto eth0 eth1
# mapping eth0 eth1
# script /path/to/get-mac-address.sh
# map 11:22:33:44:55:66 lan
# map AA:BB:CC:DD:EE:FF internet
# iface lan inet static
# address 192.168.42.1
# netmask 255.255.255.0
# pre-up /usr/local/sbin/enable-masq $IFACE
# iface internet inet dhcp
# pre-up /usr/local/sbin/firewall $IFACE
# A PCMCIA interface for a laptop that is used in different locations:
# (note the lack of an "auto" line for any of these)
#
# mapping eth0
# script /path/to/pcmcia-compat.sh
# map home,*,*,* home
# map work,*,*,00:11:22:33:44:55 work-wireless
# map work,*,*,01:12:23:34:45:50 work-static
#
# iface home inet dhcp
# iface work-wireless bootp
# iface work-static static
# address 10.15.43.23
# netmask 255.255.255.0
# gateway 10.15.43.1
#
# Note, this won't work unless you specifically change the file
# /etc/pcmcia/network to look more like:
#
# if [ -r ./shared ] ; then . ./shared ; else . /etc/pcmcia/shared ; fi
# get_info $DEVICE
# case "$ACTION" in
# 'start')
# /sbin/ifup $DEVICE
# ;;
# 'stop')
# /sbin/ifdown $DEVICE
# ;;
# esac
# exit 0
# An alternate way of doing the same thing: (in this case identifying
# where the laptop is is done by configuring the interface as various
# options, and seeing if a computer that is known to be on each particular
# network will respond to pings. The various numbers here need to be chosen
# with a great deal of care.)
#
# mapping eth0
# script /path/to/ping-places.sh
# map 192.168.42.254/24 192.168.42.1 home
# map 10.15.43.254/24 10.15.43.1 work-wireless
# map 10.15.43.23/24 10.15.43.1 work-static
#
# iface home inet dhcp
# iface work-wireless bootp
# iface work-static static
# address 10.15.43.23
# netmask 255.255.255.0
# gateway 10.15.43.1
#
# Note that the ping-places script requires the iproute package installed,
# and the same changes to /etc/pcmcia/network are required for this as for
# the previous example.
# Set up an interface to read all the traffic on the network. This
# configuration can be useful to setup Network Intrusion Detection
# sensors in 'stealth'-type configuration. This prevents the NIDS
# system to be a direct target in a hostile network since they have
# no IP address on the network. Notice, however, that there have been
# known bugs over time in sensors part of NIDS (for example see
# DSA-297 related to Snort) and remote buffer overflows might even be
# triggered by network packet processing.
#
# auto eth0
# iface eth0 inet manual
# up ifconfig $IFACE 0.0.0.0 up
# up ip link set $IFACE promisc on
# down ip link set $IFACE promisc off
# down ifconfig $IFACE down
# Set up an interface which will not be allocated an IP address by
# ifupdown but will be configured through external programs. This
# can be useful to setup interfaces configured through other programs,
# like, for example, PPPOE scripts.
#
# auto eth0
# iface eth0 inet manual
# up ifconfig $IFACE 0.0.0.0 up
# up /usr/local/bin/myconfigscript
# down ifconfig $IFACE down
Джерело: http://www.cyberciti.biz/faq/setting-up-an-network-interfaces-file/
субота, 2 травня 2009 р.
Мониторинг сети с помощью tcpdump
Довольно часто встает проблема, когда ему нужно узнать как работает сеть. Или просто для учебных-исследовательских целей узнать как взаимодействуют между собой объекты сети. Для этих целей в UNIX-мире написано целая куча инструментов. В данном материале будет рассматриваться один из них: tcpdump.
Итак, tcpdump.
$ man tcpdump, нам гласит
Tcpdump выводит заголовки пакетов проходящих через сетевой интерфейс, которые совпадают с булевым выражением. Он может также быть запущен с ключем -w, который заставляет сохранять данные пактов в файл для дальнейшего исследования, и/или с ключем -r, который заставляет читать сохраненные пакеты из файла, вместо чтения пакетов из сетевого интерфейса. В любом случае, tcpdump будут обработаны только те пакеты, которые совпадают с выражением.
Tcpdump будет, если не запущен с ключем -c, продолжать собирать пакеты до тех пор, пока не будет прерван сигналом SIGINT (генерируемым, для примера, вводом Вашего символа прерывания, обычно CTRL+C) или сигналом SIGTERM (обычно генерируемого командой kill). Если запуск был с ключем -c, то сбор пакетов будет продолжаться до тех пор, пока не произойдет прерывание сигналом SIGINT или SIGTERM или пока не будет обработано определенное количество пакетов.
Когда tcpdump закончит сбор пакетов, то будет сообщено об количестве:
пакетов "полученных фильтром" (received by filter) (значение зависит от той ОС, на какой Вы запускаете tcpdump, и, возможно, от способа, котрым ОС была сконфигурирована - если фильтр был определен в командной строке, на некоторых ОС будут сосчитаны пакеты независимо от фильтрующего выражения, а в других ОС будут сосчитаны только те пакеты, которые попадают под фильтрующее и выражение, и были обработаны tcpdump);
пакетов "отброшенных ядром" (dropped by kernel) (это число пакетов, которые были отброшены, в зависимости от механизма сбора пакетов (недостаточного объема буферов) на той ОС, где запускается tcpdump, ОС предоставит эту инофрмацию приложению или нет, и тогда будет выведено число 0)
Это был перевод - исправления приветствуются.
Дальше идет описание ключей. Вот некоторые из них:
-c count Выйти после получения определенного количества пакетов.
-C file_size Перед записью "сырого" пакета в файл, происходит проверка на превышение размером файла лимита, указанного в file_size. Если размер файла больше, то файл закрывается и открывается новый. Новый файл будет иметь имя определенное в ключе -w, со стоящим в конце числом 2, которое будет увеличиваться в следующих именах файлов. file_size определяет размер в миллионах байт (1,000,000), а не мегабайтах (1,048,576).
-F file Использовать file для ввода фильтрующего выражения. Выражение, указанное в командной строке, будет игнорироваться.
-i interface Собирать пакеты только на определенном интерфейсе. Если не указан - берется минимальный по номеру интерфейс (исключая loopback). Для Linux-ядер 2.2 и более новых, возможно указать 'any', тогда будет происходить сбор на всех интерфейсах, но они не будут переведены в режим promiscuous.
-n Не преобразовывать адрес хоста в имя. Может быть использовано, если необходимо избегать DNS-запросов.
-nn Не преобразовывать протокол и номер порта в их имена.
-N Не выводить доменную часть имени хоста. Например, при данном ключе будет выводится "nic" вместо "nic.ddn.mil"
-p Не переводить интерфейс в режим promiscuous. Следует заметить, что интерфейс может быть в режиме promiscuous по другим причинам.
-r file Читать пакеты из file (который, был создан с ключем -w). Если file указан как "-", то используется стандартный ввод.
-t Не выводить временной штамп (timestamp) в каждой строке дампа (dump).
-tt Выводит не форматированный временной штамп в каждой строке дампа.
-ttt Выводить разницу (в микросекундах) между текущей и предыдущей строками дампа.
-tttt Выводить временной штамп вместе с датой в формате по-умолчанию в каждой строке дампа.
-v (Чуть более) подробный вывод. Для еще более подробного вывода используются: -vv и -vvv.
-w file Писать "сырые" пакеты в file перед тем как произвести их разбор и вывести. Они могут быть позднее выведены с ключем -r. Если file указан как "-", то используется стандартный вывод.
-x Печатать каждый пакет (без заголовков уровня соединения) в шестнадцатиричном виде.
-X Помимо шестнадцатиричного вида выводить их ASCII-значения.
Теперь, рассмотрим фильтрующее выражение.
Оно выбирает какие пакеты будут выбираться из общего потока. Если оно не указано, то будут выбираться и выводится все пакеты идущие через интерфейс. Иначе, будут обработаны только те пакеты, для которых проверка с выражением выдаст значение "истина" (true).
Выражение состоит из одного или более примитивов. Примитивы обычно состоят из ID (имя или номер) следующего за одним или более классификаторами. Различают три вида классификаторов:
type Говорят к какому виду относить ID. Возможный значения host, net или port. Пример: 'host foo', 'net 128.3', 'port 20'. Если классификатор type не указан, то подразумевается host.
dir Определяет конкретное направление передачи "к" и/или "от" ID. Возможны значения src, dst, src or dst and src and dst. Пример, 'src foo', 'dst net 128.3', 'src or dst port ftp-data'. Если не указан, то подразумевается src or dst. Для соединений нулевого ('null') уровня (к примеру, протокол точка-точка, такой как slip) указанием направления могут быть классификаторы inbound и outbound.
proto Ограничивает совпадение конкретным протоколом. Возможные протоколы: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp и udp. Пример, 'ether src foo', 'arp net 128.3', 'tcp port 21'. Если классификатор proto не указан, то подразумеваются все перечисленные типы протоколов. Например, 'src foo означает '(ip or arp or rarp) src foo', 'net bar' означает '(ip or arp or rarp) net bar', а 'port 53' означает '(tcp or udp) port 53'.
В добавок, существует несколько специальных примитивов - ключевых слов: gateway, broadcast, less, greater и арифметические выражения.
Более сложные фильтрующие выражения могут быть построены с помощью слов and, or и not, объединяющих примитивы. Пример, 'host foo and not port ftp and not port ftp-data'. Чтобы уменьшить количество вводимой информации, идентичные списки классификаторов могут быть опущены. Пример, 'tcp dst port ftp or ftp-data or domain' это тоже самое, что и 'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'
Перечислим некоторые из допустимых примитивов (за более полным списком в man tcpdump):
dst host host
Истина, если поле "назначение" пакета -это host, который может быть адресом или именем
src host host
Истина, если поле "источник" пакета - это host.
host host
Истина, если или поле "назначение", или поле "источник" пакета - это host. Любое из описанный выше выражений может быть приписано к ключевому слову ip, arp, rarp, или ip6, как в 'ip host host', что эквивалентно 'ether proto \ip and host host'. Если host - это имя с несколькими IP адресам, то проверяется совпадение по каждому адресу.
net net mask netmask
Истина, если IP адрес входит в сеть с указанной сетевой маской. Может быть классифицировано с dst или src.
net net/len
Истина, если IP адрес входит в сеть с указанной сетевой маской, заданной количеством бит. Может быть классифицировано с dst или src.
dst port port
Истина, если пакет протоколов ip/tcp, ip/udp, ip6/tcp или ip6/udp, и порт-назначения имеет значение указанное в port. Порт может быть числом или именем, используемым в /etc/services. Если используется число или неоднозначное имя, то проверяется только номер порта (пример, 'dst port 513' будет выводить трафик и для tcp/login и для udp/who, а 'port domain' будет выводить трафик и для tcp/domain и для udp/domain).
src port port
Истина, если пакет имеет порт-источник - port
port port
Истина, если или порт-назначение, или порт-источник в пакете - port. Любое из описанных выше выражений может быть приписано к ключевому слову tcp или udp, как в 'tcp src port port', проверяющее совпадения только для TCP-пакетов.
less length
Истина, если пакет имеет длину меньше или равную length. Это эквивалентно len <= length.
greater length
Истина, если пакет имеет длину больше или равную length. Это эквивалентно len >= length.
ip proto protocol
Истина, если пакет - это IP-пакет протокола, указанного в protocol. Протокол может быть числом или одним из имен icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp, или tcp. Заметим, что идентификаторы tcp, udp и icmp - ключевые слова и должны быть "заэкскейпены" через обратный слэш (\).
Прежде чем переходит к примерам рассмотрим, что может нам выдать tcpdump при выполнении.
Типичные результаты работы tcpdump -ttt:
1. 000107 192.168.2.13 > 192.168.2.254: icmp: 192.168.2.13 udp port 3631 unreachable
2. 000313 192.168.2.254.53 > 192.168.2.13.3656: 4 ServFail 0/0/0 (22) (DF)
3. 000287 192.168.2.254 > 192.168.2.100: icmp: net 205.188.179.233 unreachable [tos 0xc0]
4. 010956 192.168.2.254.139 > 192.168.2.13.3661: P 1:5(4) ack 73 win 5840 NBT Packet (DF)
5. 276274 192.168.2.150.3053 > 192.168.2.254.53: 7+ A? Tatyana.karavay-shops.ru. (42)
6. 001162 192.168.2.100.32772 > 192.168.2.254.16007: . ack 73 win 5840 (DF)
Первое поле - поле времени, т. к. запуск осуществлялся с ключом "-ttt", то это разница в микросекундах между этим пакетом и предыдущим.
Потом идет IP-адрес (или имя) отправителя пакета, через точку может указываться порт. После знака ">", указывается получатель пакета (или его имя) и также порт. Затем будет идти либо сразу служебная информация идущая в пакете, либо протокол (у нас это icmp). В служебной информации может быть указано либо состояние флагов в пакете, либо расшифрованная информация ("192.168.2.13 udp port 3631 unreachable" или DNS-запрос об хосте "Tatyana.karavay-shops.ru").
Ну а теперь пора взяться за конкретные примеры.
1. Ловим весь входящий трафик из локальной сети на сервер. Здесь все просто.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt dst host 192.168.2.254
Если вы запускаете его в SSH сессии, то подготовьтесь - польется очень много и очень быстро...
2. Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'dst host 192.168.2.254 and not ( src host 192.168.2.100 and dst port 22 )'
Вот теперь в потоке пакетов можно разобраться.
3. Нужна информация об DNS-общении между сервером и каким-нибудь узлом сети.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and ip proto \udp'
Здесь, кстати будет бегать не только DNS-трафик. А вообще весь, который идет по UDP. Исправить это можно следующим:
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and port 53'
4. Отлавливаем исключительно icmp пакеты.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'ip proto \icmp'
Вот. Теперь все.
Не забывайте, что более подробную информацию можно получить из man tcpdump. Там же можно прочитать об структуре пакетов основных протоколов, что позволит еще глубже исследовать Ваши сети.
Итак, tcpdump.
$ man tcpdump, нам гласит
Tcpdump выводит заголовки пакетов проходящих через сетевой интерфейс, которые совпадают с булевым выражением. Он может также быть запущен с ключем -w, который заставляет сохранять данные пактов в файл для дальнейшего исследования, и/или с ключем -r, который заставляет читать сохраненные пакеты из файла, вместо чтения пакетов из сетевого интерфейса. В любом случае, tcpdump будут обработаны только те пакеты, которые совпадают с выражением.
Tcpdump будет, если не запущен с ключем -c, продолжать собирать пакеты до тех пор, пока не будет прерван сигналом SIGINT (генерируемым, для примера, вводом Вашего символа прерывания, обычно CTRL+C) или сигналом SIGTERM (обычно генерируемого командой kill). Если запуск был с ключем -c, то сбор пакетов будет продолжаться до тех пор, пока не произойдет прерывание сигналом SIGINT или SIGTERM или пока не будет обработано определенное количество пакетов.
Когда tcpdump закончит сбор пакетов, то будет сообщено об количестве:
пакетов "полученных фильтром" (received by filter) (значение зависит от той ОС, на какой Вы запускаете tcpdump, и, возможно, от способа, котрым ОС была сконфигурирована - если фильтр был определен в командной строке, на некоторых ОС будут сосчитаны пакеты независимо от фильтрующего выражения, а в других ОС будут сосчитаны только те пакеты, которые попадают под фильтрующее и выражение, и были обработаны tcpdump);
пакетов "отброшенных ядром" (dropped by kernel) (это число пакетов, которые были отброшены, в зависимости от механизма сбора пакетов (недостаточного объема буферов) на той ОС, где запускается tcpdump, ОС предоставит эту инофрмацию приложению или нет, и тогда будет выведено число 0)
Это был перевод - исправления приветствуются.
Дальше идет описание ключей. Вот некоторые из них:
-c count Выйти после получения определенного количества пакетов.
-C file_size Перед записью "сырого" пакета в файл, происходит проверка на превышение размером файла лимита, указанного в file_size. Если размер файла больше, то файл закрывается и открывается новый. Новый файл будет иметь имя определенное в ключе -w, со стоящим в конце числом 2, которое будет увеличиваться в следующих именах файлов. file_size определяет размер в миллионах байт (1,000,000), а не мегабайтах (1,048,576).
-F file Использовать file для ввода фильтрующего выражения. Выражение, указанное в командной строке, будет игнорироваться.
-i interface Собирать пакеты только на определенном интерфейсе. Если не указан - берется минимальный по номеру интерфейс (исключая loopback). Для Linux-ядер 2.2 и более новых, возможно указать 'any', тогда будет происходить сбор на всех интерфейсах, но они не будут переведены в режим promiscuous.
-n Не преобразовывать адрес хоста в имя. Может быть использовано, если необходимо избегать DNS-запросов.
-nn Не преобразовывать протокол и номер порта в их имена.
-N Не выводить доменную часть имени хоста. Например, при данном ключе будет выводится "nic" вместо "nic.ddn.mil"
-p Не переводить интерфейс в режим promiscuous. Следует заметить, что интерфейс может быть в режиме promiscuous по другим причинам.
-r file Читать пакеты из file (который, был создан с ключем -w). Если file указан как "-", то используется стандартный ввод.
-t Не выводить временной штамп (timestamp) в каждой строке дампа (dump).
-tt Выводит не форматированный временной штамп в каждой строке дампа.
-ttt Выводить разницу (в микросекундах) между текущей и предыдущей строками дампа.
-tttt Выводить временной штамп вместе с датой в формате по-умолчанию в каждой строке дампа.
-v (Чуть более) подробный вывод. Для еще более подробного вывода используются: -vv и -vvv.
-w file Писать "сырые" пакеты в file перед тем как произвести их разбор и вывести. Они могут быть позднее выведены с ключем -r. Если file указан как "-", то используется стандартный вывод.
-x Печатать каждый пакет (без заголовков уровня соединения) в шестнадцатиричном виде.
-X Помимо шестнадцатиричного вида выводить их ASCII-значения.
Теперь, рассмотрим фильтрующее выражение.
Оно выбирает какие пакеты будут выбираться из общего потока. Если оно не указано, то будут выбираться и выводится все пакеты идущие через интерфейс. Иначе, будут обработаны только те пакеты, для которых проверка с выражением выдаст значение "истина" (true).
Выражение состоит из одного или более примитивов. Примитивы обычно состоят из ID (имя или номер) следующего за одним или более классификаторами. Различают три вида классификаторов:
type Говорят к какому виду относить ID. Возможный значения host, net или port. Пример: 'host foo', 'net 128.3', 'port 20'. Если классификатор type не указан, то подразумевается host.
dir Определяет конкретное направление передачи "к" и/или "от" ID. Возможны значения src, dst, src or dst and src and dst. Пример, 'src foo', 'dst net 128.3', 'src or dst port ftp-data'. Если не указан, то подразумевается src or dst. Для соединений нулевого ('null') уровня (к примеру, протокол точка-точка, такой как slip) указанием направления могут быть классификаторы inbound и outbound.
proto Ограничивает совпадение конкретным протоколом. Возможные протоколы: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp и udp. Пример, 'ether src foo', 'arp net 128.3', 'tcp port 21'. Если классификатор proto не указан, то подразумеваются все перечисленные типы протоколов. Например, 'src foo означает '(ip or arp or rarp) src foo', 'net bar' означает '(ip or arp or rarp) net bar', а 'port 53' означает '(tcp or udp) port 53'.
В добавок, существует несколько специальных примитивов - ключевых слов: gateway, broadcast, less, greater и арифметические выражения.
Более сложные фильтрующие выражения могут быть построены с помощью слов and, or и not, объединяющих примитивы. Пример, 'host foo and not port ftp and not port ftp-data'. Чтобы уменьшить количество вводимой информации, идентичные списки классификаторов могут быть опущены. Пример, 'tcp dst port ftp or ftp-data or domain' это тоже самое, что и 'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'
Перечислим некоторые из допустимых примитивов (за более полным списком в man tcpdump):
dst host host
Истина, если поле "назначение" пакета -это host, который может быть адресом или именем
src host host
Истина, если поле "источник" пакета - это host.
host host
Истина, если или поле "назначение", или поле "источник" пакета - это host. Любое из описанный выше выражений может быть приписано к ключевому слову ip, arp, rarp, или ip6, как в 'ip host host', что эквивалентно 'ether proto \ip and host host'. Если host - это имя с несколькими IP адресам, то проверяется совпадение по каждому адресу.
net net mask netmask
Истина, если IP адрес входит в сеть с указанной сетевой маской. Может быть классифицировано с dst или src.
net net/len
Истина, если IP адрес входит в сеть с указанной сетевой маской, заданной количеством бит. Может быть классифицировано с dst или src.
dst port port
Истина, если пакет протоколов ip/tcp, ip/udp, ip6/tcp или ip6/udp, и порт-назначения имеет значение указанное в port. Порт может быть числом или именем, используемым в /etc/services. Если используется число или неоднозначное имя, то проверяется только номер порта (пример, 'dst port 513' будет выводить трафик и для tcp/login и для udp/who, а 'port domain' будет выводить трафик и для tcp/domain и для udp/domain).
src port port
Истина, если пакет имеет порт-источник - port
port port
Истина, если или порт-назначение, или порт-источник в пакете - port. Любое из описанных выше выражений может быть приписано к ключевому слову tcp или udp, как в 'tcp src port port', проверяющее совпадения только для TCP-пакетов.
less length
Истина, если пакет имеет длину меньше или равную length. Это эквивалентно len <= length.
greater length
Истина, если пакет имеет длину больше или равную length. Это эквивалентно len >= length.
ip proto protocol
Истина, если пакет - это IP-пакет протокола, указанного в protocol. Протокол может быть числом или одним из имен icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp, или tcp. Заметим, что идентификаторы tcp, udp и icmp - ключевые слова и должны быть "заэкскейпены" через обратный слэш (\).
Прежде чем переходит к примерам рассмотрим, что может нам выдать tcpdump при выполнении.
Типичные результаты работы tcpdump -ttt:
1. 000107 192.168.2.13 > 192.168.2.254: icmp: 192.168.2.13 udp port 3631 unreachable
2. 000313 192.168.2.254.53 > 192.168.2.13.3656: 4 ServFail 0/0/0 (22) (DF)
3. 000287 192.168.2.254 > 192.168.2.100: icmp: net 205.188.179.233 unreachable [tos 0xc0]
4. 010956 192.168.2.254.139 > 192.168.2.13.3661: P 1:5(4) ack 73 win 5840 NBT Packet (DF)
5. 276274 192.168.2.150.3053 > 192.168.2.254.53: 7+ A? Tatyana.karavay-shops.ru. (42)
6. 001162 192.168.2.100.32772 > 192.168.2.254.16007: . ack 73 win 5840 (DF)
Первое поле - поле времени, т. к. запуск осуществлялся с ключом "-ttt", то это разница в микросекундах между этим пакетом и предыдущим.
Потом идет IP-адрес (или имя) отправителя пакета, через точку может указываться порт. После знака ">", указывается получатель пакета (или его имя) и также порт. Затем будет идти либо сразу служебная информация идущая в пакете, либо протокол (у нас это icmp). В служебной информации может быть указано либо состояние флагов в пакете, либо расшифрованная информация ("192.168.2.13 udp port 3631 unreachable" или DNS-запрос об хосте "Tatyana.karavay-shops.ru").
Ну а теперь пора взяться за конкретные примеры.
1. Ловим весь входящий трафик из локальной сети на сервер. Здесь все просто.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt dst host 192.168.2.254
Если вы запускаете его в SSH сессии, то подготовьтесь - польется очень много и очень быстро...
2. Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'dst host 192.168.2.254 and not ( src host 192.168.2.100 and dst port 22 )'
Вот теперь в потоке пакетов можно разобраться.
3. Нужна информация об DNS-общении между сервером и каким-нибудь узлом сети.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and ip proto \udp'
Здесь, кстати будет бегать не только DNS-трафик. А вообще весь, который идет по UDP. Исправить это можно следующим:
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and port 53'
4. Отлавливаем исключительно icmp пакеты.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'ip proto \icmp'
Вот. Теперь все.
Не забывайте, что более подробную информацию можно получить из man tcpdump. Там же можно прочитать об структуре пакетов основных протоколов, что позволит еще глубже исследовать Ваши сети.
вівторок, 3 березня 2009 р.
Мониторинг нагрузки Apache 2
Рассмотрим ситуацию: у вас на сервере хостится несколько сайтов работающих через mod_php под Apache 2.x. Вы обнаруживаете, что сервер начинает тормозить. Запускаете top и видите, что верхние строчки занимает процесс apache2 (или httpd). Ваша задача — узнать какой из сайтов и какими запросами грузит сервер.
Первый шаг — разрешить загрузку модуля mod_status и сконфигурировать его в /etc/apache2/mods-available/status.conf или в /etc/apache2/apache2.conf (я буду писать пути и команды применительно к Debian):
ExtendedStatus On
SetHandler server-status
Можно опционально ограничить доступ к URL /server-status по IP-адресу или даже поставить пароль.
Добавляем к любому сайту на сервере путь /server-status и смотрим, что там показывается. Если видим много запросов к какому либо сайту в состоянии «W», то можно предположить, что проблема с этим сайтом. Но это будет лишь гипотеза, так как узнать точно ситуацию по нагрузке, используя данный отчет, невозможно.
Используем хитрый ход. Установим модуль mod_perl:
apt-get install libapache2-mod-perl2 apache2-prefork-dev
Пакет apache2-prefork-dev нужен для последующей установки перловых модулей. Далее запустим cpan и установим пару модулей:
cpan> install Sys::Proctitle
cpan> install Apache2::ShowStatus
В файл /etc/apache2/mods-available/perl.conf добавим следующие строчки:
PerlModule Apache2::ShowStatus
PerlInitHandler Apache2::ShowStatus
Проставим линк на этот файл и перезагрузим Apache:
ln -s /etc/apache2/mods-available/perl.conf /etc/apache2/mods-enabled/
apache2 -t
invoke-rc.d apache2 restart
Смотрим что из этого получилось:
# ps -o user,pid,%cpu,args --sort=-%cpu -u www-data | egrep '^USER|httpd' | grep -v grep
USER PID %CPU COMMAND
www-data 14039 0.6 httpd: GET /notices_item/????? HTTP/1.0
www-data 14073 0.5 httpd: GET /notice/???????.html HTTP/1.0
www-data 14069 0.5 httpd: GET /r_9/ HTTP/1.0
www-data 14075 0.5 httpd: GET /notice/???????.html HTTP/1.0
Я заменил часть URL-ов вопросиками из соображений конфиденциальности.
Ну что же, это неплохо, теперь мы видим отсортированные по полю %CPU процессы Apache, а так же видим, какой запрос они выполняют в данный момент. Но мы не видим к какому сайту относятся эти запросы. Придеться немного подпатчить модуль Apache2::ShowStatus в файле /usr/local/share/perl/5.8.8/Apache2/ShowStatus.pm:
--- ShowStatus.pm.orig 2009-01-22 14:19:26.122058102 +0300
+++ ShowStatus.pm 2009-01-22 14:21:01.030847967 +0300
@@ -16,7 +16,7 @@
my $r=shift;
$r->pnotes( 'ProctitleObject'=>
- Sys::Proctitle->new( 'httpd: '.$r->the_request ) );
+ Sys::Proctitle->new( 'httpd: ['.$r->get_server_name().'] '.$r->the_request ) );
return Apache2::Const::DECLINED;
}
Перезагружаем Apache:
invoke-rc.d apache2 restart
Смотрим, что получилось:
# ps -o user,pid,%cpu,args --sort=-%cpu -u www-data | grep httpd | grep -v grep
www-data 16927 3.3 httpd: [www.????????.ru] GET /img_code.html HTTP/1.0
www-data 16885 3.2 httpd: [76.?????????.ru] GET /notices_item/???????/user_register/ HTTP/1.0
www-data 16921 1.0 httpd: [www.??????.ru] GET /products_item/?????? HTTP/1.0
www-data 16933 0.5 httpd: [www.????????.ru] GET /notice/????????.html HTTP/1.0
www-data 16878 0.5 httpd: [??????????.ru] GET /main_???????? HTTP/1.0
www-data 16930 0.2 httpd: [www.??????????.ru] GET /notice/??????????.html?sd=?????????????????????????????? HTTP/1.0
Ну вот, теперь мы видим и сайт, к которому пришел запрос, и сам запрос.
Кто еще какие способы использует для мониторинга нагрузки на хостинге в окружении Apache2 + mod_php5?
Первый шаг — разрешить загрузку модуля mod_status и сконфигурировать его в /etc/apache2/mods-available/status.conf или в /etc/apache2/apache2.conf (я буду писать пути и команды применительно к Debian):
ExtendedStatus On
SetHandler server-status
Можно опционально ограничить доступ к URL /server-status по IP-адресу или даже поставить пароль.
Добавляем к любому сайту на сервере путь /server-status и смотрим, что там показывается. Если видим много запросов к какому либо сайту в состоянии «W», то можно предположить, что проблема с этим сайтом. Но это будет лишь гипотеза, так как узнать точно ситуацию по нагрузке, используя данный отчет, невозможно.
Используем хитрый ход. Установим модуль mod_perl:
apt-get install libapache2-mod-perl2 apache2-prefork-dev
Пакет apache2-prefork-dev нужен для последующей установки перловых модулей. Далее запустим cpan и установим пару модулей:
cpan> install Sys::Proctitle
cpan> install Apache2::ShowStatus
В файл /etc/apache2/mods-available/perl.conf добавим следующие строчки:
PerlModule Apache2::ShowStatus
PerlInitHandler Apache2::ShowStatus
Проставим линк на этот файл и перезагрузим Apache:
ln -s /etc/apache2/mods-available/perl.conf /etc/apache2/mods-enabled/
apache2 -t
invoke-rc.d apache2 restart
Смотрим что из этого получилось:
# ps -o user,pid,%cpu,args --sort=-%cpu -u www-data | egrep '^USER|httpd' | grep -v grep
USER PID %CPU COMMAND
www-data 14039 0.6 httpd: GET /notices_item/????? HTTP/1.0
www-data 14073 0.5 httpd: GET /notice/???????.html HTTP/1.0
www-data 14069 0.5 httpd: GET /r_9/ HTTP/1.0
www-data 14075 0.5 httpd: GET /notice/???????.html HTTP/1.0
Я заменил часть URL-ов вопросиками из соображений конфиденциальности.
Ну что же, это неплохо, теперь мы видим отсортированные по полю %CPU процессы Apache, а так же видим, какой запрос они выполняют в данный момент. Но мы не видим к какому сайту относятся эти запросы. Придеться немного подпатчить модуль Apache2::ShowStatus в файле /usr/local/share/perl/5.8.8/Apache2/ShowStatus.pm:
--- ShowStatus.pm.orig 2009-01-22 14:19:26.122058102 +0300
+++ ShowStatus.pm 2009-01-22 14:21:01.030847967 +0300
@@ -16,7 +16,7 @@
my $r=shift;
$r->pnotes( 'ProctitleObject'=>
- Sys::Proctitle->new( 'httpd: '.$r->the_request ) );
+ Sys::Proctitle->new( 'httpd: ['.$r->get_server_name().'] '.$r->the_request ) );
return Apache2::Const::DECLINED;
}
Перезагружаем Apache:
invoke-rc.d apache2 restart
Смотрим, что получилось:
# ps -o user,pid,%cpu,args --sort=-%cpu -u www-data | grep httpd | grep -v grep
www-data 16927 3.3 httpd: [www.????????.ru] GET /img_code.html HTTP/1.0
www-data 16885 3.2 httpd: [76.?????????.ru] GET /notices_item/???????/user_register/ HTTP/1.0
www-data 16921 1.0 httpd: [www.??????.ru] GET /products_item/?????? HTTP/1.0
www-data 16933 0.5 httpd: [www.????????.ru] GET /notice/????????.html HTTP/1.0
www-data 16878 0.5 httpd: [??????????.ru] GET /main_???????? HTTP/1.0
www-data 16930 0.2 httpd: [www.??????????.ru] GET /notice/??????????.html?sd=?????????????????????????????? HTTP/1.0
Ну вот, теперь мы видим и сайт, к которому пришел запрос, и сам запрос.
Кто еще какие способы использует для мониторинга нагрузки на хостинге в окружении Apache2 + mod_php5?
Підписатися на:
Дописи (Atom)