В данном разделе приведены рекомендации для повышения безопасности при использовании ECCM.
Смена паролей по умолчанию
Замена стандартных паролей на уникальные сложные пароли предотвращает несанкционированный доступ к веб-интерфейсу ECCM.
Перейдите в рабочую директорию ECCM:
cd eccm/2.2/
В файле eccm/.env замените все вхождения tester_password/eccm_password на ваш пароль:
... # Root credentials для развертки и настройки базы данных ROOT_POSTGRES_USER=tester ROOT_POSTGRES_PASSWORD=tester_password # Client info для работы с базой данных ECCM_POSTGRES_DB=eccm ECCM_POSTGRES_USER=eccm ECCM_POSTGRES_PASSWORD=eccm_password ...
В файле postgres/.env обновите пароль:
... ROOT_POSTGRES_USER=tester ROOT_POSTGRES_PASSWORD=tester_password ...
Замените пароль в SQL-запросе для создания пользователя eccm:
CREATE USER "eccm" WITH ENCRYPTED PASSWORD 'eccm_password'; GRANT all privileges on DATABASE "eccm" to "eccm";
Для того чтобы контейнеры смогли подключаться к БД после изменения паролей, необходимо удалить контейнеры и создать их заново. Данные в БД при этом останутся (если инсталляция ECCM производится на чистую виртуальную машину, то контейнеры удалять не обязательно, так как они еще не запущены):
sudo ./compose-tools.sh --delete-containers
Запустите контейнеры ECCM с помощью compose-tools.sh и необходимых опций, например:
sudo ./compose-tools.sh --https --start <IP-адрес сервера или его доменное имя>
Смена паролей при текущей эксплуатации
Перейдите в контейнер postgres-postgres-1:
docker exec -ti postgres-postgres-1 bash
Войдите в БД под пользователем tester:
psql -d eccm -U tester
Измените пароли для пользователей tester и eccm:
ALTER USER tester WITH ENCRYPTED PASSWORD 'new_tester_password'; ALTER USER eccm WITH ENCRYPTED PASSWORD 'new_eccm_password';
Выйдите из контейнера postgres и перейдите в рабочую директорию ECCM:
cd eccm/2.2/
В файле eccm/.env замените все вхождения old_tester_password/old_eccm_password на ваш новый пароль:
... # Root credentials для развертки и настройки базы данных ROOT_POSTGRES_USER=tester ROOT_POSTGRES_PASSWORD=old_tester_password # Client info для работы с базой данных ECCM_POSTGRES_DB=eccm ECCM_POSTGRES_USER=eccm ECCM_POSTGRES_PASSWORD=old_eccm_password ...
В файле postgres/.env обновите пароль:
... ROOT_POSTGRES_USER=tester ROOT_POSTGRES_PASSWORD=old_tester_password ...
Перезапустите контейнеры ECCM с помощью compose-tools.sh и необходимых опций, например:
sudo ./compose-tools.sh --https --start <IP-адрес сервера или его доменное имя> --stop
Настройка HTTPS
Запуск веб-интерфейса ECCM по протоколу HTTPS позволяет шифровать трафик между клиентом и приложением, защищая данные от перехвата. Инструкция по настройке доступна в разделе "Настройка доступа к ECCM по HTTPS".
Настройка postgres
Настройка postgres позволяет ограничить доступ нежелательных пользователей к базе данных.
Выведите подсети, которые использует docker:
sudo docker network inspect bridge | grep "Subnet"
"Subnet": "172.17.0.0/16",
sudo docker network inspect postgres_default | grep "Subnet"
"Subnet": "172.18.0.0/16",
sudo docker network inspect eccm_eltex-internal | grep "Subnet"
"Subnet": "172.19.0.0/16",
Настройте доступ к БД только с localhost, с подсетей docker-а и адреса администратора:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust #host all all all md5 host all all <eccm_ip>/32 md5 # IP адрес ECCM приложений host all all <admin_ip>/32 md5 # опционально: IP адрес для удаленного подключения администратора к БД host all all 172.17.0.0 255.255.0.0 md5 # docker network bridge host all all 172.18.0.0 255.255.0.0 md5 # docker network postgres_default host all all 172.19.0.0 255.255.0.0 md5 # docker network eccm_eltex-internal
Перезапустите контейнеры:
sudo ./compose-tools.sh --stop sudo ./compose-tools.sh --https --start <IP-адрес сервера или его доменное имя>
Настройка firewall
Для обеспечения большей безопасности необходимо ограничить внешние подключения к серверу ECCM.
Создайте файл iptables.sh с правилами:
sudo iptables -P INPUT DROP # запрет всех входящих соединений sudo iptables -P FORWARD DROP # запрет для всех проходящих через ваш хост соединений sudo iptables -P OUTPUT ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT # Postgres # опционально, разрешим пинговать себя sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # разрешим исходящие подключения, которые инициировали мы сами sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # разрешить обращения к localhost sudo iptables -A INPUT -i lo -j ACCEPT
Примените правила:
chmod +x iptables.sh sudo ./iptables.sh
Для того чтобы правила сохранились после перезагрузки, можно использовать утилиту iptables-persistent (или любые другие доступные методы):
sudo apt-get install iptables-persistent sudo netfilter-persistent save
Дополнительная защита сервера
Использование SSH-ключей вместо паролей
Замена доступа по паролям на доступ по генерируемым локальной машиной ключам обеспечивает повышенную безопасность данных.
Сгенерируйте SSH-ключи на локальной машине администратора ECCM:
ssh-keygen
Скопируйте публичный ключ администратора ~/.ssh/id_rsa.pub с локального хоста в файл, расположенный на хосте ECCM ~/.ssh/authorized_keys:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDubL15JQlEi2Nlrblwh+Iw+D8FakZnfs+B6H++YcQRrakoiUW6Zvd6DoSEPcKDMg6qnJ+ ... w/LhsLjD= admin@ECCM-admin
Отключите вход по паролю в /etc/ssh/sshd_config:
... PasswordAuthentication no # Запретить вход по паролю PermitRootLogin no # Запретить вход root PubkeyAuthentication yes # Разрешить вход по ключам ...
Перезапустите службу sshd:
sudo systemctl restart sshd
Использование Fail2ban
Fail2ban — программа для защиты серверов от brute-force атак, которая автоматически блокирует IP-адреса при множественных неудачных попытках входа по SSH.
- Установка Fail2ban
В зависимости от типа ОС, выполните одну из следующих команд:
apt-get install fail2ban
yum install fail2ban
- Настройка конфигурационного файла
Создайте конфигурационный файл и настройте параметры по общим рекомендациям:
sudo vim /etc/fail2ban/ssh.conf
[sshd] # активируем правило enabled = true # Если Вы сменили порт SSH по умолчанию, замените 1234 на ваш новый порт port = ssh,1234 ## если в течении 1 часа: findtime = 1h ## произведено 6 неудачных попыток логина: maxretry = 6 ## то банить IP на 2 часа: bantime = 2h # какие ip адреса игнорируются правилом ignoreip = 127.0.0.1/8 23.34.45.56
sudo systemctl restart fail2ban
Данный набор условий означает, что IP-адрес, с которого было произведено 6 неудачных попыток SSH-подключения за последний час, будет заблокирован на 2 часа. Не будут блокироваться IP-адреса в диапазоне от 127.0.0.1 до 127.0.0.8 и адрес 23.34.45.56. Стоит обратить внимание, что в данном примере "/8" — не маска, а конечный адрес устройства.
Время для параметров findtime и bantime можно указывать не только в секундах, но и в минутах, часах, днях и даже неделях. Для этого необходимо сразу после численного значения параметра указать соответствующую букву (m, h, d, w).
- Просмотр адресов
Команда для вывода на экран сведений о работе jail-а, отвечающего за службу sshd:
sudo fail2ban-client status sshd
С помощью данной команды можно посмотреть список заблокированных IP-адресов.
Если в данный момент машина не подвергается атаке, сразу после установки и запуска программы на экране будет отображена следующая информация:
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
- Разблокировка адресов
IP-адреса, попавшие в бан:
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list: 192.168.х.х
Чтобы разблокировать IP-адрес, попавший в бан (например, 192.168.х.х), используйте следующую команду:
sudo fail2ban-client unban 192.168.x.x
Чтобы разблокировать все адреса, попавшие в бан, используйте следующую команду:
sudo fail2ban-client unban --all
Чтобы разблокировать IP-адрес из jail sshd, используйте следующую команду:
sudo fail2ban-client set sshd unbanip 192.168.x.x