ITZone

Notes about IT

Развертывание и использование WSUS сервера

Установка обновлений и патчей является очень важной составной частью обеспечения безопасности. Для всех специалистов по информационной безопасности основной необходимостью является мониторинг, анализ и устранение уязвимостей программного обеспечения. Компания Microsoft предоставляет бесплатную возможность использования сервиса обновлений своих программных продуктов в течение всего времени поддержки программного продукта. Необходимые обновления доступны через сеть интернет всем пользователям программных продуктов.

Применение обновлений к корпоративной среде требует дополнительных механизмов управления. Microsoft предлагает использовать в корпоративной среде мощный бесплатный продукт Windows Server Update Services (WSUS), который позволяет экономить трафик в сети Интернет, централизованно управлять обновлениями для серверов и рабочих станций.

В данной статье будет рассмотрен опыт установки и обслуживания WSUS в корпоративной среде, который позволит новичкам избежать ряда «подводных камней».

Установка WSUS

В рамках ОС Windows Server 2008 существует роль сервера Windows Server Update Services.

Для Windows Server 2003 следующие системные требования к установке WSUS 3.0 SP1:

  • Операционная система: Windows Server 2003 SP1 и выше.
  • Дополнительные роли сервера: IIS 6.0 и выше
  • Дополнительные обновления ОС: Microsoft .NET Framework 2.0, Microsoft Management Console 3.0.
  • Дополнительные программы: Microsoft Report Viewer, SQL Server 2005 SP1 (Служба WSUS способна установить внутреннюю службу Windows Internal Database).

Несмотря на то, что служба практически не требовательна к процессору и оперативной памяти, ей необходима изрядная доля дискового пространства. Желательно 40 Гб и более. В конечном итоге, размер занимаемого дискового пространства будет зависит от количества продуктов, которые необходимо обновлять, и количества требуемых обновлений в инфраструктуре.

Если при установке сервер не удовлетворяет системным требования, то появится окно предупреждения, в котором будет описано что необходимо установить.

Настройка сервера WSUS

Для нормальной работы сервера необходимо указать ряд параметров, которые делаются с помощью «Мастер настройки Windows Server Update Services»

В окне «Выбор вышестоящего сервера» необходимо указать пункт «Синхронизировать с Центром обновлений Майкрософт».

При применении к корпоративной среде прокси-сервера в окне «Настройка прокси-сервера» необходимо указать IP адрес, номер порта и параметры аутентификации на прокси-сервере.

В окне «Выбор языков» необходимо выбрать пункт «Загружать обновления только на следующих языках» обязательно выбрать «Английский». Выбор остальных языков необходимо делать исходя из систем, установленных в компании, обычно ещё добавляют «Русский». Нет необходимости выбирать «Загружать обновления на всех языках, включая новые», так как это увеличит количество обновлений, хранящихся на дисковом пространстве.

В окне «Выбор продуктов» необходимо указать продукты, установленные в рамках корпоративной среды. ВНИМАНИЕ! Никогда не устанавливаете все продукты, так как это может привести к увеличению размера хранимых обновлений, при этом обновления не будут использоваться. Необходимо методично и последовательно выбрать только те продукты которые используются в рамках корпоративной среды.

В окне «Выбор классов» необходимо указать только те классы которые требуют обновлений. Так как указание лишних классов в значительной степени увеличивает размер хранимых обновлений.

В окне «Настройка расписания синхронизации» необходимо выбрать время синхронизации. В рамках WSUS синхронизации не предполагает загрузку обновлений. В данном случае синхронизация будет производить только обновление информации с сервера Центра обновлений Майкрософт».

После первой синхронизации необходимо открыть консоль WSUS и выбрать «Параметры». В «Параметры» открыть пункт «Файлы и языки обновлений».

Во вкладке «Файлы обновлений» окна «Файлы и языки обновлений» необходимо указать каким образом будет осуществляться хранение файлов обновлений. Так как мы хотим уменьшить размер Интернет трафика, то необходимо выбрать «Хранить файлы обновлений локально на этом сервере» и ОБЯЗАТЕЛЬНО! выбираем пункты «загружать файлы обновлений на сервер только после одобрения обновления» и «Загружать файлы экспресс — установки». Пункт «Загружать файлы обновлений на сервер только после одобрения обновления» необходим, так как по умолчанию сервер загрузить ВСЕ обновления, которые он посчитает необходимым для выбранных продуктов. Однако так как с течением времени очень многие обновления аккумулируются в Service Pack, то вероятнее всего они не будут нужны и займут дисковое пространство.

После всех настроек необходимо добавить компьютеры в службу WSUS.

Добавление компьютеров в службу WSUS

Если у Вас есть домен, то достаточно в его групповой политике прописать службу WSUS и выбрать правила обновления компьютеров.

Это делается следующим образом «Пуск — Администрирование — Управление групповой политикой». Выбираем ту политику, которая действует в домене (по умолчанию Default Group Policy). Кликаем правой кнопкой и выбираем «Изменить».

В окне «Редактор управления групповыми политиками» заходим «Конфигурация компьютера — Политики — Административные шаблоны — Компоненты Windows — Центр обновления Windows». Выбираем пункт «Указать размещение службы обновлений в Интрасети ».

В окне «Свойства: Указать размещение службы обновлений в Интрасети» указываем параметр «Включен» и в строке «Укажите службу обновление в интрасети для поиска обновлений» прописываете строку вида: http:// [ip адрес или DNS имя сервера обновления в сети]. Копируете адрес в окно «Укажите сервер статистики в интрасети» (рис. 12). В рамках редактора групповой политики есть подсказки в окне объяснений.

Также необходимо определить политику обновлений. Это делается через пункт «Настройка автоматических обновлений».

В окне «Свойства: Настройка автоматических обновлений» указываем параметр «Включен» и параметры «Настройка автоматического обновления», «Установка по расписанию — день», «Установка по расписанию — время». В окне «Объяснение» есть описание всех параметров для серверов и желательно устанавливать параметр «2 —уведомления о загрузке и установке», что позволит администраторам выбирать время установки обновлений на сервера.

Если в рамках инфраструктуры присутствуют рабочие места которые не входят в состав домена (например мобильные рабочие места), но служба обновлений для этих рабочих мест необходима, то существует возможность указания этой службы в «Локальной политике безопасности».

В командной строке набираем gpedit.msc и проделываем те же операции, которые были описаны выше для групповой политики в домене.

Через некоторое время компьютер появится в окне «Компьютеры — Все компьютеры — Не назначенные компьютеры» при «Состояние: Любой».

Управление обновлениями

Для того чтобы увидеть и одобрить необходимые обновления нужно в «Обновления — Все обновления» выбрать следующие пункты фильтра: «Одобрение: Неодобренные» и Состояние: Требуется» и нажать «Обновить». ВНИМАНИЕ! для проверки необходимых обновлений всегда обращайте внимание, чтобы настройки фильтра стояли в положениях «Одобрение: Неодобренные» и Состояние: Требуется», иначе вы рискуете загрузить ненужные вам обновления, или не загрузить их вообще. В случае, если фильтр в настройках «Одобрение: Неодобренные» и Состояние: Требуется» показал пустое поле, то все необходимые обновления для компьютеров уже одобрены и находятся на сервере.

После одобрения на компьютере через какое-то время появятся обновления согласно правилам, настроенным в политике безопасности.

Достаточно часто существует необходимость принудительной проверки обновлений на сервере обновлений со стороны компьютера. Для этого существует программа wuauclt.exe, которая запускается через командную строку. Для проверки обновлений её необходимо запускать с ключом /detectnow (wuauclt.exe /detectnow). Для посылки отчета о состоянии (очень часто необходимо при первом подключении к серверу обновлений) необходимо запускать с ключом /reportnow (wuauclt.exe /reportnow).

 31   2017   windows   wsus

Классы IP-адресов

Таблица публичных IP-адресов

Класс Первые биты Наименьший адрес Наибольший адрес Маска подсети Число подсетей Кол-во узлов
A 0 1.0.0.0 126.0.0.0 255.0.0.0 127 16,777,214
B 10 128.0.0.0 191.255.0.0 255.255.0.0 16,384 65,534
C 110 192.0.1.0 223.255.255.0 255.255.255.0 2,079,151 254
D 1110 224.0.0.0 239.255.255.255 Multicast
E 11110 240.0.0.0 247.255.255.255 зарезервирован

Таблица зарезервированных IP-адресов для частных сетей

Класс Наименьший адрес Наибольший адрес Маска подсети Кол-во узлов
A 10.0.0.0 10.255.255.255 255.0.0.0 16,777,216
B 172.16.0.0 172.31.255.255 255.255.0.0 65,536
C 192.168.0.0 192.168.255.255 255.255.255.0 65,536

Таблица IP-адресов специального назначения

Адрес Пример Назначение
Все биты нули 0.0.0.0 Адрес текущего узла сети, например, в процессе работы DHCP до присвоения IP-адреса
Все биты единицы 255.255.255.255 Ограниченное широковещательное сообщение, адресованное всем узлам локальной сети
Все хост-биты нули 10.0.0.0 Идентификатор сети
Все хост-биты единицы 10.255.255.255 Направленное широковещательное сообщение, адресованное всем узлам другой сети
Все сетевые биты нули 0.0.0.10 Адрес конкретного узла в текущей сети
Первый квадрант 127 127.0.0.1 Адрес внутренней обратной связи узла

Расчёт количества подсетей и числа узлов в подсети

Количество подсетей = 2s (s — количество битов для подсети в маске)
Количество узлов в подсети = 2h-2 (h — количество битов в узловой части)

К примеру 2^3=8:
000
001
010
011
100
101
110
111

Использование разных формул расчёта количества подсетей

Формулу 2s-2 следует использовать в следующийх случаях:

  • Используется классовый протокол маршрутизации
  • Используется RIPv1 или IGRP в качестве протокола маршрутизации
  • На роутере (Cisco) введена команда no ip subnet zero

Формулу 2s следует использовать в следующих случаях:

  • Используется бесклассовый протокол маршрутизации
  • Используется RIPv2, EIGRP или OSPF в качестве протокола маршрутизации
  • Введена команда ip subnet zero (может не показываться в конфиге)
  • Используются маски переменной длины (VLSM)
  • Никаких дополнительных требований и ограничений нет
 22   2017   network

Делаем из nginx непробиваемый Web-сервер

Измени строку приветствия Web-сервера

Скачай исходники nginx, открой файл src/http/ngx_http_header_filter_module.c и найди следующие две строки:

static char ngx_http_server_string[] = Server: nginx CRLF;
static char ngx_http_server_full_string[] = Server:  NGINX_VER CRLF;

Замени их на что-то вроде этого:

static char ngx_http_server_string[] = Server: ][ Web Server CRLF;
static char ngx_http_server_full_string[] = Server: ][ Web Server CRLF;

Удали все неиспользуемые тобой nginx-модули

Некоторая часть модулей nginx подключается к Web-серверу прямо во время компиляции, и любой из них таит в себе потенциальную опасность. Возможно, в будущем в одном из них будет найдена уязвимость, и твой сервер окажется под угрозой. Отключив ненужные модули, ты сможешь значительно снизить риск возникновения такой ситуации.

Выполни сборку с помощью следующих команд:

# ./configure --without-http_autoindex_module --without-http_ssi_module
# make
# make install

Так ты получишь nginx с заранее отключенными (и в большинстве случаев бесполезными) модулями SSI (Server Side Includes) и Autoindex. Чтобы узнать, какие модули можно безболезненно выбросить из Web-сервера, запусти скрипт configure с флагом ’—help’.

Отключи показ версии сервера на всех ошибочных страницах

Добавь в файл nginx.conf строку server_tokens off. Это заставит nginx скрывать информацию о типе и версии Web-сервера на страницах, генерируемых в ответ на ошибочный запрос клиента.

Настрой защиту от срыва стека

Добавь в секцию server следующие строки:

# vi /etc/nginx/nginx.conf
 
# Максимальный размер буфера для хранения тела запроса клиента
client_body_buffer_size 1K;
# Максимальный размер буфера для хранения заголовков запроса клиента
client_header_buffer_size 1k;
# Максимальный размер тела запроса клиента, прописанный в поле Content-Length заголовка. Если сервер должен поддерживать загрузку файлов, это значение необходимо увеличить
client_max_body_size 1k;
# Количество и размер буферов для чтения большого заголовка запроса клиента
large_client_header_buffers 2 1k;

Обрати внимание на директиву large_client_header_buffers. По умолчанию, для хранения строки URI nginx выделяет четыре буфера, размер каждого из которых равен размеру страницы памяти (для x86 это 4 Кб). Буферы освобождаются каждый раз, когда по окончанию обработки запроса соединение переходит в состояние keep-alive. Два буфера по 1 Кб могут хранить URI длиной только 2 Кб, что позволяет бороться с ботами и DoS-атаками.

Для повышения производительности добавь следующие строки:

# vi /etc/nginx/nginx.conf
 
# Таймаут при чтении тела запроса клиента
client_body_timeout 10;
# Таймаут при чтении заголовка запроса клиента
client_header_timeout 10;
# Таймаут, по истечению которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 5 5;
# Таймаут при передаче ответа клиенту
send_timeout 10;

Контролируй количество одновременных соединений

Для защиты Web-сервера от перегрузки и попыток осуществить DoS-атаку добавь в конфиг следующие строки:

# vi /etc/nginx/nginx.conf
 
# Описываем зону (slimits), в которой будут храниться состояния сессий. Зона размером 1 Мб может хранить около 32000 состояний, мы устанавливаем ее размер равным 5 Мб
limit_zone slimits $binary_remote_addr 5m;
# Задаем максимальное количество одновременных соединений для одной сессии. По сути, это число задает максимальное количество соединений с одного IP
limit_conn slimits 5;

Первая директива должна находиться в секции HTTP, вторая — в секции location. Когда количество соединений выйдет за пределы лимитов, клиент получит сообщение «Service unavailable» с кодом 503.

Разреши коннекты только к своему домену

Взломщики могут использовать ботов для сканирования подсетей и поиска уязвимых Web-серверов. Обычно боты просто перебирают диапазоны IP-адресов в поисках открытых 80 портов и посылают запрос HEAD для получения информации о веб-сервере (или главной странице). Ты можешь легко предотвратить такой скан, запретив обращение к серверу по IP-адресу (добавить в подсекцию location):

# vi /etc/nginx/nginx.conf
 
if ($host !~ ^(host.com|www.host.com)$ ) {return 444;}

Ограничь количество доступных методов обращения к Web-серверу

Некоторые боты используют различные методы обращения к серверу для попытки определения его типа и/или проникновения, однако в документе RFC 2616 четко сказано, что Web-сервер не обязан реализовывать их все, и неподдерживаемые методы могут просто не обрабатываться. Сегодня используемыми остаются только методы GET (запрос документа), HEAD (запрос заголовков сервера) и POST (запрос на публикацию документа), поэтому все остальные можно безболезненно отключить с помощью помещения следующих строк в секцию server конфигурационного файла:

# vi /etc/nginx/nginx.conf
 
if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}

Отшивай ботов

Другой способ блокирования ботов, сканеров и прочей нечисти основан на определении типа клиента (user-agent). Он не слишком эффективен, потому как большинство ботов косят под вполне легитимные браузеры, но в ряде случаев остается полезным:

# vi /etc/nginx/nginx.conf
 
# Блокируем менеджеры загрузки
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {return 403;}
# Блокируем некоторые типы ботов
if ($http_user_agent ~* msnbot|scrapbot) {return 403;}

Блокируй Referrer-спам

Если твой сайт публикует Web-логи в общедоступном виде, ты легко можешь стать жертвой Referrer-спама (когда спам-боты обращаются к твоему серверу, указывая в заголовке referrer — адрес рекламируемого сайта). Такой вид спама может легко испортить SEO-рейтинги интернет-страницы, поэтому его необходимо блокировать в обязательном порядке. Один из способов сделать это — занести наиболее частые слова, встречающиеся в адресах рекламируемых сайтов, в черный список.

# vi /etc/nginx/nginx.conf
 
# Секция serverif ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{return 403;}

Блокируй хотлинк

Хотлинк — это включение в страницу изображения (или иного контента) с другого сайта. По сути, это воровство, потому как изображение, на которое ты потратил не один час своего свободного времени, не только свободно используется другими, но и создает нагрузку на твой Web-сервер, не приводя на него посетителей. Для борьбы с хотлинками достаточно сделать так, чтобы изображения отдавались клиенту только в том случае, если он запросил их, уже находясь на сайте (другими словами, заголовок referrer-запроса должен содержать имя твоего сайта). Добавь в секцию server конфигурационного файла nginx.conf следующие строки (host.com — это адрес твоего сайта):

# vi /etc/nginx/nginx.conf
 
location /images/ {
valid_referers none blocked www.host.comhost.com;
if ($invalid_referer) {return 403;}
}

В качестве альтернативы ты можешь настроить сервер на отдачу специального баннера с сообщением о воровстве вместо запрашиваемого изображения. Для этого замени строку «return 403» на строку:

rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.host.com/banned.jpg last

Защищай важные каталоги от посторонних

Как и любой другой Web-сервер, nginx позволяет регулировать доступ к каталогам на основе IP-адресов и паролей. Эту возможность можно использовать для закрытия некоторых частей сайта от посторонних глаз. Например, для отрезания URI от внешнего мира:

# vi /etc/nginx/nginx.conf
 
location /uploads/ {
# Разрешаем доступ только машинам локальной сети
allow 192.168.1.0/24;
# Отшиваем всех остальных
deny all;
}

Теперь к документам каталога uploads будут иметь доступ только пользователи локальной сети. Для установки пароля придется проделать более сложные действия. Сначала необходимо создать приватный для nginx-файл паролей и добавить в него необходимых пользователей (в качестве примера добавим пользователя admin):

# mkdir /etc/nginx/.htpasswd# htpasswd -c /etc/nginx/.htpasswd/passwd admin

Далее открой файл nginx.conf и впиши в него следующие строки:

# vi /etc/nginx/nginx.conf
 
location /admin/ {auth_basic Restricted;auth_basic_user_file /etc/nginx/.htpasswd/passwd;}

Новых пользователей можно добавить с помощью следующей команды:

# htpasswd -s /etc/nginx/.htpasswd/passwd пользователь

Используй SSL

Если твой сайт работает с приватными данными пользователей, такими как номера кредитных карт, пароли от других сервисов, или же предоставляет доступ к другой важной информации, которая может стать лакомым кусочком для третьих лиц, позаботься о шифровании. Nginx хорошо работает с SSL, и этой возможностью нельзя пренебрегать.

Для настройки SSL-шифрования средствами nginx достаточно выполнить несколько простых шагов. Сначала ты должен создать сертификат с помощью следующей последовательности команд:

# cd /etc/nginx
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Затем описать сертификат в конфигурационном файле nginx:

# vi /etc/nginx/nginx.conf
 
server {server_name host.com;listen 443;ssl on;ssl_certificate /etc/nginx/server.crt;ssl_certificate_key /etc/nginx/server.key;access_log /etc/nginx/logs/ssl.access.log;error_log /etc/nginx/logs/ssl.error.log;
}

После этого можно перезагрузить Web-сервер:

# /etc/init.d/nginx reload

Естественно, без поддержки со стороны самого Web-сайта это делать бессмысленно.

Установи правильные значения системных переменных

Открой файл /etc/sysctl.conf и помести в него следующие строки:

# vi /etc/sysctl.conf
 
# Защита от smurf-атак
net.ipv4.icmp_echo_ignore_broadcasts = 1# Защита от неправильных ICMP-сообщений
net.ipv4.icmp_ignore_bogus_error_responses = 1# Защита от SYN-флуда
net.ipv4.tcp_syncookies = 1# Запрещаем маршрутизацию от источника
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0# Защита от спуфинга
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1# Мы не маршрутизатор
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0# Включаем ExecShield
kernel.exec-shield = 1
kernel.randomize_va_space = 1# Расширяем диапазон доступных портов
net.ipv4.ip_local_port_range = 2000 65000# Увеличиваем максимальный размер TCP-буферов
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

Размести корневой каталог Web-сервера на выделенном разделе

Поместив корневой каталог Web-сервера в выделенный раздел и запретив на нем размещение любых исполняемых файлов и файлов-устройств, ты обезопасишь остальную часть системы от тех, кто сможет получить доступ к корню Web-сервера. При этом запись в файле /etc/fstab должна иметь примерно такой вид:

/dev/sda5 /nginx ext4 defaults,nosuid,noexec,nodev 1 2

Помести nginx в chroot/jail-окружение

Любая современная *nix-система позволяет запереть приложение в изолированной среде исполнения. В Linux для этого можно использовать технологии KVM, Xen, OpenVZ и VServer, во FreeBSD — Jail, в Solaris — Zones. Если ни одна из этих технологий не доступна, ты можешь поместить nginx в классический chroot, который хоть и намного более хрупок, но большинство взломщиков остановить сможет.

Установи правила SELinux для защиты nginx

Хорошей альтернативой изолированным средам исполнения являются локальные системы обнаружения и предотвращения вторжений, такие как SELinux или AppArmor. Будучи правильно настроенными, они смогут предотвратить попытки взлома Web-сервера. По дефолту ни одна из них не настроена для работы в связке с nginx, однако в рамках проекта SELinuxNginx (http://sf.net/projects/selinuxnginx/) были созданы правила для SELinux, которые может использовать любой желающий. Остается только скачать и установить:

# tar -zxvf se-ngix_1_0_10.tar.gz
# cd se-ngix_1_0_10/nginx
# make
# /usr/sbin/semodule -i nginx.pp

Настрой брандмауэр

Обычно nginx устанавливают на выделенных машинах, готовых к высокой нагрузке, поэтому зачастую он остается единственным сетевым сервисом, работающим на сервере. Чтобы обезопасить сервер, достаточно создать совсем небольшой набор правил, которые будут открывать 80, 110 и 143-й порты (если, конечно, nginx должен работать еще и как IMAP/POP3-прокси) и закрывать от внешнего мира все остальное.

Ограничь количество соединений с помощью брандмауэра

Для не слишком нагруженного Web-сайта хорошей идеей будет ограничить количество попыток соединений с одного IP-адреса в минуту. Это сможет уберечь тебя от некоторых типов DoS-атак и брутфорса. В Linux это можно сделать с помощью стандартного iptables/netfilter-модуля state:

# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m state --state NEW -m recent --set# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m state --state NEW -m recent --update \
--seconds 60 --hitcount 15 -j DROP

Правила урезают лимит на количество подключений с одного IP в минуту до 15. То же можно сделать и с помощью pf:

# vi /etc/pf.conf
 
webserver_ip=1.1.1.1
table <abuse> persist
block in quick from <abuse>
pass in on $ext_if proto tcp to $webserver_ip \
port www flags S/SA keep state \
(max-src-conn 100, max-src-conn-rate 15/60, \
overload <abusive_ips> flush)

Кроме лимита на количество последовательных подключений (15 в минуту), данное правило устанавливает дополнительный лимит на количество одновременных подключений равный 100.

Настрой PHP

Если ты используешь nginx в связке с PHP, не забудь настроить и его. Вот как должен выглядеть конфигурационный файл /etc/php/php.ini защищенного сервера:

# vi /etc/php/php.ini
 
# Отключаем опасные функции
disable_functions = phpinfo, system, mail, exec
# Максимальное время исполнения скрипта
max_execution_time = 30
# Максимальное время, которое может потратить скрипт на обработку данных запроса
max_input_time = 60
# Максимальное количество памяти, выделяемое каждому скрипту
memory_limit = 8M
# Максимальный размер данных, отсылаемых скрипту с помощью метода POST
post_max_size = 8M
# Максимальный размер загружаемых файлов
upload_max_filesize = 2M
# Не показывать ошибки PHP-скриптов пользователям
display_errors = Off
# Включаем Safe Mode
safe_mode = On
# Включаем SQL Safe Mode
sql.safe_mode = On
# Позволяем выполнять внешние команды только в этом каталоге
safe_mode_exec_dir = /путь/к/защищенному/каталогу
# Защищаемся от утечки информации о PHP
expose_php = Off
# Ведем логи
log_errors = On
# Запрещаем открытие удаленных файлов
allow_url_fopen = Off
 21   2017   nginx   web

Настройка VLAN на коммутаторах D-Link

Данные принципы создания и настройки vlan, подходят почти ко всем моделям коммутаторов D-link.
Схема сети:

Оборудование:

  1. Управляемый коммутатор 3 уровня DGS-3612G, выступающий в роли шлюзов для подсетей:
  • 172.20.0.0/24 с интерфейсом 172.20.0.1/24 в vlan 2001 — подсеть для управления коммутаторами;
  • 10.0.0.0/24 с интерфейсом 10.0.0.1/24 в vlan 1001— подсеть абонентов;
  1. Коммутатор L2 DES-3526 c IP 172.20.0.2/24 вынесенный в управляющий vlan valn2001 ( management vlan vlan2001)
  2. Коммутатор L2 DES-3028 c IP 172.20.0.3/24 вынесенный в управляющий vlan valn2001 ( management vlan vlan2001)

Приступим к настройке DGS-3612G
По умолчанию на коммутаторе default vlan (1 vlan), он нам не нужен, убираем его

DGS-3612G:5# config vlan default delete 1-12

Теперь создадим абонентский vlan (vlan1001) и управляющий vlan для коммутаторов (vlan2001)

DGS-3612G:5# create vlan vlan1001 tag 1001
DGS-3612G:5# create vlan vlan2001 tag 2001

Теперь присвоим 1 и 2 порту созданные нами vlan

DGS-3612G:5# config vlan vlan1001 add tagged 1-2
DGS-3612G:5# config vlan vlan2001 add tagged 1-2

Перейдем к настройке интерфейсов, по умолчанию на коммутаторах создан IP 10.90.90.90/8, он нам не нужен, создадим свои, но для начала отключим этот

DGS-3612G:5# config ipif System ipaddress 10.90.90.90/30 vlan default state disable

Создаем интерфейс с ip — 10.0.0.1/24, служащий шлюзом для абонентов.

DGS-3612G:5# create ipif if1001 10.0.0.1/24 vlan1001 state enable

В данном случае if1001 — имя интерфейса, оно может быть любым, правда с ограничением в 12 символов; 10.0.0.1/24 vlan1001 — ip адрес, принадлежащий vlan vlan1001.
Создадим интерфейс с ip — 172.20.0.1/24, служащий шлюзом для коммутаторов.

DGS-3612G:5# create ipif if2001 172.20.0.1/24 vlan2001 state enable

На этом настройка DGS-3612 закончена, переходим к настройки DES-3526.
Удаляем default vlan с портов

DES-3526:admin# config vlan default delete 1-26

Cоздаем абонентский vlan vlan1001

DES-3526:admin# create vlan vlan1001 tag 1001
DES-3526:admin# config vlan vlan1001 add untagged 1-24
DES-3526:admin# config vlan vlan1001 add tagged 25-26

Создание vlan можно описать чуть иначе, но в этом случае вы не задаете имя vlan, оно будет назначаться с соответствии с vlanid и будет выглядеть следующим образом VLAN1001 (VLAN в верхнем регистре)

DES-3526:admin# create vlan vlanid 1001
DES-3526:admin# config vlan vlanid 1001 add untagged 1-24
DES-3526:admin# config vlan vlanid 1001 add tagged 25-26

Теперь создаем management vlan (управляющий vlan)

DES-3526:admin# create vlan management tag 2001
DES-3526:admin# config vlan management add tagged 25-26

Создаем интерфейс и прописываем маршрут по умолчанию

DES-3526:admin# config ipif System vlan vlan2001 ipaddress 172.2.0.2/24 state enable
DES-3526:admin# create iproute default 172.20.0.1

Теперь по аналогии настраиваем DES-3028
Удаляем default vlan с портов

DES-3028:admin# config vlan default delete 1-28

Cоздаем абонентский vlan vlan1001

DES-3028:admin# create vlan vlan1001 tag 1001
DES-3028:admin# config vlan vlan1001 add untagged 1-24
DES-3028:admin# config vlan vlan1001 add tagged 25-28

Создание vlan можно описать чуть иначе, но в этом случае вы не задаете имя vlan, оно будет назначаться с соответствии с vlanid и будет выглядеть следующим образом VLAN1001 (VLAN в верхнем регистре)

DES-3028:admin# create vlan vlanid 1001
DES-3028:admin# config vlan vlanid 1001 add untagged 1-24
DES-3028:admin# config vlan vlanid 1001 add tagged 25-28

Теперь создаем management vlan (управляющий vlan)

DES-3028:admin#create vlan management tag 2001
DES-3028:admin#config vlan management add tagged 25-28

Создаем интерфейс и прописываем маршрут по умолчанию

DES-3028:admin#config ipif System vlan vlan2001 ipaddress 172.2.0.3/24 state enable
DES-3028:create iproute default 172.20.0.1

Вот и все, осталось прописать на абонентских станциях ip адреса из подсети 10.0.0.0/24 и шлюз 10.0.0.1. Настройка закончена.

 12   2017   network

Установка обновления на ESXi

Между мажорными версиями проходит много времени, а заплатки выпускаются регулярно. Отслеживать свежие патчи можно на VMware ESXi Patch Tracker. Например, для текущей версии ESXi 6.5a есть патчи ESXi-6.5.0-20170304001-standard (Build 5146846). Установка происходит из консоли:

esxcli network firewall ruleset set -e true -r httpClient
esxcli software profile update -p ESXi-6.5.0-20170304001-standard -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
esxcli network firewall ruleset set -e false -r httpClient

После успешной установке необходимо перезагрузить хост. Подробнее можно прочитать в документации.

 7   2017   esxi

Перепрошивка Zalman ZM-VE200SE в iodd-2511 и обратно

Если вы хотите прошить свой Zalman прошивкой от iodd:

  • Качаем последнюю прошивку от iodd. В зависимости от формата файловой системы вашего диска, она будет называться _iso_firm_iodd2501_exFAT-newer.zip или _iso_firm_iodd2501_NTFS-newer.zip
  • Распаковываем архив.
  • Перетаскиваем полученный ISO-файл в окно HEX-редактора, находим третий по счету байт (выделен на изображении), меняем его с 01 на 02.
  • Сохраняем файл и прошиваем обычным способом.

Возврат на «родную» прошивку (чтобы не придрались в гарантийном отделе):

  • В прошивке от Zalman меняем третий байт с 02 на 01 и прошиваем.
  • После этого снова прошиваем теперь уже оригинальной нетронутой залмановской прошивкой.
 8   2017   firmware

Коды ошибок Zalman ZM-VE200SE

Error 15 — на диске обнаружены повреждённые сектора.
Error 23 — повреждена файловая система, необходимо запустить проверку диска.
1st Partition : 0 > Partition is not set — диск не разбит на разделы или же файловая система первого раздела не совпадает с типом прошивки.
1st Partition : 5 > ZM-VE200 Hard Disk have extended partition — жёсткий диск содержит расширенный раздел. Отформатируйте его согласно типу прошивки.
1st Partition : 6 > ZM-VE200 Hard Disk is formatted as FAT — раздел отформатирован в FAT (не в FAT32). Отформатируйте его согласно типу прошивки.
1st Partition : 7 > ZM-VE200 Hard disk is formatted as NTFS — прошивка FAT не поддерживает NTFS. Отформатируйте раздел в FAT32 или exFAT.
1st Partition : C > ZM-VE200 Hard Disk is formatted as FAT32 — прошивка NTFS не поддерживает FAT32. Отформатируйте раздел в NTFS.
1st Partition : F > Extended partition — логические и расширенные разделы не поддерживаются, создайте раздел, как основной.
1st Partition : FF > ZM-VE200 Hard Disk is formatted as exFAT — эта прошивка не поддерживает exFAT. Отформатируйте раздел в NTFS.
1st Partition: EE : MBR area is existed after EFI header — создайте новый и удалите старый раздел в «Управлении дисками». Если не помогло, попробуйте выполнить инициализацию. Это займёт какое-то время, наберитесь терпения.
NO _ISO — не найдена папка _ISO или _iso на первом разделе.
NO — DISC — в папке _ISO не найдены файлы с допустимыми расширениями (ISO, IMA, DSK, RMD).
TOO Many FILES — в корне папки _ISO (и в любой другой папке, которая находится внутри _ISO) может содержаться не более 32 объектов (файлов + папок).
ALREADY HIT — данный файл уже был выбран для эмуляции, загружен и эмулируется.
vDISK LIMIT — бокс может одновременно эмулировать не более 4 виртуальных дискет.
DEFRAG!! — скорее всего, раздел отформатирован в NTFS и файл образа, который вы пытаетесь эмулировать, фрагментирован. Необходимо дефрагментировать раздел или, как минимум, этот файл образа. Если дефрагментация не помогает, то скорее всего это так называемый sparse-файл. Такой файл может получиться, например, в результате загрузки торрента. Копирование и удаление оригинала (не перемещение!) этого файла должно решить проблему.
Если сообщение вида 1st Partition : XX не соответствует указанным выше, то оно может указывать на тип неподдерживаемого раздела:
00 Empty
01 DOS 12-bit FAT
02 XENIX root
03 XENIX /usr
04 DOS 3.0+ 16-bit FAT (up to 32M)
05 DOS 3.3+ Extended Partition
06 DOS 3.31+ 16-bit FAT (over 32M)
07 OS/2 IFS (e. g., HPFS)
07 Windows NT NTFS
07 exFAT
07 Advanced Unix
07 QNX2.x pre-1988 (see below under IDs 4d-4f)
08 OS/2 (v1.0-1.3 only)
08 AIX boot partition
08 SplitDrive
08 Commodore DOS
08 DELL partition spanning multiple drives
08 QNX 1.x and 2.x («qny»)
09 AIX data partition
09 Coherent filesystem
09 QNX 1.x and 2.x («qnz»)
0a Coherent swap partition
0a OPUS
0b WIN95 OSR2 FAT32
0c WIN95 OSR2 FAT32, LBA-mapped
0e WIN95: DOS 16-bit FAT, LBA-mapped
0f WIN95: Extended partition, LBA-mapped
10 OPUS (?)
11 Hidden DOS 12-bit FAT
11 Leading Edge DOS 3.x logically sectored FAT
12 Configuration/diagnostics partition
14 Hidden DOS 16-bit FAT =32M
17 Hidden IFS (e. g., HPFS)
18 AST SmartSleep Partition
19 Unused
1b Hidden WIN95 OSR2 FAT32
1c Hidden WIN95 OSR2 FAT32, LBA-mapped
1e Hidden WIN95 16-bit FAT, LBA-mapped
20 Unused
21 Reserved
21 Unused
22 Unused
23 Reserved
24 NEC DOS 3.x
26 Reserved
27 PQservice
27 Windows RE hidden partition
27 MirOS partition
27 RouterBOOT kernel partition
2a AtheOS File System (AFS)
2b SyllableSecure (SylStor)
31 Reserved
32 NOS
33 Reserved
34 Reserved
35 JFS on OS/2 or eCS
36 Reserved
38 THEOS ver 3.2 2gb partition
39 Plan 9 partition
39 THEOS ver 4 spanned partition
3a THEOS ver 4 4gb partition
3b THEOS ver 4 extended partition
3c PartitionMagic recovery partition
3d Hidden NetWare
40 Venix 80286
40 PICK
41 Linux/MINIX (sharing disk with DRDOS)
41 Personal RISC Boot
41 PPC PReP (Power PC Reference Platform) Boot
42 Linux swap (sharing disk with DRDOS)
42 SFS (Secure Filesystem)
42 Windows 2000 dynamic extended partition marker
43 Linux native (sharing disk with DRDOS)
44 GoBack partition
45 Boot-US boot manager
45 Priam
45 EUMEL/Elan
46 EUMEL/Elan
47 EUMEL/Elan
48 EUMEL/Elan
4a Mark Aitchison’s ALFS/THIN lightweight filesystem for DOS
4a AdaOS Aquila (Withdrawn)
4c Oberon partition
4d QNX4.x
4e QNX4.x 2nd part
4f QNX4.x 3rd part
4f Oberon partition
50 OnTrack Disk Manager (older versions) RO
50 Lynx RTOS
50 Native Oberon (alt)
51 OnTrack Disk Manager RW (DM6 Aux1)
51 Novell
52 CP/M
52 Microport SysV/AT
53 Disk Manager 6.0 Aux3
54 Disk Manager 6.0 Dynamic Drive Overlay (DDO)
55 EZ-Drive
56 Golden Bow VFeature Partitioned Volume.
56 DM converted to EZ-BIOS
56 AT&T MS-DOS 3.x logically sectored FAT.
57 DrivePro
57 VNDI Partition
5c Priam EDisk
61 SpeedStor
63 Unix System V (SCO, ISC Unix, UnixWare, ...), Mach, GNU Hurd
64 PC-ARMOUR protected partition
64 Novell Netware 286, 2.xx
65 Novell Netware 386, 3.xx or 4.xx
66 Novell Netware SMS Partition
67 Novell
68 Novell
69 Novell Netware 5+, Novell Netware NSS Partition
6e ??
70 DiskSecure Multi-Boot
71 Reserved
72 V7/x86
73 Reserved
74 Reserved
74 Scramdisk partition
75 IBM PC/IX
76 Reserved
77 M2FS/M2CS partition
77 VNDI Partition
78 XOSL FS
7e Unused
7f Unused
80 MINIX until 1.4a
81 MINIX since 1.4b, early Linux
81 Mitac disk manager
82 Prime
82 Solaris x86
82 Linux swap
83 Linux native partition
84 OS/2 hidden C: drive
84 Hibernation partition
85 Linux extended partition
86 Old Linux RAID partition superblock
86 FAT16 volume set
87 NTFS volume set
88 Linux plaintext partition table
8a Linux Kernel Partition (used by AiR-BOOT)
8b Legacy Fault Tolerant FAT32 volume
8c Legacy Fault Tolerant FAT32 volume using BIOS extd INT 13h
8d Free FDISK 0.96+ hidden Primary DOS FAT12 partition
8e Linux Logical Volume Manager partition
90 Free FDISK 0.96+ hidden Primary DOS FAT16 partition
91 Free FDISK 0.96+ hidden DOS extended partition
92 Free FDISK 0.96+ hidden Primary DOS large FAT16 partition
93 Hidden Linux native partition
93 Amoeba
94 Amoeba bad block table
95 MIT EXOPC native partitions
96 CHRP ISO-9660 filesystem
97 Free FDISK 0.96+ hidden Primary DOS FAT32 partition
98 Free FDISK 0.96+ hidden Primary DOS FAT32 partition (LBA)
98 Datalight ROM-DOS Super-Boot Partition
99 DCE376 logical drive
9a Free FDISK 0.96+ hidden Primary DOS FAT16 partition (LBA)
9b Free FDISK 0.96+ hidden DOS extended partition (LBA)
9e ForthOS partition
9f BSD/OS
a0 Laptop hibernation partition
a1 Laptop hibernation partition
a1 HP Volume Expansion (SpeedStor variant)
a3 HP Volume Expansion (SpeedStor variant)
a4 HP Volume Expansion (SpeedStor variant)
a5 BSD/386, 386BSD, NetBSD, FreeBSD
a6 OpenBSD
a6 HP Volume Expansion (SpeedStor variant)
a7 NeXTStep
a8 Mac OS-X
a9 NetBSD
ab Mac OS-X Boot partition
ab GO! partition
ae ShagOS filesystem
af ShagOS swap partition
af MacOS X HFS
b0 BootStar Dummy
b1 HP Volume Expansion (SpeedStor variant)
b1 QNX Neutrino Power-Safe filesystem
b2 QNX Neutrino Power-Safe filesystem
b3 HP Volume Expansion (SpeedStor variant)
b3 QNX Neutrino Power-Safe filesystem
b4 HP Volume Expansion (SpeedStor variant)
b6 HP Volume Expansion (SpeedStor variant)
b6 Corrupted Windows NT mirror set (master), FAT16 file system
b7 Corrupted Windows NT mirror set (master), NTFS file system
b7 BSDI BSD/386 filesystem
b8 BSDI BSD/386 swap partition
bb Boot Wizard hidden
bc Acronis backup partition
be Solaris 8 boot partition
bf New Solaris x86 partition
c0 CTOS
c0 REAL/32 secure small partition
c0 NTFT Partition
c0 DR-DOS/Novell DOS secured partition
c1 DRDOS/secured (FAT-12)
c2 Unused
c2 Hidden Linux
c3 Hidden Linux swap
c4 DRDOS/secured (FAT-16, < 32M) c5 DRDOS/secured (extended) c6 DRDOS/secured (FAT-16, >= 32M)
c6 Windows NT corrupted FAT16 volume/stripe set
c7 Windows NT corrupted NTFS volume/stripe set
c7 Syrinx boot
c8 Reserved for DR-DOS 8.0+
c9 Reserved for DR-DOS 8.0+
ca Reserved for DR-DOS 8.0+
cb DR-DOS 7.04+ secured FAT32 (CHS)
cc DR-DOS 7.04+ secured FAT32 (LBA)
cd CTOS Memdump
ce DR-DOS 7.04+ FAT16X (LBA)
cf DR-DOS 7.04+ secured EXT DOS (LBA)
d0 REAL/32 secure big partition
d0 Multiuser DOS secured partition
d1 Old Multiuser DOS secured FAT12
d4 Old Multiuser DOS secured FAT16 =32M
d8 CP/M-86
da Non-FS Data
da Powercopy Backup
db Digital Research CP/M, Concurrent CP/M, Concurrent DOS
db CTOS (Convergent Technologies OS -Unisys)
db KDG Telemetry SCPU boot
dd Hidden CTOS Memdump
de Dell PowerEdge Server utilities (FAT fs)
df DG/UX virtual disk manager partition
df BootIt EMBRM
e0 Reserved by STMicroelectronics for a filesystem called ST AVFS.
e1 DOS access or SpeedStor 12-bit FAT extended partition
e3 DOS R/O or SpeedStor
e4 SpeedStor 16-bit FAT extended partition < 1024 cyl. e5 Tandy MSDOS with logically sectored FAT e6 Storage Dimensions SpeedStor e8 LUKS eb BeOS BFS ec SkyOS SkyFS ee Indication that this legacy MBR is followed by an EFI header ef Partition that contains an EFI file system f0 Linux/PA-RISC boot loader f1 Storage Dimensions SpeedStor f2 DOS 3.3+ secondary partition f3 Reserved f4 SpeedStor large partition f4 Prologue single-volume partition f5 Prologue multi-volume partition f6 Storage Dimensions SpeedStor f7 DDRdrive Solid State File System f9 pCache fa Bochs fb VMware File System partition fc VMware Swap partition fe SpeedStor > 1024 cyl.
fe LANstep
fe IBM PS/2 IML (Initial Microcode Load) partition, located at the end of the disk
fe Windows NT Disk Administrator hidden partition
ff Xenix Bad Block Table

 15   2017   firmware

DataTables и русские символы

в ssp.class.php после catch (PDOException $e) { ... } добавить

$db->exec(set names utf8);
    return $db;

Должно получиться так:

static function sql_connect ( $sql_details )
  {
    try {
      $db = @new PDO(
        mysql:host={$sql_details['host']};dbname={$sql_details['db']},
        $sql_details['user'],
        $sql_details['pass'],
        array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )
      );
    }
    catch (PDOException $e) {
      self::fatal(
        An error occurred while connecting to the database. .
        The error reported by the server was: .$e->getMessage()
      );
    }
  $db->exec(set names utf8);
    return $db;
  }
</code<
 14   2017   php   sql

Перемещение пользовательских баз данных

SQL Server позволяет переносить в новое место файлы данных, журнала и полнотекстового каталога пользовательской базы данных. Новое место указывается при помощи предложения FILENAME инструкции ALTER DATABASE. Этот метод подходит для перемещения файлов базы данных в пределах одного экземпляра SQL Server. Для переноса базы данных на другой экземпляр SQL Server или другой сервер применяются операции резервного копирования и восстановления или отключения и подключения.

Статья целиком на microsoft.com«>Статья целиком на microsoft.com

 8   2017   sql   windows

Repeater Bridge на DD-WRT

Необходим был интернет в удалении от кабеля, а в наличии wifi-карточки нет и покупать не хотелось. Хорошо, что у меня лежит неиспользуемый D-Link Dir-615 ревизии E4 на котором вместо оригинальной прошивки залита прошивка DD-WRT.

Недолго гугля нашел решение на официальной вики DD-WRT.
В моем случае в роли первого/первичного роутера выступает Apple AirPort Express, а вторым — D-Link DIR-615.

Для создания моста между двумя роутерами первый должен быть в режиме AP с включенным DHCP. Второй роутер должен работать на прошивке DD-WRT для настройки Repeater Bridge.

Вся работа ведется на втором роутере

  1. Сбрасываем в заводские настройки.
  2. Выставляем на компьютере статический IP адрес, например, 192.168.1.10.
  3. Либо подключаем патч-кордом, либо подключаемся к wifi сети с SSID dd-wrt.
  4. Открываем в браузере адрес http://192.168.1.1 Новые версии DD-WRT требуют установить пароль перед тем как продолжить.
  5. Открываем вкладку Wireless -> Basic Settings:
    В блоке Physical Interface:
  • Wireless Mode: Repeater Bridge;
  • Wireless Network Mode: Must Match Primary Router;
  • Wireless Network Name(SSID): Такой же как и на первом роутере;
  • Wireless Channel: Такой же как и на первом роутере;
  • Wireless SSID Broadcast: Enable;
  • Network Configuration: Bridged;
  • Жмем Save.
    В блоке Virtual Interfaces:
  • Add — Wireless Network Name(SSID): отличный от первого;
  • Wireless SSID Broadcast: Enable;
  • AP Isolation: Disable;
  • Network Configuration: Bridge;
  • Жмем Save.
  1. Открываем вкладку Wireless -> Wireless Security:
    В блоке Physical Interface:
  • Security Mode: Must Match Primary Router and DD-wrt only works reliably with WEP or WPA2-AES;
  • WPA Algorithms: Must Match Primary Router;
  • WPA Shared Key: Must Match Primary Router;
  • Key Renewal Interval (in seconds): Leave default.
    В блоке Virtual Interfaces (если вы не видите эту секцию — обновите DD-WRT):
  • Security Mode: Must Match Physical Interface;
  • WPA Algorithms: Must Match Physical Interface;
  • WPA Shared Key: Must Match Physical Interface;
  • Key Renewal Interval (in seconds): Leave default;
  • Жмем Save.
    dd-wrt-01-1.png
  1. Открываем вкладку Setup -> Basic Setup:
  • Connection Type will be: Disabled;
  • Выставите STP в Disabled (Enabled иногда может быть причиной проблем);
  • IP Address: 10.0.1.50 (первичный роутер имеет IP-адрес 10.0.1.1);
  • Mask: 255.255.255.0 Gateway: 10.0.1.1 (первичный роутер имеет IP-адрес 10.0.1.1);
  • DHCP Server: Disable Local DNS: 10.0.1.1 (IP-адрес первичного роутера 10.0.1.1);
  • Assign WAN Port to Switch: enable (позволяет использовать WAN порт как обычный LAN порт);
  • Жмем Save.
  1. Авторизовываемся на новом IP-адресе http://10.0.1.50 (не забыв сменить адрес на компьютере!).
  2. Открываем вкладку Setup -> Advanced Routing:
  • Выставить Operating mode в Router;
  • Жмем Save.
  1. Открываем Services:
  • Отключаем Dnsmasq;
  • Жмем Save.
  1. Открываем вкладку Security -> Firewall:
  • Снимаем все галочки кроме Filter Multicast;
  • Отключаем SPI firewall;
  • Жмем APPLY Settings.
  1. Перезагружаем роутер.
  2. Как только авторизовываемся на роутере ищем на вкладку Security и устанавливаем тот же тип безопасности и пароль от SSID, что и на первом роутере. Не рекомендуется устанавливать WPA2 Personal MIXED, т. к. этот режим может вызывать проблемы и лучше выставить WPA2 Personal.
  3. Верните сетевые настройки на своем компьютере — динамический IP и динамический DNS.
 18   2016   network
Ранее Ctrl + ↓