Базовая защита веб сервера

follow

Активный пользователь
Пользователь
Регистрация
24 Окт 2019
Сообщения
44
Реакции
30
Bash:
#!/bin/bash

# Очистить все правила и цепочки
iptables -F
iptables -X

# Запретить входящий трафик по умолчанию
iptables -P INPUT DROP

# Разрешить исходящий трафик по умолчанию
iptables -P OUTPUT ACCEPT

# Разрешить локальный трафик
iptables -A INPUT -i lo -j ACCEPT

# Разрешить уже установленные соединения
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Разрешить входящий трафик на порты 22 (SSH), 80 (HTTP) и 443 (HTTPS)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Ограничить количество соединений от одного IP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP

# Защита от атак DDoS SYN Flood
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A INPUT -p tcp --syn -j DROP

# Защита от атак DDoS ICMP Flood
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

# Защита от атак DDoS UDP Flood
iptables -A INPUT -p udp -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP

# Сохранить настройки iptables
iptables-save > /etc/iptables/rules.v4
 
Bash:
#!/bin/bash

# Создаем новое множество ipset с названием "whitelist"
ipset create whitelist hash:ip hashsize 4096 maxelem 100000 timeout 300

# Добавляем в белый список IP адреса, которые не должны быть заблокированы
ipset add whitelist 192.0.2.1
ipset add whitelist 203.0.113.2

# Очищаем правила iptables
iptables -F
iptables -X
iptables -Z

# Устанавливаем политики по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Разрешаем доступ только с определенных портов
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name HTTP
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --set --name HTTPS
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -m recent --set --name MySQL

# Запрещаем доступ с других портов, кроме перечисленных выше
iptables -A INPUT -p tcp --syn -m recent --name HTTP --rcheck --seconds 10 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --syn -m recent --name HTTPS --rcheck --seconds 10 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --syn -m recent --name SSH --rcheck --seconds 60 --hitcount 5 -j DROP
iptables -A INPUT -p tcp --syn -m recent --name MySQL --rcheck --seconds 60 --hitcount 5 -j DROP

# Запрещаем доступ со всех IP адресов, которые находятся в множестве "blacklist"
iptables -A INPUT -m set --match-set blacklist src -j DROP

# Разрешаем доступ только с IP адресов, которые находятся в множестве "whitelist"
iptables -A INPUT -m set --match-set whitelist src -j ACCEPT

# Добавляем IP адреса, которые нужно заблокировать, в множество "blacklist"
ipset create blacklist hash:ip hashsize 4096 maxelem 100000 timeout 60
iptables -A INPUT -m recent --name blacklist --rcheck --seconds 60 -j DROP
iptables -A INPUT -m recent --name blacklist --set
ipset add blacklist $(dig +short myip.opendns.com @resolver1.opendns.com)

# Сохраняем правила iptables
iptables-save > /etc/iptables/rules.v4
 
Для ядра sysctl.conf
  1. Включаем защиту от DDoS-атак с помощью IP-фильтрации:
Bash:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.<интерфейс>.rp_filter = 1

  1. Ограничиваем количество открытых соединений с одного IP-адреса:
Bash:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_fin_timeout = 30

  1. Увеличиваем размер очереди входящих соединений, чтобы избежать перегрузки системы:
Bash:
net.core.somaxconn = 1024

  1. Ограничиваем количество запросов в секунду с одного IP-адреса:

Bash:
net.ipv4.tcp_max_orphans = 8192
net.ipv4.tcp_max_tw_buckets = 8192
net.ipv4.tcp_tw_reuse = 1

  1. Ограничиваем количество UDP-пакетов, обрабатываемых системой:

Bash:
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384

  1. Ограничиваем количество ICMP-пакетов, обрабатываемых системой:
Bash:
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

Применяем: sysctl -p

  1. net.ipv4.conf.*.rp_filter:
    • net.ipv4.conf.all.rp_filter = 1: Включает Reverse Path Filtering на всех интерфейсах.
    • net.ipv4.conf.default.rp_filter = 1: Устанавливает значение по умолчанию для Reverse Path Filtering на всех интерфейсах.
    • net.ipv4.conf.<интерфейс>.rp_filter = 1: Включает Reverse Path Filtering для определенного интерфейса.
  2. net.ipv4.tcp_syncookies = 1: Включает использование SYN cookies для защиты от SYN flood атак.
  3. net.ipv4.tcp_max_syn_backlog = 2048: Устанавливает максимальное количество очереди SYN в ожидании ответа.
  4. net.ipv4.tcp_synack_retries = 2: Количество попыток повторного отправления SYN-ACK пакета, перед тем как соединение будет считаться неудачным.
  5. net.ipv4.tcp_syn_retries = 5: Количество попыток повторного отправления SYN пакета, перед тем как соединение будет считаться неудачным.
  6. net.ipv4.tcp_fin_timeout = 30: Время ожидания закрытия соединения после отправки FIN пакета.
  7. net.core.somaxconn = 1024: Устанавливает максимальное количество очереди соединений, ожидающих акцепт (принятия) со стороны сервера.
  8. net.ipv4.tcp_max_orphans = 8192: Максимальное количество соединений, которые могут быть "сиротами" (без файлового дескриптора).
  9. net.ipv4.tcp_max_tw_buckets = 8192: Максимальное количество TIME_WAIT соединений.
  10. net.ipv4.tcp_tw_reuse = 1: Позволяет повторное использование TIME_WAIT соединений для новых соединений.
  11. net.ipv4.udp_mem = 65536 131072 262144: Определяет минимальный, давление и максимальный размер буфера для UDP.
  12. net.ipv4.udp_rmem_min = 16384: Минимальный размер приемного буфера для UDP.
  13. net.ipv4.udp_wmem_min = 16384: Минимальный размер передающего буфера для UDP.
  14. net.ipv4.icmp_echo_ignore_broadcasts = 1: Запрещает отвечать на ICMP echo запросы, отправленные на широковещательные адреса.
  15. net.ipv4.icmp_ignore_bogus_error_responses = 1: Игнорировать поддельные ICMP-ошибки, которые могут быть вызваны атаками.
  1. net.ipv4.ip_forward = 0: Отключает IP forwarding, что предотвращает использование данной машины в качестве маршрутизатора.
  2. net.ipv4.conf.all.accept_redirects = 0 и net.ipv4.conf.default.accept_redirects = 0: Запрещает принимать ICMP redirect пакеты. Это уменьшает вероятность атак типа man-in-the-middle.
  3. net.ipv4.conf.all.send_redirects = 0 и net.ipv4.conf.default.send_redirects = 0: Запрещает отправлять ICMP redirect пакеты. Это улучшает безопасность сети.
  4. net.ipv4.tcp_keepalive_time = 7200, net.ipv4.tcp_keepalive_intvl = 75 и net.ipv4.tcp_keepalive_probes = 9: Эти параметры настраивают принцип работы TCP keepalive. Значения устанавливают время между пакетами keepalive, интервал между повторными попытками и количество попыток.
  5. net.ipv4.tcp_rfc1337 = 1: Включает защиту от атаки TIME_WAIT, которая может привести к утечке информации.
  6. net.ipv4.tcp_window_scaling = 1: Включает масштабирование окна TCP, что позволяет использовать более высокие скорости передачи данных.
  7. net.ipv4.tcp_sack = 1 и net.ipv4.tcp_fack = 1: Включает использование Selective Acknowledgements (SACK) и Forward Acknowledgements (FACK) для улучшения производительности TCP в случае потери пакетов.
  8. net.ipv4.tcp_timestamps = 1: Включает использование TCP timestamps, что улучшает производительность и предотвращает атаки типа PAWS (что является улучшенной версией атаки на время ожидания).
  9. net.ipv4.tcp_congestion_control = cubic: Устанавливает алгоритм контроля перегрузки TCP (в данном случае CUBIC). Контроль перегрузки помогает справляться с перегрузками сети и минимизировать потерю пакетов.
  10. net.ipv4.tcp_moderate_rcvbuf = 1: Включает автоматическую настройку размера приемного буфера TCP, что может улучшить производительность в некоторых случаях.
 
Последнее редактирование:

Реклама

Сверху