Блокировка удаленного входа

Прошлой ночью я закрывал свой сервер и увидел сообщение, спрашивающее, хочу ли я закрыть сеанс "pts/0". Странно, подумал я. Итак, я вернулся и сделал finger и увидел, что кто-то вошел в систему с удаленного IP-адреса (итальянский адрес), и они выпускали много scanssh команды. Они также изменили пароль для учетной записи, в которую они вошли (это была учетная запись моего ребенка, и пароль был легко угадать - ему только 6!).

Хорошо, поэтому я оставил некоторые порты открытыми - моя вина полностью. Мне повезло, что аккаунт ограничен. Был также файл с именем W2ksp3.exe (или что-то подобное) в домашней папке учетной записи. Поэтому я предполагаю, что кто-то использовал мой сервер для поиска компрометированных компьютеров с Windows.

Итак, моя сеть выглядит так:

интернет - eth0 - сервер - eth1 - локальная сеть

и это был сервер, который был взломан. Сервер использует dnsmasq для поиска DNS и DHCP-сервер для локальной сети.

Это приводит меня к двум вопросам:

  1. Как настроить брандмауэр (iptables?) заблокировать все на eth0 кроме http, исходящего ftp, электронной почты и всего остального, необходимого для доступа в интернет?

  2. Как мне остановить вход через eth0 но позвольте им через eth1

5 ответов

Хорошие ответы до сих пор, но я также добавил бы, что создание маршрутизатора между вашим сервером и остальным интернетом, вероятно, не является плохой идеей, если у вас действительно нет веских причин не делать этого. Если ничто иное, как дверь в вашем доме / квартире / месте жительства / жилище, - это препятствует людям бродить и осматриваться, даже если им нечего видеть.

Чтобы отключить SSH на определенных интерфейсах, просто выполните следующие действия:

Сначала найдите IP-адрес сервера на eth1 с помощью ifconfig или какой-то другой метод. Это может быть, например, 192.168.0.12,

Откройте свой /etc/ssh/sshd_config файл (sudo nano /etc/ssh/sshd_config) и добавьте отредактируйте следующую строку:

#ListenAddress 0.0.0.0

(что означает "слушать все интерфейсы") к этому:

ListenAddress 192.168.0.12

(что означает "только прослушивать соединения с интерфейса, которому принадлежит этот IP").

Затем перезапустите сервер SSH:

sudo /etc/init.d/ssh restart

Теперь он должен принимать соединения только от этого интерфейса.

Просто закройте порт, выставленный на всеобщее обозрение. Обычно это контролируется маршрутизатором, который вы используете. В случае ssh это порт 22.

Для первого вопроса вам необходимо настроить брандмауэр. Если ваш сервер полностью открыт для Интернета, это настоятельно рекомендуется. Возможно, вы захотите взглянуть на Ubuntu Wiki. Если у вас есть маршрутизатор, он может сделать это для вас.

Во второй части вы можете настроить sshd на прослушивание только локальных адресов. Это, конечно, при условии, что ваш eth1 имеет статический ip. В вашем /etc/ssh/sshd_config изменить ListenAddress линия. Это должно выглядеть как ListenAddress 10.10.0.1:22 где вы заменяете свой статический eth1 ip.

И зачем вашему 6-летнему ребенку нужен доступ в оболочку к вашему серверу?

Я рекомендую разместить маршрутизатор между вашим сервером и Интернетом. Это простой способ получить первую линию обороны.

Если вы когда-нибудь захотите включить ssh извне, рекомендуется отключить аутентификацию по паролю и оставить только аутентификацию с открытым ключом. Таким образом, вы защищены от попыток подбора пароля: ssh можно использовать только в учетной записи, для которой вы намеренно создали authorized_keys файл, и только если злоумышленник каким-то образом получил ваш закрытый ключ. (Вы по-прежнему уязвимы для удаленных уязвимостей в OpenSSH, но они крайне редки и обычно исправляются быстро.)

Убедитесь, что у вас есть следующие настройки в /etc/ssh/sshd_config:

PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
Другие вопросы по тегам