После взлома сайта спамерами решил обезопасить свой VPS хостинг.
Сперва решил поменять порт ssh со стандартного 22 на например 12345
Полной информации в одном месте не нашел, поэтому решил написать себе памятку.
Для начала меняем порт в конфигурации сервиса ssh
sudo nano /etc/ssh/sshd_config
Находим строку Port 22 и меняем порт на свой.
Перезапускаем ssh
sudo /etc/init.d/sshd restart
Проверяем на каком порту запустился ssh
sudo netstat -anp | grep ssh
Видим новый порт и ни в коем случае не закрываем текущее соединение ssh, а то без дальнейших изменений вы не зайдете. Придется подключатся через VNC хостинг панели.
Как правило на этом все статьи заканчиваются, иногда кто-то упоминает вскользь, что нужно открыть новый порт в firewall.
Но поскольку на сервере стоит панель управления хостингом, то открытие нового порта оказалось не тривиальной задачей.
По умолчанию все настройки фаервола для VestaCP хранятся в двух файлах
Для исходящих соединений
sudo nano /usr/local/vesta/data/firewall/ports.conf
содержимое по умолчанию
PROTOCOL='TCP' PORT='20'
PROTOCOL='TCP' PORT='21'
PROTOCOL='TCP' PORT='22'
PROTOCOL='TCP' PORT='25'
PROTOCOL='UDP' PORT='53'
PROTOCOL='TCP' PORT='80'
PROTOCOL='TCP' PORT='443'
PROTOCOL='TCP' PORT='110'
PROTOCOL='UDP' PORT='123'
PROTOCOL='TCP' PORT='143'
PROTOCOL='TCP' PORT='3306'
PROTOCOL='TCP' PORT='5432'
PROTOCOL='TCP' PORT='8080'
PROTOCOL='TCP' PORT='8433'
PROTOCOL='TCP' PORT='8083'
PROTOCOL='TCP' PORT='12000:12100
Для входящих соединений
sudo nano /usr/local/vesta/data/firewall/rules.conf
Содержимое по умолчанию
RULE='1' ACTION='ACCEPT' PROTOCOL='ICMP' PORT='0' IP='0.0.0.0/0' COMMENT='PING' SUSPENDED='no' TIME='17:13:48' DATE='2014-09-16'
RULE='2' ACTION='ACCEPT' PROTOCOL='TCP' PORT='8083' IP='0.0.0.0/0' COMMENT='VESTA' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='3' ACTION='ACCEPT' PROTOCOL='TCP' PORT='3306,5432' IP='0.0.0.0/0' COMMENT='DB' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='4' ACTION='ACCEPT' PROTOCOL='TCP' PORT='143,993' IP='0.0.0.0/0' COMMENT='IMAP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='5' ACTION='ACCEPT' PROTOCOL='TCP' PORT='110,995' IP='0.0.0.0/0' COMMENT='POP3' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='6' ACTION='ACCEPT' PROTOCOL='TCP' PORT='25,465,587,2525' IP='0.0.0.0/0' COMMENT='SMTP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='7' ACTION='ACCEPT' PROTOCOL='UDP' PORT='53' IP='0.0.0.0/0' COMMENT='DNS' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='8' ACTION='ACCEPT' PROTOCOL='TCP' PORT='21,12000-12100' IP='0.0.0.0/0' COMMENT='FTP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='9' ACTION='ACCEPT' PROTOCOL='TCP' PORT='80,443' IP='0.0.0.0/0' COMMENT='WEB' SUSPENDED='no' TIME='17:04:27' DATE='2014-09-24'
RULE='10' ACTION='ACCEPT' PROTOCOL='TCP' PORT='22' IP='0.0.0.0/0' COMMENT='SSH' SUSPENDED='no' TIME='23:05:15' DATE='2016-01-23'
Также есть третий файл в котором прописан порт ssh, в той же папке где хранятся и предыдущие файлы. Но я пока не понял его назначения)) Но но на всякий случай поменял порт и в нем
sudo nano /usr/local/vesta/data/firewall/chains.conf
Содержимое по умолчанию
CHAIN='SSH' PORT='22' PROTOCOL='TCP'
CHAIN='MAIL' PORT='25,465,587,2525,110,995,143,993' PROTOCOL='TCP'
CHAIN='VESTA' PORT='8083' PROTOCOL='TCP'
CHAIN='FTP' PORT='21' PROTOCOL='TCP'
Вот как выглядит iptables
sudo iptables -L --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
2 fail2ban-FTP tcp -- anywhere anywhere tcp dpt:ftp
3 fail2ban-VESTA tcp -- anywhere anywhere tcp dpt:8083
4 fail2ban-MAIL tcp -- anywhere anywhere multiport dports smtp,ssmtp,submission,2525,pop3,pop3s,imap2,imaps
5 fail2ban-SSH tcp -- anywhere anywhere tcp dpt:22
6 ACCEPT tcp -- anywhere anywhere tcp dpt:22
7 ACCEPT tcp -- anywhere anywhere multiport dports http,https
8 ACCEPT tcp -- anywhere anywhere multiport dports ftp,12000:12100
9 ACCEPT udp -- anywhere anywhere udp dpt:domain
10 ACCEPT tcp -- anywhere anywhere multiport dports smtp,ssmtp,submission,2525
11 ACCEPT tcp -- anywhere anywhere multiport dports pop3,pop3s
12 ACCEPT tcp -- anywhere anywhere multiport dports imap2,imaps
13 ACCEPT tcp -- anywhere anywhere multiport dports mysql,postgresql
14 ACCEPT tcp -- anywhere anywhere tcp dpt:8083
15 ACCEPT icmp -- anywhere anywhere
16 ACCEPT all -- mszerg.pp.ua anywhere
17 ACCEPT all -- localhost anywhere
18 ACCEPT tcp -- anywhere anywhere tcp spt:ftp-data
19 ACCEPT tcp -- anywhere anywhere tcp spt:ftp
20 ACCEPT tcp -- anywhere anywhere tcp spt:22
21 ACCEPT tcp -- anywhere anywhere tcp spt:smtp
22 ACCEPT udp -- anywhere anywhere udp spt:domain
23 ACCEPT tcp -- anywhere anywhere tcp spt:http
24 ACCEPT tcp -- anywhere anywhere tcp spt:https
25 ACCEPT tcp -- anywhere anywhere tcp spt:pop3
26 ACCEPT udp -- anywhere anywhere udp spt:ntp
27 ACCEPT tcp -- anywhere anywhere tcp spt:imap2
28 ACCEPT tcp -- anywhere anywhere tcp spt:mysql
29 ACCEPT tcp -- anywhere anywhere tcp spt:postgresql
30 ACCEPT tcp -- anywhere anywhere tcp spt:http-alt
31 ACCEPT tcp -- anywhere anywhere tcp spt:8433
32 ACCEPT tcp -- anywhere anywhere tcp spt:8083
33 ACCEPT tcp -- anywhere anywhere tcp spts:12000:12100
34 ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain fail2ban-FTP (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-MAIL (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-SSH (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-VESTA (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-ssh (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain vesta (0 references)
num target prot opt source destination
В общем меняем в этих трех фалах порт 22 на свой, после чего пере запускаем фаервол VestaCP
sudo /usr/local/vesta/bin/v-update-firewall
После этого вы сможете подключится к ssh по новому порту
Например в Ubuntu это можно сделать так
ssh -p 12345 admin@ip.saita
Если что-то пошло не так, как получилось у меня))
По какой-то причине, после того как я пытался добавить новое правило в фаервол через веб-панель VestaCP у меня обнулились первые два файла
ports.conf и rules.conf
Естественно пропал любой доступ на хостин и перестал работать сайт в
браузере.
Пришлось заходить на сервер через по VNC через хостинг панель. А далее открыть себе хоть какой-нибудь порт что бы приступить к востановлению сервер.
Мне пригодились следующие команды
Просмотр действующих правил фаервола
sudo iptables -L --line-number
Открыть порт, например что бы заработала панель VestaCP в браузере и доступ по ssh на старом или новом порте, в зависимости что у вас стоит в
/etc/ssh/sshd_config
sudo iptables -I INPUT 1 -p tcp --dport 8083 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
Удаление правила по его номеру
sudo iptables -D INPUT 8
Сохранение правил фаервола
sudo iptables-save
Для надежности я еще останавливал fail2ban, что бы он убрал свои правила из iptables
sudo /etc/init.d/fail2ban stop
Удаление всех правил из iptables
iptables -t nat -F
iptables -t filter -F
iptables -t mangle -F
Просмотр портов с котороыми работает ваш сервер
sudo netstat -tupln | grep LISTEN
Путем разных комбинаций этих команд мне удалось восстановить доступ к серверу и правильно настроить изменение порта ssh на альтернативный в панели управления хостингом VestaCP на сервере Debian.