Иногда возникает ситуация, когда надо починить сервер на Linux, а под рукой только планшет или ноутбук без порта Ethernet. В этом случае достучаться до консоли сервера можно с помощью Mikrotik Woobm-USB. Конечно, перед этим сервер надо будет настроить.
Mikrotik Woobm-USB — это точка доступа с последовательным интерфейсом для управления роутерами mikrotik с различных устройств без Ethernet-адаптеров. Если этот USB-гаджет подключить к компьютеру под управлением Linux, то оно определится как «Prolific Technology, Inc. PL2303 Serial Port», собственно, на его плате именно эта микросхема и стоит.
При подключении подгружаются драйверы (модули ядра) pl2303 и usbserial, а в списке устройств появляется устройство /dev/ttyUSBXX, если это единственное устройство USB to UART, то ХХ=0. На этом устройстве можно инициализировать консоль.
Пример для Ubuntu Server 14.04.
1. Вставим Woobm-USB в любой порт USB, загорится зеленая и начнет мигать синяя лампочки, значит поднимается беспроводной интерфейс. Мигнет красная лампочка — обмен данными по USB. Должно появиться устройство /dev/ttyUSB0:
ls /dev/ttyU*
/dev/ttyUSB0
2. Подготовим файл конфигурации для инициализации консоли на этом устройстве:
touch /etc/init/ttyUSB0.conf
3. Добавим в него такое содержимое:
# ttyUSB0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.
start on stopped rc RUNLEVEL=[12345]
stop on runlevel [!12345]
respawn
exec /sbin/getty -L 115200 ttyUSB0 linux
4. Теперь можно стартовать консоль
sudo start ttyUSB0
При работе устройства образуется беспроводная сеть с SSID WoobmAP, по умолчанию она открыта, в настройках ее можно скрыть, запаролить, подключить к другой точке доступа. Когда подключаетесь к этой точке, по умолчанию вашему устройству присваивается адрес из диапазона 192.168.4.2 — 192.168.4.4, сам Woobm-USB получает адрес 192.168.4.1.
Можно вводить команды в WEB-интерфейсе (http://192.168.4.1). Можно подключиться к устройству используя telnet (telnet 192.168.4.1). При инициализации консоли вы работаете как в обычной консоли Linux.
Я пробовал различные эмуляторы терминала: VT100, VT102, linux, xterm. При выборе xterm, при работе через telnet, корректно работает даже mc (midnight commander). Но если попробовать запустить mc в консоли WEB-интерфейса, скриншот которого вы видите выше, то мы получим ошибку «Disconnected (code 1006). Please try again», и интерфейс перестанет воспринимать команды. Консольные директивы работают безо всяких проблем.
Эта статья навеяна выполнением работ для одного из наших крупных клиентов ООО «ЕвроСтудио».
Известно, что в CentOS 7 было много нововведений. Одно из них — firewalld, демон-надстройка над iptables, добавляющая определенные удобства в работе с брандмауэром. Можно долго спорить на тему удобно/неудобно, и о том, что надстройка эта по умолчанию ставится только в разработках RedHat и совместимых с ними CentOS, но она есть, установлена, а значит почему бы ее не использовать?
Итак, IPset. Это именованные списки IP-адресов и подсетей, которые можно использовать в правилах iptables для уменьшения количества этих правил. Чем меньше правил — тем быстрее они анализируются, тем производительнее сеть на данном сервере. Поддержка IPset появилась в firewalld начиная с версии 0.4.0.
Смотрим версию firewalld
firewall-cmd -v
0.3.9
Видим, что версия ниже, чем 0.4.0, значит ее надо обновить
yum install firewall
Снова проверяем версию firewall
firewall-cmd -V
0.4.4.4
Если версия правильная, (>= 0.4.0, как у нас) можно работать с IPset. Например добавим список адресов
firewall-cmd --permanent --new-ipset=IP-whitelist --type=hash:ip
Если в списке должны быть и адреса, и подсети, то список следует добавлять так
firewall-cmd --permanent --new-ipset=IP-whitelist --type=hash:net
Мы добавили именованный список IP-whitelist. Опция «—permanent» добавляет конфигурационный файл этого списка, без нее после перезагрузки списка у нас не будет. А еще она сохраняет правила, списки и адреса в различные конфигурационные файлы .xml в директории /etc/firewalld, чтобы они автоматически применялись при перезагрузке сервера. Если нужно просто протестировать список или правило, опцию «—permanent» добавлять не нужно, правило или список в этом случае сохранится только до ближайшей перезагрузки.
Теперь будем добавлять в список адресов собственно адреса
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.4 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.6 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.8 --permanent
И подсети
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.2.0/24 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.100/28 --permanent
Перезагрузим настройки firewall
firewall-cmd --reload
Посмотрим, какие у нас есть списки адресов/сетей
Показать существующие списки адресов
firewall-cmd --get-ipsets
IP-whitelist
Показать сам список
firewall-cmd --ipset=IP-whitelist --get-entries
192.168.1.4
192.168.1.6
192.168.1.8
192.168.2.0/24
192.168.1.100/28
Список у нас есть, можем теперь добавить правила, работающие с этими списками.
Допустим, нам надо, чтобы сервис ssh был доступен только для белого списка адресов IP-whitelist, а порты 80 и 443 были закрыты для адресов в списке IP-blacklist
Добавим правило, разрешающее сервис ssh для белого списка «IP-whitelist»
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="IP-whitelist" service name="ssh" accept'
Если есть правило, разрешающее сервис ssh для всех, удалим его
firewall-cmd --permanent --zone=public --remove-service=ssh
Убедились, что ваш адрес есть в белом списке, иначе доступ к серверу будет закрыт!
firewall-cmd --ipset=IP-whitelist --get-entries
Перезагрузим настройки firewall
firewall-cmd --reload
Теперь создадим список IP-blacklist, добавим туда адреса
firewall-cmd --permanent --new-ipset=IP-blacklist --type=hash:net
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.5 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.7 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.3.0/24 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.4.0/23 --permanent
Проверим, если хотим
firewall-cmd --get-ipsets
IP-whitelist
IP-blacklist
firewall-cmd --ipset=IP-whitelist --get-entries
192.168.1.5
192.168.1.7
192.168.3.0/24
192.168.4.0/23
И запретим доступ с этих адресов для портов 80 и 443 используя опцию service
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist service name="http" drop' --permanent
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist service name="https" drop' --permanent
Или опцию port
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist port protocol="tcp" port="80" drop' --permanent
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist port protocol="tcp" port="80" drop' --permanent
Перезагружаем настройки firewall
firewall-cmd --reload
Правила добавлены, блокировка включена, к ssh имеют доступ только разрешенные хосты. Теперь во время работы сервера мы можем добавлять и убирать адреса в эти списки
Добавление адреса в списки
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.20 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.70 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.80 --permanent
firewall-cmd --reload
Удаление адреса из списка
firewall-cmd --ipset=IP-blacklist --remove-entry=192.168.1.5 --permanent
firewall-cmd --ipset=IP-blacklist --remove-entry=192.168.1.7 --permanent
firewall-cmd --reload