Я написал свой первый файл правил 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
где-то. Кроме того, я бы не отбрасывал все исходящие пакеты.
Разрешить создание новых сеансов. Ответ @Lain имеет небольшую проблему, он не выполняет проверку состояния. Этого можно добиться, выполнив следующие действия:
-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
Разрешить установленные сеансы
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Разрешить весь исходящий трафик
-P OUTPUT ACCEPT
Разрешить только исходящий трафик, который является ответом на принятый ввод. Это может быть полезно, если вы хотите усилить исходящий трафик.
-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", в верхней части набора правил, так как они часто сопоставляются. Правила, инициирующие сеансы, будут использоваться только один раз за сеанс.