Минимальная настройка iptables для LAMP

Минимум настроек правил iptables для работу вебсервера LAMP (Linux, Apache|Nginx, MySQL, PHP):

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable

Показанный выше пример — суперминимализм.

Посмотрите на первую команду:

iptables -A INPUT -i lo -j ACCEPT

Она говорит фаерволлу: “Принимать любой трафик на loopback интерфейс ”.

Далее

iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

Используется специальный модуль называемый ‘conntrack’, который отслеживает установку соединения. Это правило указывает на то что нужно принимать уже установленные и связанные с ними соединения.

Следующее правило:

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

предписывает принимать весь трафик на порту 22 (порт по умолчанию для SSH).

Следуюее правило:

iptables -A INPUT -p tcp –dport 80 -j ACCEPT

принимать трафик HTTP на порту 80.

Последнее правило в этом списке:

iptables -A INPUT -j REJECT –reject-with icmp-host-unreachable

использует специальную директиву для цепочки — “REJECT”, которая отклоняет пакеты. Указанные ICMP пакеты будут отклонены с сообщением “host unreachable” которое разрывает подключение к серверу.

Теперь о тех вещах которые были намеренно опущены. Если ваш сервер не выступает внешним сервером базы данных MySQL для других серверов вам не требуется разрешать трафик MySQL. Поэтому в правилах нет разрешающего подключения к MySQL (локальный трафик mysql обрабатывается по правилу трафика для loopback интерфейса добавленного первой строкой). PHP нет смысла слушать что-то снаружи, так как он слушает только 127.0.0.1:9000 (по умолчанию, например, в PHP 5.3.x, на Ubuntu Precise), или вообще через UNIX сокет /var/run/php-fpm.sock (как это сделано в PHP 5.4.x, на Ubuntu Quantal и позже). То есть PHP трафик будет только локальный, и будет так же покрывать потребности по его разрешению первым правилом. Так что не требуется отдельного правила для трафика PHP.

В правилах нет фильтрации ICMP пакетов — таких как PING. Это минимальная настройка, для того чтобы потом её можно было доработать под себя. В этих настройках нет настроек фильтрации ICMP трафика, он будет резаться! С одной стороны это хорошо, вы не получите от кого-то здоровенный пинг (Pings of Death), и не будете фонить на всю сеть изнутри сети, с другой — если вам это понадобится сделать — вам придется заняться настройкой самим.

Подробное описание работы с iptables можно прочитать тут: http://www.opennet.ru/docs/RUS/iptables/

Оцените статью
( Пока оценок нет )
Блог админа