Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Правила безопасности

Правила безопасности

С развитием облачных хостингов и утилит для DevOps, всё чаще настройку серверов делают сами разработчики. И увы, часто они не соблюдают примитивные правила безопасности, снижая общий уровня защищенности серверов. В своем докладе я постараюсь дать несколько простых, но действенных советов, которые помогут снизить уровень риска и защититься от различных видов атак.

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

December 22, 2015
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Аргументы • Мы на эту тему не думали. А что-то

    не так? • Ну да, мы собираемся, но пока руки не доходят • Да кому мы нужны? Мы не гугл какой-нибудь • Да там нечего красть.
  2. Аргументы • Нет-нет, всё впорядке, продолжайте • Сигнализацию на машину

    тоже не сразу поставили? • Мы живем в эпоху массовых нецелевых взломов. Примероно 70% взломов - нецелевые. • Malware, SPAM, Botnet
  3. ssh

  4. /var/log/auth.log sshd[7023]: Invalid user phpmyadmin from 123.123.123.1 sshd[7023]: input_userauth_request: invalid

    user phpmyadmin [preauth] sshd[7023]: pam_unix(sshd:auth): check pass; user unknown sshd[7023]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=123.123.123.1 sshd[7023]: Failed password for invalid user phpmyadmin from 123.123.123.1 port 36817 ssh2 sshd[7023]: Received disconnect from 123.123.123.1: 11: Bye Bye [preauth]
  5. iptables • Часть ядра Linux • Невероятно гибкий • Вплоть

    до анализа содержимого пакетов (критерий u32)
  6. iptables • Часть ядра Linux • Невероятно гибкий • Вплоть

    до анализа содержимого пакетов (критерий u32) • Поддерживает ipv6
  7. iptables • Часть ядра Linux • Невероятно гибкий • Вплоть

    до анализа содержимого пакетов (критерий u32) • Поддерживает ipv6 • Требует навыков
  8. iptables • Часть ядра Linux • Невероятно гибкий • Вплоть

    до анализа содержимого пакетов (критерий u32) • Поддерживает ipv6 • Требует навыков • Можно напортачить и вообще потерять доступ к серверу
  9. iptables -A INPUT -p tcp -i any -m conntrack --ctstate

    NEW --dport 22 -m recent -- update --seconds 15 -j DROP iptables -A INPUT -p tcp -i any -m conntrack --ctstate NEW --dport 22 -m recent -- set -j ACCEPT iptables
  10. iptables -A INPUT -p tcp -i any -m conntrack --ctstate

    NEW --dport 22 -m recent -- update --seconds 15 -j DROP iptables -A INPUT -p tcp -i any -m conntrack --ctstate NEW --dport 22 -m recent -- set -j ACCEPT iptables
  11. iptables -A INPUT -p tcp -i any -m conntrack --ctstate

    NEW --dport 22 -m recent -- update --seconds 15 -j DROP iptables -A INPUT -p tcp -i any -m conntrack --ctstate NEW --dport 22 -m recent -- set -j ACCEPT iptables
  12. iptables -A INPUT -p tcp -i any -m conntrack --ctstate

    NEW --dport 22 -m recent -- update --seconds 15 -j DROP iptables -A INPUT -p tcp -i any -m conntrack --ctstate NEW --dport 22 -m recent -- set -j ACCEPT iptables
  13. iptables -A INPUT -p tcp -i any -m conntrack --ctstate

    NEW --dport 22 -m recent -- update --seconds 15 -j DROP iptables -A INPUT -p tcp -i any -m conntrack --ctstate NEW --dport 22 -m recent -- set -j ACCEPT iptables
  14. iptables -A INPUT -p tcp -i any -m conntrack --ctstate

    NEW --dport 22 -m recent -- update --seconds 15 -j DROP iptables -A INPUT -p tcp -i any -m conntrack --ctstate NEW --dport 22 -m recent -- set -j ACCEPT iptables
  15. DenyHosts • Написан на Python • Работает через TCP wrappers

    (/etc/hosts.allow, /etc/hosts.deny) • Работает с ssh, proftpd и всем, что правильно пишет логи в /var/log/auth. log или /var/log/secure и поддерживает TCP wrappers
  16. DenyHosts • Написан на Python • Работает через TCP wrappers

    (/etc/hosts.allow, /etc/hosts.deny) • Работает с ssh, proftpd и всем, что правильно пишет логи в /var/log/auth. log или /var/log/secure и поддерживает TCP wrappers • Email уведомления
  17. DenyHosts • Написан на Python • Работает через TCP wrappers

    (/etc/hosts.allow, /etc/hosts.deny) • Работает с ssh, proftpd и всем, что правильно пишет логи в /var/log/auth. log или /var/log/secure и поддерживает TCP wrappers • Email уведомления • Не умеет ipv6
  18. DenyHosts • Написан на Python • Работает через TCP wrappers

    (/etc/hosts.allow, /etc/hosts.deny) • Работает с ssh, proftpd и всем, что правильно пишет логи в /var/log/auth. log или /var/log/secure и поддерживает TCP wrappers • Email уведомления • Не умеет ipv6 • Не защищает от распределенных BF-атак
  19. Fail2Ban • Написан на Python • Анализирует логи • Работает

    c TCP wrappers, iptables, PF и другими фаерволами
  20. Fail2Ban • Написан на Python • Анализирует логи • Работает

    c TCP wrappers, iptables, PF и другими фаерволами • Может не только ssh, но и Apache, Lighttpd, vsftpd, qmail, Postfix
  21. Fail2Ban • Написан на Python • Анализирует логи • Работает

    c TCP wrappers, iptables, PF и другими фаерволами • Может не только ssh, но и Apache, Lighttpd, vsftpd, qmail, Postfix • Легко расширяется с помощью regex
  22. Fail2Ban • Написан на Python • Анализирует логи • Работает

    c TCP wrappers, iptables, PF и другими фаерволами • Может не только ssh, но и Apache, Lighttpd, vsftpd, qmail, Postfix • Легко расширяется с помощью regex • Email-уведомления
  23. Fail2Ban • Написан на Python • Анализирует логи • Работает

    c TCP wrappers, iptables, PF и другими фаерволами • Может не только ssh, но и Apache, Lighttpd, vsftpd, qmail, Postfix • Легко расширяется с помощью regex • Email-уведомления • Не умеет ipv6
  24. Fail2Ban • Написан на Python • Анализирует логи • Работает

    c TCP wrappers, iptables, PF и другими фаерволами • Может не только ssh, но и Apache, Lighttpd, vsftpd, qmail, Postfix • Легко расширяется с помощью regex • Email-уведомления • Не умеет ipv6 • Не защищает от распределенных BF-атак
  25. FTP

  26. FTP

  27. VPN

  28. iptables -A INPUT -p tcp -s 10.0.0.1 --dport 3306 -j

    ACCEPT iptables -A INPUT -p tcp -s 10.0.0.2 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP iptables на сервере БД
  29. Например $ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")

    > foo.txt $ redis-cli -h 192.168.1.11 echo flushall $ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
  30. Например $ redis-cli -h 192.168.1.11 192.168.1.11:6379> config set dir /home/redis/.ssh/

    OK 192.168.1.11:6379> config get dir 1) "dir" 2) "/home/redis/.ssh/" 192.168.1.11:6379> config set dbfilename "authorized_keys" OK 192.168.1.11:6379> save OK
  31. Каждый процесс от отдельного юзера • nginx • supervisor •

    Redis • База данных • Ваше приложение
  32. Один пользователь - один проект ubuntu@server:~$ ls -la total 72

    drwxr-xr-x 11 ubuntu ubuntu 4096 Nov 5 10:01 . drwxr-xr-x 4 root root 4096 Dec 19 2014 .. drwxr-xr-x 8 ubuntu ubuntu 4096 Mar 27 2015 project_1 drwxr-xr-x 8 ubuntu ubuntu 4096 Nov 3 11:06 project_2 drwxr-xr-x 8 ubuntu ubuntu 4096 Dec 9 00:19 project_99
  33. Один пользователь - один проект ubuntu@server:~$ ls -la total 72

    drwxr-xr-x 11 ubuntu ubuntu 4096 Nov 5 10:01 . drwxr-xr-x 4 root root 4096 Dec 19 2014 .. drwxr-xr-x 8 ubuntu ubuntu 4096 Mar 27 2015 project_1 drwxr-xr-x 8 ubuntu ubuntu 4096 Nov 3 11:06 project_2 drwxr-xr-x 8 ubuntu ubuntu 4096 Dec 9 00:19 project_99
  34. Один пользователь - один проект ubuntu@server:~$ ls -la total 72

    drwxr-xr-x 11 ubuntu ubuntu 4096 Nov 5 10:01 . drwxr-xr-x 4 root root 4096 Dec 19 2014 .. drwxr-xr-x 8 project1 project1 4096 Mar 27 2015 project_1 drwxr-xr-x 8 project2 project2 4096 Nov 3 11:06 project_2 drwxr-xr-x 8 project99 project99 4096 Dec 9 00:19 project_99
  35. Один пользователь - один проект ubuntu@server:~$ ls -la total 72

    drwxr-xr-x 11 ubuntu ubuntu 4096 Nov 5 10:01 . drwxr-xr-x 4 root root 4096 Dec 19 2014 .. drwxr-xr-x 8 project1 project1 4096 Mar 27 2015 project_1 drwxr-xr-x 8 project2 project2 4096 Nov 3 11:06 project_2 drwxr-xr-x 8 project99 project99 4096 Dec 9 00:19 project_99
  36. ACL - тонкая настройка прав доступа Допустим статика лежит в

    /path/to/static/ setfacl -m u:www-data:x /path/ setfacl -m u:www-data:x /path/to/ setfacl -Rm u:www-data:rx /path/to/static/ setfacl -Rm d:u:www-data:x /path/to/static/