Memcrab налаштовуємо iptables для захисту веб сервера на базі debian або ubuntu


1. Насамперед очистимо існуючу таблицю правил:

-A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Але дозволяючи доступ на SSH на самому початку, ми потім не зможемо накласти на SSH правила щодо його захисту від перебору паролів (Bruteforce). Чому? тому, що правила в iptables застосовуються послідовно! І всі інші обмеження які б ми наклали на 22 порт нижче поточного правила, вже не мали б своєї сили.
Отже, спочатку захист самого SSH потім його доступ, потім інша конфігурація.

2.1 Для качественой захисту від брутфорса, будемо використовувати додатковий модуль який можна встановити і конфігурувати так:

# Aptitude install module-assistant xtables-addons-source
# Module-assistant prepare
# Module-assistant auto-install xtables-addons-source
# Depmod -a

2.2 Після успішної установки доп. модулів, вводимо правила для захисту SSH:

# Iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j TARPIT

# Iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

# Iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1 / hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name SSH - -hashlimit-htable-expire 60000 -j ACCEPT

# Iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN, RST, ACK SYN -j DROP

2.3 Тепер після захисту, можна відкрити SSH:

# Iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

3. Коли все готово для того щоб ми не втратили доступ, прописуємо політики за замовчуванням:

# Iptables -P INPUT DROP
# Iptables -P FORWARD ACCEPT
# Iptables -P OUTPUT ACCEPT

Отже, ланцюжком DROP, ми ріжемо все Вхідні з'єднання, іншими словами політику ми будемо налаштовувати за принципом - заборонено все, крім явно дозволеного.

Політики FORWARD і OUTPUT я залишаю відкритими, так як на мій погляд вони менш небезпечні в плані безпеки. хоча ніхто не заважає порізати і їх. Так, і не забудьте, якщо ви хочете все політики поставити в ланцюжки DROP, то додайте до правила яке дозволяє входить доступ по ssh, правило дозволяють вихідний трафік по 22 порту, інакше ви втратите віддаленої доступ. (Iptables -A OUTPUT -p tcp -i eth0 -dport 22 -j ACCEPT)

4. Тепер приступаємо до прописування основних правил для нашого веб-сервери.
- Дозволяємо ходіння трафіку по localhost:

# Iptables -A INPUT -i lo -j ACCEPT

- Робимо захист від Dos атак:

Захист від SYN-flood:

# Iptables -A INPUT -p tcp --syn -m limit --limit 1 / s -j ACCEPT
# Iptables -A INPUT -p tcp --syn -j DROP

Захист від сканерів портів:

# Iptables -A INPUT -p tcp --tcp-flags SYN, ACK, FIN, RST RST -m limit --limit 1 / s -j ACCEPT
# Iptables -A INPUT -p tcp --tcp-flags SYN, ACK, FIN, RST RST -j DROP

Захист від Ping of death:

# Iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1 / s -j ACCEPT
# Iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

- Дозволяємо трафік для необхідних служб

# Iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
# Iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
# Iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
# Iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
# Iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

# Iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 3 -j ACCEPT
# Iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 11 -j ACCEPT
# Iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 12 -j ACCEPT

Отже, що я дозволив:

порт 21 - ftp
порт 80 - http
порт 443 - https
порт 25 - smtp
порт 53 - dns
І плюс необхідні типи icmp пакетів. Так само не забуваємо. що відкритий ssh ​​порт 22.

5. Налаштовуємо стандартні вихідні і вхідні потоки

# Iptables -A INPUT -m state --state RELATED, ESTABLISHED -j ACCEPT

# Iptables -A OUTPUT -m state --state RELATED, ESTABLISHED -j ACCEPT

6. Зберігаємо наші нові правила і прописуємо їх в конфігураційний файлик, щоб вони не потерли після перезавантаження системи.

# Iptables-save
# Iptables-save> /etc/iptables.conf

Подивитися поточну таблицю фільтрації можна так:

7. Автоматичний запис і відновлення правил

додаємо в кінець файлу interfaces наступні рядки:

pre-up iptables-restore post-down iptables-save> /etc/iptables.conf

Тепер при відключенні машини правила самі будуть зберігатися, а при включенні - відновлюватися.

* Видалення певних правил.

За допомогою наступної команди дивимося номер правила, яке нам тут необхідно видалити:

# Iptables -L INPUT --line-number

Запам'ятаємо номер і видалимо правило під номером 2

# Iptables -D INPUT 2

Схожі статті