Add new comment

Защита сервера Linux-Debian7

Безопасность VPS-сервера

Первым делом мы можем проверить все возможные точки входа на наш сервер.
Для этого нам послужит стандартная утилита Nmap

nmap -sS -T4 -n xxx.xxx.xxx.xx

Starting Nmap 6.00 ( http://nmap.org ) at 2016-02-14 23:30 MSK
Nmap scan report for xxx.xxx.xxx.xx
Host is up (0.078s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
49152/tcp filtered unknown

Потенциально мы видим три найболее вероятных пути для взлома.

Проведем защиту 22 порта для ssh доступа

1. Отключаем root логин.

Самый простой шаг. Очевидно, что
существует мало причин разрешения захода
root через SSH. Отключить же такой доступ
довольно просто и это позволит усилить
безопасность.

Найдем /etc/ssh/sshd_config (возможно он находиться
в другом каталоге, это зависит от
дистрибутива). В нем определим место
PermitRootLogin и заменим значение на "no":

PermitRootLogin no

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

2. Запрещаем интерактивный логон.
Следующий очевидный шаг — сделать
авторизацию не на основе вводимых
пользователем данных, а на основе ключей.

Убедившись, что ключи установленны и работают можно запретить интерактивный ввод:

PasswordAuthentication no
ChallengeResponseAuthentication no

4. Изменяем номер порта.

Большинство попыток взлома идет от
автоматических скриптов, сканирующих сеть
на наличие SSH демонов. В подавляющем
количестве случаев они пытаются вломиться
на 22 порт, что только играет нам на руку.
Изменив порт мы автоматически отсечем
большинство попыток несанкционированного
доступа.

В конфиге стоит поменять:

Port 22

5.Установка Fail2ban
Fail2ban

Первая линия обороны, на которую необходимо обратить внимание – это защита SSH-сервиса. VPS-сервер находится на удалении от администратора и может управляться только с помощью SSH. И есть немало желающих заполучить полный доступ к серверу. Проводятся и брутфорс-атаки, подбирают пароли. Нагружаются сервера постоянными соединениями.

Бороться с этим довольно просто. Достаточно на сервере установить и настроить пакет fail2ban.

На сервере под управлением Debian/Ubuntu даем команду:

$ sudo apt-get install fail2ban

После чего, при попытке подобрать пароль, уже после 6 соединения ip-адрес будет заблокирован на 10 минут. Чего вполне достаточно для того, чтобы избежать успешной атаки.

Для проверки числа попыток подбора паролей можно воспользоваться командой:

cat /var/log/auth.log* | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c

Пример вывода лога

213 Jan 16
1239 Jan 17
764 Jan 18
456 Jan 19
336 Jan 20
1585 Jan 21
2642 Jan 22
6294 Jan 23
1704 Jan 24
1538 Jan 25
3121 Jan 26
1443 Jan 27
1948 Jan 28
2133 Jan 29
1014 Jan 30
1800 Jan 31
906 Feb 1
1722 Feb 2
2568 Feb 3
2966 Feb 4
5729 Feb 5
4609 Feb 6
2589 Feb 7
3028 Feb 8
4276 Feb 9
3431 Feb 10
3863 Feb 11
2121 Feb 12
1915 Feb 13
700 Jun 17
10055 Jun 18
36598 Jun 19
19075 Jun 20
21970 Jun 21
55369 Jun 22
40689 Jun 23
34898 Jun 24
18912 Jun 25
13652 Jun 26
10138 Jun 27
15108 Jun 28
12831 Jun 29
13853 Jun 30
11709 Jul 1
15048 Jul 2
14267 Jul 3
18500 Jul 4
9800 Jul 5
12725 Jul 6
350 Jul 7
24 Jul 8
7 Jul 9
118 Jul 10
8 Jul 11
12 Jul 12
1457 Jul 13
1756 Jul 14
267 Jul 15
6561 Jul 16
233 Jul 17
1 Jul 18

UFW

Помимо защиты сервера от непосредственного проникновения, неплохо его защитить его от посягательств на запущенные
сервисы. Можно воспользоваться проверенным временем iptables. Куда проще воспользоваться утилитой UFW, которая используется в последних версиях Ubuntu по умолчанию. Она ставиться по умолчанию вместе с самой системой и находиться в отключенном состоянии. Все что нужно – это прописать необходимые правила и активировать фаервол.

UFW – это надстройка над iptables, которая позволяет на очень простом языке задавать правила netfilter ядра операционной системы. Синтаксис очень прост. По умолчанию разрешаются все исходящие соединения и блокируются все входящие. Проходящие пакеты запрещены по умолчанию.

$ sudo ufw status

для проверки текущего состояния фаервола и активных правил.

$ sudo ufw allow 80

для разрешения входящих соединений по 80 порту tcp/udp. Есть возможность указания используемого протокола, например 80/tcp.

Помимо указания портов, есть возможность использования шаблонов приложений, которые можно посмотреть командой

$ sudo ufw app list

И, соответственно, для включения нужного профиля, используется команда:

$ sudo ufw allow Nginx Full

Перед включением фаервола необходимо как минимум прописать разрешающее правило для SSH-соединений. Сделать это можно несколькими способами:

$ sudo ufw allow OpenSSH

или

$ sudo ufw allow 22/tcp

Теперь активируем фаервол:

$ sudo ufw enable

И расслабляемся. Теперь SSH-соединения защищены от атак перебором пароля. И сам сервер прикрыт от воздействия на опасные сервисы

Категория: 
The code has been tested and works
Мультитег: 

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.