Server Security

Материал из ALT Linux Wiki
Версия от 15:55, 28 июля 2008; DmitriyKruglikov (обсуждение | вклад) (Import from freesource.info)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Краткие заметки по минимальной защите сервера

На написание данного черновика навел меня вопрос в рассылке:

hi all Скажу сразу, я не спец по безопасности... ... PS вопрос возник после того, как только что подняв машину завёл пользователя admin c паролем admin (думал когда закончу работу поменяю) поставил ssh и... пошёл на 10 мин в туалет. Когда вернулся дело было уже сделано - уже кто-то приконектился и начал что-то на мою машину заливать. Удивительно даже - маньяки какие-то... Я ж не супер-мега сервер какой-то, а рядовой

adsl-щик.

В этой заметке я хочу собрать советы и рекомендации, скорее идеи, как настроить некоторый уровень безопасности сервера или рабочей станции, при подключении к Интернет. Эти рекомендации ни в коем случае не обеспечат абсолютной защиты вашего сервера (такой не существует), но большинство атак отразить помогут.

И так:

Проверяем, какие сервисы запущены и слушают порты

После установки необходимого ПО, проверьте, какие порты открыты.
# netstat -nap
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
...
tcp        0      0 0.0.0.0:993                 0.0.0.0:*                   LISTEN      5584/cyrus-master  
...
Приведенная строка информирует нас о том, что на всех сетевых адресах открыт порт 993, и слушает его cyrus-master .

Да, я уверен, что этот сервис должен слушать этот порт (это IMAPS). Надписи вида 127.0.0.1:xxx в третьей колонке означают, что сервис работает только в пределах самой машины (считается безопасным). Если вы обнаружите открытый порт и сервис, который вам не известен, разберитесь досконально, что это и для чего нужно, прежде чем отключать. Если данный сервис нужен в локальной сети, но не должен быть доступен извне, посмотрите в настройки данного сервиса, наиболее вероятным параметром будет LISTEN .... Например, настройки сервера ssh:

# cat /etc/openssh/sshd_config
...
#Port 22
#ListenAddress 0.0.0.0
#ListenAddress ::
...

В моем примере данная настройка не используется, а вы поступайте по своему разумению.

Настраиваем firewall

Возможна ситуация, когда необходимый сервис не имеет такой настройки, и слушает все сетевые интерфейсы. В таком случае необходимо настроить iptables. (Я предполагаю, что у вас именно этот пакет. В другом случае, берите на вооружение идею, а реализуйте ее тем инструментарием, который у вас есть). Есть два пути настройки iptables, использовать тот файл настроек, который предусмотрен дистрибутивом, и написание собственного скрипта. Различий мало... Я привожу вариант настроек для /etc/sysconfig/iptables.

# Выдержки из файла конфигурации
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
# Создаем два новых канала
:input_ext - [0:0]
:input_int - [0:0]
-A INPUT -i lo -j ACCEPT
# Пакеты с адресами внутренней сети не имеют права выходить во внешние каналы
-A OUTPUT -s 192.168.0.0/255.255.255.0 ! -o eth0 -j DROP
# Эти строки разрешают уже открытые соединения
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT 
#  Перенаправляем входящие пакеты с различных интерфейсов в разные каналы
-A INPUT -i eth0 -j input_int 
-A INPUT -i ! eth0 -j input_ext 
# Ловушки для взломщиков SSH
-A input_ext -p tcp -m state --state NEW --dport 22 -m recent --name sshattack --set
-A input_ext -p tcp -m state --state ESTABLISHED --tcp-flags FIN,ACK FIN,ACK --dport 22 -m recent --name sshattack --set
-A input_ext -p tcp -m state --state ESTABLISHED --tcp-flags RST RST --dport 22 -m recent --name sshattack --set
-A input_ext -m recent --name sshattack --update --seconds 60 --hitcount 4 -m limit --limit 4/minute -j LOG --log-prefix SSH_attack:_
-A input_ext -m recent --name sshattack --update --seconds 60 --hitcount 4 -j DROP
# Ловушки для сканеров (на этих портах дежурит portcentry)
-A input_ext -p tcp -m tcp --dport 1 -j ACCEPT
-A input_ext -p tcp -m tcp --dport 7 -j ACCEPT
-A input_ext -p tcp -m tcp --dport 15 -j ACCEPT
-A input_ext -p udp -m udp --dport 1 -j ACCEPT
-A input_ext -p udp -m udp --dport 7 -j ACCEPT
-A input_ext -p udp -m udp --dport 15 -j ACCEPT
-A input_ext -p tcp -m tcp --dport 23 -j ACCEPT
# Рабочие порты (тут дежурят настоящие сервисы)
-A input_ext -p tcp -m tcp --dport 25 -j ACCEPT
-A input_ext -p tcp -m tcp --dport 22 -j ACCEPT
-A input_ext -p tcp -m tcp --dport 993 -j ACCEPT
# Все, в чем я не уверен...  Может быть это параноя...
-A input_ext -p tcp -m tcp --dport 21 -j DROP 
-A input_ext -p tcp -m tcp --dport 80 -j DROP 
-A input_ext -p tcp -m tcp --dport 111 -j DROP 
-A input_ext -p tcp -m tcp --dport 113 -j DROP 
-A input_ext -p tcp -m tcp --dport 135 -j DROP 
-A input_ext -p tcp -m tcp --dport 139 -j DROP 
-A input_ext -p tcp -m tcp --dport 143 -j DROP 
-A input_ext -p tcp -m tcp --dport 389 -j DROP 
-A input_ext -p tcp -m tcp --dport 445 -j DROP 
-A input_ext -p tcp -m tcp --dport 621 -j DROP 
-A input_ext -p tcp -m tcp --dport 631 -j DROP 
-A input_ext -p tcp -m tcp --dport 653 -j DROP 
-A input_ext -p tcp -m tcp --dport 2000 -j DROP

Более подробно почитайте на странице, подготовленной Виталием Липатовым.

Настраиваем сервисы

SSH Минимально, нужно ограничить вход в систему для пользователей, которым это не нужно. Оставим только того, кто реально может и должен иметь доступ (и ограничим скорость попыток подключений).

# cat /etc/openssh/sshd_config
...
AllowUsers yourname
AllowGroups wheel
DenyUsers bin nobody sys
DenyGroups users
...
MaxStartups 3:50:6
PermitRootLogin no
...

По минимуму, все ... Далее, имеет смысл правильно настроить ваш почтовый сервер, для того, чтобы через него не рассылали спам, но это уже другая статья (В конфигураций по умолчанию дистрибутивов ALT почтовик не смотрит в Интернет).