Я пытался собрать базовый серверный сценарий iptables, который будет работать для большинства сайтов, просто использующих базовый веб-сервер с использованием HTTP (S) и SSH (порты 80, 443 и 22). В конце концов, большинству VPS нужны только эти правила запуска портов, и они могут добавлять почтовые или игровые порты позже, когда это необходимо.
Пока у меня есть следующий набор правил, и мне было интересно, если кто-нибудь знает о лучшем сценарии или каких-либо улучшений, которые могут быть добавлены.
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections (only 4 attempts by an IP every 3 minutes, drop the rest)
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
iptables является одной из самых важных частей защиты вашего устройства (см. также fail2ban), и тем не менее многим людям, подобным мне, трудно понять все, что связано с созданием базового безопасного межсетевого экрана для наших серверов.
Какой самый безопасный способ открыть только основные порты, необходимые для веб-сервера?
Обновление: у cyberciti.biz есть еще один скрипт iptables, который выглядит довольно неплохо.
Кроме того, вместо использования Denyhosts или fail2ban вы можете использовать сам iptables, чтобы заблокировать неудачные повторные попытки SSH .
modprobe
он не установлен (или перед открытием порта 22 возникнет какая-либо другая ошибка), вы заблокируете себя на сервере.Ответы:
Самый безопасный способ работы с iptables - закрыть все и открыть только то, что вам нужно. Я немного отвлечен, поэтому я всегда стараюсь быть как можно более ленивым, поэтому я не делаю ошибок, которые могут привести к небезопасности сервера.
Я использую это, только небольшое переменное назначение должно быть сделано, чтобы заставить его работать.
Я использую его в течение некоторого времени, и любые изменения будут очень полезны, если им будет легче управлять.
источник
Это выглядит довольно хорошо, но вы могли бы немного ужесточить ситуацию. Флаг -s - это исходный IP-адрес или имя домена, и вы добавляете «-s 198.23.12.32» или любой другой ваш IP-адрес, чтобы разрешить SSH только из исходного IP-адреса. Вы также можете выбрать диапазон исходных IP-адресов, используя нотацию в стиле CIDR .
Вы должны соблюдать осторожность при регистрации отклоненных вызовов. IP-адрес вашего сервера будет проверяться ботами, сценаристами и т. Д., А файл журнала может быстро увеличиться. Если вы не пытаетесь диагностировать конкретную проблему, которая, по вашему мнению, может быть связана с тем, кто пытается сломать ваш брандмауэр, я бы удалил эту опцию.
Вы также можете привязать в fail2ban к iptables для псевдо-IDS. fail2ban сканирует ваши файлы журнала и может заблокировать IP-адрес, если они попытаются проникнуть в вашу систему. Например, если определенному IP-адресу не удается войти в SSH 5 раз, вы можете заблокировать его на весь день. Он также работает по FTP и многим другим (включая плохих ботов, поражающих Apache). Я использую его на всех своих серверах, чтобы обеспечить дополнительную защиту от атак методом перебора.
источник
Посмотрите на Shorewall. Конфигурация по умолчанию для одного интерфейса будет хорошей отправной точкой. Он прост в настройке и имеет макросы для таких вещей, как SSH и веб-доступ. Можно настроить блокировку сервера до требуемого уровня при выключении брандмауэра. С Shorewall-lite вы можете запустить сборку брандмауэра на другом сервере. Ведение журнала легко настроить на желаемый уровень.
Для базового HTTP-сервера вы хотите открыть входящий доступ к порту 80 и порту 443, если вы используете HTTPS. SSH входящий доступ с нескольких ограниченных адресов обычно желателен. Вы также можете заблокировать исходящий доступ. Откройте брандмауэр только для необходимых серверов и служб. Должны быть открыты NTP и DNS, а также канал для извлечения исправлений.
источник
Я бы сказал, что это довольно хороший межсетевой экран, за исключением того, что он предназначен для остановки входящего трафика и не ориентирован на исходящий или исходящий трафик. Во многих случаях так же важно сосредоточиться на исходящих соединениях из коробки, как и на входящих. В неудачном случае, когда машина фактически эксплуатируется, было бы неплохо иметь возможность предотвратить загрузку дополнительных корневых комплектов или подключение к узлам управления и контроля, или что-либо еще.
BillThor начал говорить об этом выше, но я просто отвечаю конкретными примерами. Одна из приятных особенностей iptables заключается в том, что он может запоминать состояние соединения, это может влиять на производительность сайтов с интенсивным движением, но вы можете изменить свой входящий доступ по http / https, чтобы разрешить, например, ответ только на установленных соединениях, или специально ограничить определенные непривилегированные пользователи имеют исходящий доступ вообще. Тогда ваши исходящие правила будут иметь предложения RELATED, ESTABLISHED, которые будут предотвращать целый ряд вспомогательных атак и замедлять те, которые требуют вторичной стадии для фактического использования бокса, что очень часто встречается.
Наконец, я бы сказал, что лучше установить политику iptables -P DROP, а не добавлять в конце REJECT. В основном это вопрос предпочтений, но он может уменьшить количество ошибок при добавлении в цепочки с существующими правилами вместо вставки или очистки / сброса.
источник
-A INPUT -j REJECT
на-A INPUT -P DROP
?