Назад | Перейти на главную страницу

IPtables блокирует веб-сайт, разрешающий только SSH

Я написал свой первый файл правил IPtables, чтобы попытаться защитить свой сервер на всех портах, кроме SSH и портов, необходимых для Интернета.

Вот что я придумал:

i=/sbin/iptables

# Flush all rules
$i -F
$i -X

# Setup default filter policy
$i -P INPUT DROP
$i -P OUTPUT DROP
$i -P FORWARD DROP

# Allow unlimited traffic on loopback
$i -A INPUT -i lo -j ACCEPT
$i -A OUTPUT -o lo -j ACCEPT

# Open up ports for nginx
$i -A INPUT -p tcp --dport 443 -j ACCEPT
$i -A INPUT -p tcp --dport 80 -j ACCEPT
$i -A INPUT -p tcp --dport 22 -j ACCEPT

# Make sure nothing comes or goes out of this box
$i -A INPUT -j DROP
$i -A OUTPUT -j DROP

Я знаю, что когда дело доходит до IP-таблиц, существует некое черное искусство, поэтому мне было интересно, может ли кто-нибудь вмешаться и посмотреть, является ли это правильным подходом к защите веб-сервера.

Вероятно, вы не хотите разрывать все исходящие соединения.

Возможно, вы захотите добавить правило на раннем этапе, чтобы разрешить УСТАНОВЛЕННЫЕ соединения, и при использовании таких протоколов, как ftp, вы также можете добавить RELATED к правилу, например.

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

помните, что порядок правил имеет значение - выигрывает первый матч.

Возможно, вам стоит взглянуть на эти вопросы и ответы, которые у нас есть по защите веб-сервера. Советы по защите LAMP-сервера там много полезной информации.

Вам не хватает -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT где-то. Кроме того, я бы не отбрасывал все исходящие пакеты.

INPUT цепочка

Разрешить создание новых сеансов. Ответ @Lain имеет небольшую проблему, он не выполняет проверку состояния. Этого можно добиться, выполнив следующие действия:

-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

Разрешить установленные сеансы

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

ВЫХОДНАЯ ЦЕПЬ

Опция 1

Разрешить весь исходящий трафик

-P OUTPUT ACCEPT

Вариант # 2

Разрешить только исходящий трафик, который является ответом на принятый ввод. Это может быть полезно, если вы хотите усилить исходящий трафик.

-P OUTPUT DROP
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

И пример правила для принятого исходящего трафика

-A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

. . .

И последнее замечание: держите правила, содержащие "-m state --state ESTABLISHED, RELATED", в верхней части набора правил, так как они часто сопоставляются. Правила, инициирующие сеансы, будут использоваться только один раз за сеанс.