Настраиваем Iptables для защиты веб сервера
Автор: admin Раздел: Безопасность
Настраиваем 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-] |