
Основные правила сводятся к нескольким шагам, а именно, установить правила для firewall и настройке самого SSHD
Шаг 1: Прописать правила для разрешенных ip адресов (Firewall)
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="XXX.XXX.XXX.XXX" port port="22" protocol="tcp" accept'
или
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="XXX.XXX.XXX.XXX" service name="ssh" accept'
Вместо XXX.XXX.XXX.XXX вставить нужный ip адрес. И так вписать все ip с которых необходим доступ к данному серверу. Далее, после того как все адреса вписаны, необходимо создать правило, запрещающее вход для всех остальных
firewall-cmd --permanent --remove-service=ssh
Далее, после того как все прописано, необходимо перезагрузить правила командой
firewall-cmd --reload
Правила для разрешенных ip адресов (Iptables)
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s XXX.XXX.XXX.XXX -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
где первое правило открывает доступ для уже установленных соединений
второе правило открывает доступ к серверу с адреса XXX.XXX.XXX.XXX к TCP порту 22
и третье закрывает доступ к порту ssh/22 с любых других адресов
далее сохраняем правила (для CentOS) с помощью iptables-services
service iptables save
для (Debian/Ubuntu) с помощью iptables-persistent
netfilter-persistent save
Шаг 2: Вносим изменения в конфиг файл SSHD
Открываем файл /etc/ssh/sshd_config и в самом конце дописываем следующее
PermitRootLogin no
Match Host 127.0.0.1,192.168.0.0/24
PermitRootLogin yes
Match all
И в пункте Match Host через запятую вписываем необходимые ip адреса или сегменты сети, в данном случае, эти ip вписаны для примера. Сохраняем файл и рестартуем службу
systemctl restart sshd