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

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

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

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

Moscow Python Meetup

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/