ГлавнаяРегистрацияВходВ закладки

Главная » Статьи » CentOS » Безопасность
Настраиваем Iptables для защиты веб сервера
Настраиваем Iptables для защиты веб-серверы

Как известно безопасности серверы не легко, но очень нужно, а тем более когда речь идет о веб-сервере, который живет под "огонь" izvne.Dlya защитить наши серверы использовать IPTables (как вы поняли, в статья будет сосредоточена на Linux).

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

И так, начнем писать правила:


[-hide-]1. Первым делом очистим существующую таблицу правил:

# iptables -F

2. Добавляем первое правило которое позволяет нам не потерять удаленный контроль на сервером (по умолчанию порт SSH – 22, у вас может быть другой):

# 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 атак:

# iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Разрешаем пакеты по протоколам tcp\udp создающие новые подключения (например у меня без этих правил некорректно работала админка Вордпресса и не открывался один из виртуальных сайтов).

# iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

# iptables -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
Разрешаем трафик для необходимых служб

# iptables -A INPUT -i eth0 -p tcp --dport 21 -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 tcp --dport 25 -j ACCEPT

# iptables -A INPUT -i eth0 -p udp --sport 53 -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.

Далее пропишем правила защищаюшее наш ssh порт от брутфорса (подбора паролей роботами):

# iptables -A INPUT -p tcp --syn --dport 22 -m recent --name radiator --set

# iptables -A INPUT -p tcp --syn --dport 22 -m recent --name radiator --update --seconds 30 --hitcount 3 -j DROP
Теперь робот после трех попыток в течении 30 секунд подобрать пароль – отваливается.

Если вам здесь необходимо установить полностью доверительные отношения между двумя серверыми то делаем так:

# iptables -A INPUT -p tcp --source {ip-адрес удаленного серверы} -j ACCEPT

# iptables -A INPUT -p udp --source {ip-адрес удаленного серверы} -j ACCEPT
На этом с основными правилами все, хотя шаманить можно и дальше.

5. Сохраняем наши новые правила и прописываем их в конфигурационный файлик, дабы они не потерлись после перезагрузки системы.

# iptables-save

# iptables-save > /etc/sysconfig/iptables

Посмотреть текущую таблицу фильтрации можно так:

# iptables -L

Удаление определенных правил.

При помощи следующей команды смотрим номер правила, которое нам здесь необходимо удалить:

# iptables -L INPUT --line-number
Запомним номер и удалим правило под номером 2:

# iptables -D INPUT 2

Если возникли проблемы и режется то ,что не должно резаться включаем логирование

# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "INPUT packet: "
Как вы видите я выставил лимит в 3 минуты, дабы логи не забили все пространство на жестком диске

Теперь пропишем следующую строчку kern.=debug -/var/log/messages в syslog.conf

Смотрим ссыпающиеся логи /var/log/messages

Теперь наш веб сервер защищен фаерволлом на основе iptables.

Примечание:

апперанд A -добававляет правило в конец указанной цепочки.

апперанд I – добававляет правило в начало цепочки[-hide-]
Просмотров: 8991
Дата: 2011-07-17 20:36:11
Комментариев: 0
Источник: