1

Я недавно получил сервер CentOS от Linode.com, который я использую в качестве веб-сервера Apache со стеком LAMP.

Я заметил, что брандмауэр включен по умолчанию, но, похоже, нет активных правил.

Что мне делать в этом случае?

Должен ли я блокировать весь трафик, а затем выборочно разрешить только порт 80 и 443 для моего веб-сервера?

Существуют ли какие-либо "шаблоны брандмауэра" или руководства по основным правилам брандмауэра?

2 ответа2

2

Вы должны заблокировать все и выборочно разрешить, какие порты вам нужно. К счастью, если вы случайно заблокировали себя, вы можете получить доступ к своему Linode через консоль Lish, чтобы сбросить все ошибочные правила брандмауэра.

Вот некоторые конфигурации брандмауэра, которые я регулярно использую:

Разрешить SSH, HTTP, HTTPS

iptables -A INPUT -p tcp -m multiport --destination-ports 22,80,443 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

Если вам нужно разрешить FTP, включите порт 21 (для пассивных соединений вам может потребоваться определить дополнительный диапазон портов, который я использую 21000-21100:

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,80,443,21000:21100 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

По какой-то причине я также обнаружил, что не могу отправлять почту, используя sendmail, exim и т.д., Пока не открою порт 25 (ваша конфигурация почты обычно настраивается так, чтобы принимать только почту, отправляемую с локального сервера):

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,25,80,443,21000:21100 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

Чтобы очистить ваши правила, чтобы начать сначала, не блокируя себя, используйте следующий набор команд:

iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -F

Чтобы просмотреть текущие правила и статистику брандмауэра, вы можете использовать следующую команду:

iptables -L -nv

Также не забудьте сохранить ваши правила и убедиться, что IPTables запускается при перезагрузке.

1

Если вы заблокируете весь трафик, коробка мгновенно прекратит работу (по крайней мере, для вас).

Узнайте, какие порты вам нужны для используемых вами сервисов (а также сервисов, которые вам не нужны, но которые по-прежнему необходимы, например, BIND).

Общие важные порты для сервера:

22 TCP (SSH, but you should change this)
21 TCP (FTP, but this is insecure. Use SFTP on the SSH port.)
80, 443 TCP (HTTP/S)
53 UDP (DNS)
# use iptables -A INPUT -p (udp|tcp) --dport=$PORT -j ACCEPT

Вы также должны блокировать общие векторы атак с помощью своего брандмауэра, такие как переполнение SYN (рукопожатие TCP - SYN-SYN-ACK , причем последний SYN является комбинацией) Блокировать неустановленные соединения, которые пытаются выполнить SYN-ACK , но принимают установленные.

/sbin/iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Также не блокируйте пинг (ICMP). Вы не можете быть pinged до смерти через ICMP; было бы гораздо эффективнее использовать TCP, и у вас есть открытые порты 80 и 443.

# Allow ICMP
/sbin/iptables -A INPUT -i eth0 -p icmp -j ACCEPT

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

/sbin/iptables -A INPUT -i lo -j ACCEPT

И если у вас есть IPv6, не забудьте сделать то же самое с ip6tables как описано выше. Почти все по какой-то причине забывают об этом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .