Запутался с UFW

Я хочу, чтобы ufw блокировал все на моем внешнем интерфейсе (enp6s0), но разрешил все на моих внутренних (br0, tap0).

У меня были огромные проблемы с этим (ufw блокировал вещи на br0, хотя я установил правило, разрешающее включение для enevrything), поэтому я установил для ufw значение по умолчанию, разрешающее все, а затем начал добавлять исключения для интерфейса, который я хочу заблокировать. Примерно так:

ufw deny in on enp6s0 to any port 67 proto udp

У меня есть несколько таких для каждого порта, к которому я не хочу получать доступ извне. Но это решение делает меня неловким: в основном я оставляю все открытым, просто не слушая его. Рано или поздно я забуду что-то защитить.

Итак, я пошел по другому пути и хотел создать набор правил, которые позволили бы определенным портам, но запрещали бы все остальное, например:

ufw insert 1 allow in on enp6s0 from any port ssh proto tcp
ufw insert 2 allow in on enp6s0 from any port http proto tcp
ufw insert 3 deny in on enp6s0 from any port 30:65535 proto tcp

Последняя команда преднамеренно оставила порт 22 открытым, поэтому Я мог бы проверить эффективность правил, не рискуя потерять ssh-соединение с сервером.

Однако добавление правила запрета немедленно блокировало весь сервер. Все, а не только 30: 65535. Nmap думал, что это не так. Просто по счастливой случайности мой существующий сеанс ssh остался активным, поэтому я мог удалить правило.

Так вот, я знаю, что я не какой-то гуру Уфу или что-то в этом роде, но это действительно стало (другим) шоком для меня: кажется, я понятия не имею, как это работает.

Может ли кто-нибудь просветить меня относительно правила отрицания? Как мне это настроить?

Окончательное редактирование: Оказалось, что удаление и переустановка ufw устранили проблемы. Кажется, в какой-то момент я испортил некоторые настройки, которые вызвали все необъяснимое поведение.

Редактировать: моя конфигурация сети

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

# Our additions start here:
# tap interface (VMs will use this one)
auto tap0
iface tap0 inet manual
    pre-up ip tuntap add tap0 mode tap user root
    up ip link set dev tap0 up
    post-down ip link del dev tap0

# bridge
auto br0
iface br0 inet static
    bridge_ports tap0
    address 192.168.100.1
    netmask 255.255.255.0
    broadcast 192.168.100.255

iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
-N ufw-before-output
-N ufw-logging-allow
-N ufw-logging-deny
-N ufw-not-local
-N ufw-reject-forward
-N ufw-reject-input
-N ufw-reject-output
-N ufw-skip-to-policy-forward
-N ufw-skip-to-policy-input
-N ufw-skip-to-policy-output
-N ufw-track-forward
-N ufw-track-input
-N ufw-track-output
-N ufw-user-forward
-N ufw-user-input
-N ufw-user-limit
-N ufw-user-limit-accept
-N ufw-user-logging-forward
-N ufw-user-logging-input
-N ufw-user-logging-output
-N ufw-user-output
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A FORWARD -i br0 -o enp6s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp6s0 -o br0 -j ACCEPT
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j ACCEPT
-A ufw-skip-to-policy-input -j ACCEPT
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-forward -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-forward -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-input -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-input -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 22 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 80 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 443 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m multiport --dports 2000:2100 -j DROP
-A ufw-user-input -i enp6s0 -p tcp -m tcp --dport 53 -j DROP
-A ufw-user-input -i enp6s0 -p udp -m udp --dport 53 -j DROP
-A ufw-user-input -i enp6s0 -p udp -m udp --dport 67 -j DROP
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
6
задан 18 May 2018 в 16:15

2 ответа

Необходимо сбросить ufw к значениям по умолчанию и запускаются:

sudo ufw reset

Это отключит ufw и сброс ufw к он - значения по умолчанию установки, что значит для

- deny all incoming and
- allow all outgoing connections.

Затем просто добавьте некоторые правила позволить входящие соединения для приложений, которые Вы хотите использовать:

sudo ufw allow ssh
sudo allow http

Теперь можно включить ufw

sudo ufw enable

Теперь ufw работает и настроенный для отклонения всех входящих соединений кроме соединений с портами, необходимыми для ssh и http. Исходящие соединения всегда позволяются, и это обычно желаемо.

Вы не должны добавлять a deny- правило для входящих соединений как в Вашей конфигурации:

deny in on enp6s0 from any port 30:65535 proto tcp`

Это правило является ненужным, входящие соединения отклонены по умолчанию.

Если Вы хотите настроить более строгие исходящие соединения, можно добавить deny- правила, скорее затем принимающие значение по умолчанию исходящие соединения с deny, это сохраняет правила более простыми, главным образом Вы хотите, чтобы исходящие соединения были позволены. Deny- правила для исходящих соединений должны были бы быть разработаны тщательно.

sudo ufw deny out 6773

например, отклонил бы все исходящие соединения на порте 6773, любое приложение, которое должно будет использовать этот порт, не смогло бы работать правильно больше.

Интерфейсы

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

Правила в разделе выше должны быть адаптированы для соответствия внешнему интерфейсу (правила в вопросе похожи на это).

Исходящие соединения позволяются по умолчанию во всех интерфейсах, но не входящих соединениях, таким образом, только необходимо добавить allow in- правило для каждого внутреннего интерфейса:

sudo allow in on "interface" from any

Порядок правил

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

4
ответ дан 23 November 2019 в 07:53

Если Вы глубоко не знаете, как TCP/IP работает, но все еще хотят защитить Ваш компьютер, запуститься при помощи gufw и затем у Вас есть фронтенд GUI к ufw:

sudo apt install gufw

затем перейдите к тире при использовании Единицы и типа gufw или перейдите к конфигурации Брандмауэра Системного администрирования, и следующий UI обнаружится:

gufw UI

При запуске успокойтесь и только используйте Дом, и Общественность представляет только, и используйте Office, когда Вы хотите сделать что-то промежуточное те 2.

В домашнем профиле оставьте все открытым (=disabled), как необходимо быть позади брандмауэра NAT (маршрутизатор является брандмауэром NAT), уже так дома нет никакой потребности защитить что-либо.

В Общедоступном профиле включите брандмауэр путем нажатия на ползунок Состояния и запуститесь при помощи правил отчета только в течение первых нескольких дней:

gufw pre-configured rules

и затем перейдите к терминалу и посмотрите какой правила gufw созданный для Вас в ufw:

sudo ufw status

Список Отчета показывает все Ваши текущие приложения и нажатие на одну строку приложения, и нажатие + ниже его позволит Вам легко добавлять правило для того приложения. В основном тот экран является комбинацией netstat и ufw на одном экране.

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

Больше Вы используете gufw и больше Вы смотрите на ufw брандмауэр постановляет, что генерирует, Вы будете видеть, что через некоторое время будете просто использовать ufw и забудьте все о gufw для расширенных настроек.

1
ответ дан 23 November 2019 в 07:53

Другие вопросы по тегам:

Похожие вопросы: