Если лень возиться с iptables, то ограничить доступ к ssh (и не только) можно и без iptables.
Для этого достаточно дописать несколько строк в файлы
/etc/hosts.allow
/etc/hosts.deny
Например, открываем доступ к sshd с ip 192.168.1.12 и 192.168.250.250, а для остальных доступ к sshd будет закрыт.
Добавляем в файл /etc/hosts.allow строку, где указаны разрешенные ip:
sshd: 192.168.1.12, 192.168.250.250
А в файле /etc/hosts.deny закрываем доступ всем, кроме разрешенных:
sshd: ALL
При попытке подключения с неразрешенного хоста получим ответ:
# ssh 192.168.0.1
ssh_exchange_identification: Connection closed by remote host
А если подключаться с разрешенного, то увидим приглашение ssh.
# ssh 192.168.0.1
user@host's password:
Вот такой простой способ 🙂
Таким же способом, например, можно разрешить/запретить коннекты с mysqld, nfs или другим сервисам.
Ага, только hosts.allow и hosts.deny работают через tcp враппер, а не на уровне ядра. Тут есть свои плюсы и свои минусы. Но в целом да, коль враппер есть – его можно и нужно использовать 😉
С другой стороны, хочется заметить, что hosts.deny это, в некоторой степени, анахронизм для обратной совместимости 😉 Нынче и запрет и разрешение надо делать в hosts.allow, примерно так:
tftpd: 10.254.0.0/24 : ALLOW
tftpd: ALL : DENY
Ну или на вышеописанном примере:
sshd: 192.168.1.12, 192.168.250.250 : ALLOW
sshd: ALL : DENY
Саша, спасибо за подробное дополнение
😉
Сарёж, спасибо не булькает 😀
ага, только ты все время “скрываешься” и не признаешься, когда в городе )
Если идти путём последовательной паранойи, то можно ещё использовать директивы (Allow|Deny)(Users|Groups) (/etc/ssh/sshd_config), а также задействовать port knock и нестандартный порт SSH.
Согласен,
все зависит от степени паранойи 🙂