Я новичок в iptables и пытаюсь понять, правильно ли я настроил свой набор правил. Что касается -P ВВОД ПРИНЯТЬ Часть моего вопроса, я пытаюсь определить, действительно ли это в контексте правил, которые я хочу применить. Пожалуйста, смотрите ниже для получения дополнительной информации.
я использовал iptables-восстановление с файлом, содержащим следующие правила. По сути, я пытаюсь разрешить кольцевой трафик, установленные / связанные соединения, SSH и HTTP. Весь остальной трафик следует отклонить.
*filter
:fail2ban-ssh - [0:0]
# Input chain rules
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
# Reject all other inbound traffic
-A INPUT -j REJECT
# Output chain rules
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# Forward chain rules
-A FORWARD -j REJECT
# fail2ban-ssh chain rules
-A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
COMMIT
Если я сбегу iptables -S, Я получаю следующий вывод:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
Я немного почитал iptables и понимаю, что первые несколько строк (например, "-P ВВОД ПРИНЯТЬ") по сути означает, что действие по умолчанию, если ни одно из других правил не применяется, - это принимать трафик (в данном случае для ввода, пересылки и вывода).
Если это так, следует ли мне явно поместить следующие строки в свой файл правил и снова восстановить iptables?
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
Заранее большое спасибо всем, кто прочитает этот полный вопрос! Это немного длинновато, но я подумал, что необходимо включить все вышеперечисленные детали, чтобы адекватно объяснить мой сценарий.
Кстати, я просто сбросил ваши правила ( INPUT
цепь) в фффуу для извлечения упрощенной версии. Он только показывает, кто может устанавливать соединения:
ACCEPT all -- 127.0.0.0/8 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 dports: 22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 dports: 80
DROP tcp -- 146.0.77.33/32 0.0.0.0/0 dports: 22
DROP tcp -- 62.75.236.76/32 0.0.0.0/0 dports: 22
DROP all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Вы можете видеть, что ваш подход fail2ban фактически не работает: второе правило принимает все соединения ssh; правила номер 4 и 5 (правила DROP) затенены (они никогда не могут быть достигнуты).
Я предполагаю, что ваша политика по умолчанию ACCEPT
, которое вы можете видеть как последнее правило в упрощенном листинге. Как вы можете видеть, политика по умолчанию для INPUT
здесь не имеет значения, потому что второе последнее правило уже отбрасывает все пакеты, которые ранее не соответствовали правилу. Это из-за вашего -A INPUT -j REJECT
правило.
Чтобы ответить на вопрос, который вы на самом деле задали, политики должны появиться в обычном iptables-save
файл, но не в качестве аргумента -P
правила.
Вместо этого они должны появиться в начале вместе с вашим объявлением любых настраиваемых цепочек с их политиками, например:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:fail2ban-ssh - [0:0]
Дефис в вашей настраиваемой цепочке - это отсутствующий аргумент политики, поскольку в пользовательских цепочках нет политик.
Обратите внимание, что с вашим брандмауэром, как написано, если вы измените все политики на DROP
, ваш сервер будет испытывать трудности с поиском в DNS, и многие вещи будут непредсказуемыми.
По сути, помимо всего, что блокирует fail2ban, ваши текущие правила означают, что у вас нет брандмауэра.
Подумайте, как ваш брандмауэр отреагирует в следующем сценарии:
Вы используете MySQL или другую базу данных, которая прослушивает TCP-соединение для локальных соединений, но вам не нужны удаленные соединения.
Затем злонамеренный удаленный компьютер пытается получить доступ к серверу mysql через порт 3306
.
Если предположить, что fail2ban их не заблокировал, вопрос в том, поможет ли вам какое-либо из существующих правил? что о:
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
- НЕТ-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- НЕТ-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- НЕТи т. д. ничего не соответствует и DROPs соединение, поэтому ваша политика INPUT применяется и соединение принимается.
Затем рассмотрим тот же сценарий для любой другой службы, работающей на вашем компьютере - если fail2ban не заблокировал, ваш сервер их пропустит.
Так что да, я предлагаю вам добавить в свой iptables-restore
правила
-P INPUT DROP
# Any unmatched packets on FORWARD chain will be dropped
-P FORWARD DROP
Примечание: хотя правила iptables обычно не сохраняются после перезагрузки, политика будет. В этом случае приведенное выше правило заблокирует сеанс SSH, если нет соответствующего правила ACCEPT, которое было загружено после перезагрузки сервера, то есть эта политика заблокирует вас.
Лично я бы все еще использовал политику отбрасывания, но некоторые люди предпочитают оставить -P INPUT ACCEPT
и вместо этого используйте
-A INPUT DROP
как правило, в самом низу цепочки INPUT в качестве «квази» политики. Вы должны быть осторожны с этим и продолжать перечитывать свои правила при изменении файловой стены, но если вы не настроили iptables для восстановления его правил при перезагрузке, такое расположение означало бы, что вы можете вернуться к своей машине.