В данном разделе приведены рекомендации для повышения безопасности при использовании ECCM.
Смена паролей по умолчанию
Замена стандартных паролей на уникальные сложные пароли предотвращает несанкционированный доступ к веб-интерфейсу ECCM.
Перейдите в рабочую директорию ECCM:
cd eccm/2.9/
В файле eccm/.env замените значение пароля пользователя peeper_monitor и все вхождения tester_password/eccm_password на ваш пароль:
eccm/.env
...
# 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
...
PEEPER_MONITOR_POSTGRES_USER=peeper_monitor
PEEPER_MONITOR_POSTGRES_PASSWORD=peeper_monitor
...
При использовании ЕССМ в отказоустойчивой системе замените пароль пользователя peeper_monitor в конфигурационном файле .env.cluster
Замените пароль в SQL-запросе для создания пользователя eccm:
postgres/data/init-db/002_create_user.sql
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 и peeper_monitor:
ALTER USER tester WITH ENCRYPTED PASSWORD 'new_tester_password';
ALTER USER eccm WITH ENCRYPTED PASSWORD 'new_eccm_password';
ALTER USER peeper_monitor WITH ENCRYPTED PASSWORD 'new_peeper_monitor_password';
Выйдите из контейнера postgres и перейдите в рабочую директорию ECCM:
cd eccm/2.9/
В файле eccm/.env замените все вхождения old_tester_password, old_eccm_password и old_peeper_monitor_password на ваш новый пароль:
eccm/.env
...
# 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
...
PPEEPER_MONITOR_POSTGRES_USER=peeper_monitor
PEEPER_MONITOR_POSTGRES_PASSWORD=old_peeper_monitor_password
...
Перезапустите контейнеры ECCM с помощью compose-tools.sh инеобходимых опций, например:
sudo ./compose-tools.sh --https --start <IP-адрес сервера или его доменное имя> --stop
Настройка HTTPS
Запуск веб-интерфейса ECCM по протоколу HTTPS позволяет шифровать трафик между клиентом и приложением, защищая данные от перехвата. Инструкция по настройке доступна в разделе "Настройка доступа к ECCM по HTTPS".
Настройка PostgreSQL
Настройка PostgreSQL позволяет ограничить доступ нежелательных пользователей к базе данных при запуске ECCM с базой данных на отдельном сервере или в отказоустойчивой системе.
При поднятии ECCM и базы данных на одном сервере настройка подключений не требуется. По умолчанию контейнер с базой данных при выбранной инсталляции изолирован и недоступен из внешней сети.
Выведите подсети, которые использует docker на сервере с БД:
Настройте доступ к БД только с localhost, с подсетей docker-а и адреса администратора при помощи любого текстового редактора в файле postgres/data/pg_hba.cluster.conf.tpl:
postgres/data/pg_hba.cluster.conf.tpl
# 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
# Docker network internal (172.21.0.0/20) и external (172.20.0.0/20)
hostssl ${ECCM_DATABASE} ${POSTGRES_USER} 172.21.0.0/16 md5 # docker network internal
hostssl ${ECCM_DATABASE} ${ECCM_POSTGRES_USER} 172.21.0.0/16 md5 # docker network internal
hostssl all ${PEEPER_MONITOR_POSTGRES_USER} 172.21.0.0/16 md5 # docker network internal
hostssl repmgr ${REPMGR_USER} 172.21.0.0/16 md5 # docker network internal
hostssl ${ECCM_DATABASE} ${POSTGRES_USER} 172.20.0.0/16 md5 # docker network external
hostssl ${ECCM_DATABASE} ${ECCM_POSTGRES_USER} 172.20.0.0/16 md5 # docker network external
hostssl all ${PEEPER_MONITOR_POSTGRES_USER} 172.20.0.0/16 md5 # docker network external
hostssl repmgr ${REPMGR_USER} 172.20.0.0/16 md5 # docker network external
# Опционально: удаленный доступ администратора к БД
hostssl all all <admin_ip>/32 md5 # опционально: IP адрес для удаленного подключения администратора к БД
# Опционально: доступ приложений ECCM инсталляции отказоустойчивой системы с БД на отдельном сервере
hostssl ${ECCM_DATABASE} ${POSTGRES_USER} <master_app_ip>/32 md5 # IP адрес Master-ECCM
hostssl ${ECCM_DATABASE} ${ECCM_POSTGRES_USER} <master_app_ip>/32 md5 # IP адрес Master-ECCM
hostssl all ${PEEPER_MONITOR_POSTGRES_USER} <master_app_ip>/32 md5 # IP адрес Master-ECCM
hostssl repmgr ${REPMGR_USER} <master_app_ip>/32 md5 # IP адрес Master-ECCM
hostssl ${ECCM_DATABASE} ${POSTGRES_USER} <slave_app_ip>/32 md5 # IP адрес Slave-ECCM
hostssl ${ECCM_DATABASE} ${ECCM_POSTGRES_USER} <slave_app_ip>/32 md5 # IP адрес Slave-ECCM
hostssl all ${PEEPER_MONITOR_POSTGRES_USER} <slave_app_ip>/32 md5 # IP адрес Slave-ECCM
hostssl repmgr ${REPMGR_USER} <slave_app_ip>/32 md5 # IP адрес Slave-ECCM
IP-адреса всех узлов отказоустойчивой системы будут добавлены автоматически при запуске ECCM.
Синхронизируйте конфигурационные файлы между узлами:
sudo rsync -av --delete --rsync-path="sudo rsync" eccm/2.9/postgres/data/pg_hba.cluster.conf.tpl <имя пользователя сервера>@<IP-адрес сервера назначения>:<полный путь до директории eccm>/postgres/data/
В файле .env.cluster измените значение параметра RECONFIGURE_CLUSTER на true и перезапустите систему в соответствии с инструкцией в разделе Запуск ECCM в отказоустойчивой системе.
Во избежание ошибок верните значение параметра RECONFIGURE_CLUSTER на false после перезапуска.
Настройте доступ к БД только с localhost, с подсетей docker-а и адреса администратора при помощи любого текстового редактора в файле postgres/data/pg_hba.conf.tpl:
postgres/data/pg_hba.conf.tpl
# 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.21.0.0/16 md5 # docker network internal
host all all 172.20.0.0/16 md5 # docker network external
Перезапустите ЕССМ:
sudo ./compose-tools.sh --stop
sudo ./compose-tools.sh --https --start <IP-адрес сервера или его доменное имя>
Настройка firewall
Для обеспечения большей безопасности необходимо ограничить внешние подключения к серверу ECCM.
Создайте файл iptables.sh на сервере с ECCM со следующими правилами:
Сервер ECCM
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 443 -j ACCEPT # веб-интерфейс ECCM на схеме HTTPS
# разрешим исходящие подключения, которые инициировали мы сами
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT # DHCP
sudo iptables -A INPUT -p udp --dport 69 -j ACCEPT # TFTP
sudo iptables -A INPUT -p udp --dport 162 -j ACCEPT # SNMP-трапы
sudo iptables -A INPUT -p udp --dport 514 -j ACCEPT # Syslog (UDP)
sudo iptables -A INPUT -p tcp --dport 514 -j ACCEPT # Syslog (TCP)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # загрузка прошивок
На сервере с БД создайте файл 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 -s <IP сервера ECCM> --dport 5432 -j ACCEPT # доступ приложений к БД
# разрешим исходящие подключения, которые инициировали мы сами
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# опционально: доступ администратора к БД
sudo iptables -A INPUT -p tcp -s <admin_ip>/32 --dport 5432 -j ACCEPT
Примените правила на каждом сервере:
chmod +x iptables.sh
sudo ./iptables.sh
Для того чтобы правила сохранились после перезагрузки, можно использовать утилиту iptables-persistent (или любые другие доступные методы):
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
Создайте файл iptables.sh на узлах Master и Slave со следующими правилами:
Узлы Master и Slave
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 443 -j ACCEPT # веб-интерфейс ECCM на схеме HTTPS
# разрешим исходящие подключения, которые инициировали мы сами
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# опционально: доступ администратора к БД
sudo iptables -A INPUT -p tcp -s <admin_ip>/32 --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT # DHCP
sudo iptables -A INPUT -p udp --dport 69 -j ACCEPT # TFTP
sudo iptables -A INPUT -p udp --dport 162 -j ACCEPT # SNMP-трапы
sudo iptables -A INPUT -p udp --dport 514 -j ACCEPT # Syslog (UDP)
sudo iptables -A INPUT -p tcp --dport 514 -j ACCEPT # Syslog (TCP)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # загрузка прошивок
# PostgreSQL
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 5432 -j ACCEPT
# Redis
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 6379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 6379 -j ACCEPT
# Sentinel
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 26379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 26379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 26379 -j ACCEPT
# RabbitMQ
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 25672 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 25672 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 25672 -j ACCEPT
# Keepalived
sudo iptables -A INPUT -p vrrp -j ACCEPT
На узле Witness создайте файл iptables.sh со следующими правилами:
Узел Witness
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 -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# PostgreSQL
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 5432 -j ACCEPT
# Sentinel
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 26379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 26379 -j ACCEPT
# RabbitMQ
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master> --dport 25672 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave> --dport 25672 -j ACCEPT
Примените правила на каждом сервере:
chmod +x iptables.sh
sudo ./iptables.sh
Для того чтобы правила сохранились после перезагрузки, можно использовать утилиту iptables-persistent (или любые другие доступные методы):
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
Создайте файл iptables.sh на узлах Master-app и Slave-app со следующими правилами:
Узлы Master-app и Slave-app
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 443 -j ACCEPT # веб-интерфейс ECCM на схеме HTTPS
# разрешим исходящие подключения, которые инициировали мы сами
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT # DHCP
sudo iptables -A INPUT -p udp --dport 69 -j ACCEPT # TFTP
sudo iptables -A INPUT -p udp --dport 162 -j ACCEPT # SNMP-трапы
sudo iptables -A INPUT -p udp --dport 514 -j ACCEPT # Syslog (UDP)
sudo iptables -A INPUT -p tcp --dport 514 -j ACCEPT # Syslog (TCP)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # загрузка прошивок
# Redis
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 6379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 6379 -j ACCEPT
# Sentinel
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 26379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 26379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 26379 -j ACCEPT
# RabbitMQ
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 25672 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 25672 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 25672 -j ACCEPT
# Keepalived
sudo iptables -A INPUT -p vrrp -j ACCEPT
На узлах Master-db и Slave-db создайте файл iptables.sh со следующими правилами:
Узлы Master-db и Slave-db
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 -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально: разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# PostgreSQL репликация
sudo iptables -A INPUT -p tcp -s <IP Master-db> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-db> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Witness> --dport 5432 -j ACCEPT
# доступ приложений к PostgreSQL
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 5432 -j ACCEPT
# опционально: доступ администратора к БД
sudo iptables -A INPUT -p tcp -s <admin_ip>/32 --dport 5432 -j ACCEPT
На узле Witness создайте файл iptables.sh со следующими правилами:
Узел Witness
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 -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# PostgreSQL
sudo iptables -A INPUT -p tcp -s <IP Master-db> --dport 5432 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-db> --dport 5432 -j ACCEPT
# Sentinel
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 26379 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 26379 -j ACCEPT
# RabbitMQ
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 5671 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 4369 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Master-app> --dport 25672 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP Slave-app> --dport 25672 -j ACCEPT
Примените правила на каждом сервере:
chmod +x iptables.sh
sudo ./iptables.sh
Для того чтобы правила сохранились после перезагрузки, можно использовать утилиту iptables-persistent (или любые другие доступные методы):
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
Создайте файл iptables.shс правилами:
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 443 -j ACCEPT # веб-интерфейс ECCM на схеме HTTPS - не используется для Witness
# разрешим исходящие подключения, которые инициировали мы сами
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# разрешить обращения к localhost
sudo iptables -A INPUT -i lo -j ACCEPT
# опционально, разрешим пинговать себя
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT # DHCP
sudo iptables -A INPUT -p udp --dport 69 -j ACCEPT # TFTP
sudo iptables -A INPUT -p udp --dport 162 -j ACCEPT # SNMP-трапы
sudo iptables -A INPUT -p udp --dport 514 -j ACCEPT # Syslog (UDP)
sudo iptables -A INPUT -p tcp --dport 514 -j ACCEPT # Syslog (TCP)
sudo iptables -A INPUT -p tcp --dport 2222 -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:
...
PasswordAuthentication no # Запретить вход по паролю
PermitRootLogin no # Запретить вход root
PubkeyAuthentication yes # Разрешить вход по ключам
...
Перезапустите службу sshd:
sudo systemctl restart sshd
Использование Fail2ban
Fail2ban — программа для защиты серверов от brute-force атак, которая автоматически блокирует IP-адреса при множественных неудачных попытках входа по SSH.
Установка Fail2ban
В зависимости от типа ОС, выполните одну из следующих команд:
Dedian и Ubuntu
apt-get install fail2ban
Astra Linux
yum install fail2ban
Настройка конфигурационного файла
Создайте конфигурационный файл и настройте параметры по общим рекомендациям:
sudo vim /etc/fail2ban/ssh.conf
/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, используйте следующую команду: