Настройка правил фаервола (iptables) с помощью UFW
Uncomplicated Firewall (ufw) (англ. незамысловатый межсетевой экран) — это межсетевой экран, предназначенный быть простым в использовании. Он использует интерфейс командной строки, состоящий из небольшого числа простых команд, и использует iptables для конфигурации.
GUI for Uncomplicated Firewall (Gufw) (англ. графический интерфейс пользователя для незамысловатого межсетевого экрана) — это, как следует из его названия, графический интерфейс для UFW (Uncomplicated Firewall). Он был разработан для Ubuntu.
UFW предназначен для легкого, интуитивно понятного управления межсетевым экраном Ubuntu. Он поддерживает общие задачи, такие как разрешение или блокирование предварительно настроенных, общих P2P, или отдельных портов. Gufw работает на UFW, запускается на Ubuntu, а также на любой платформе, где доступны Python, GTK+ и UFW.
fail2ban — защита от брутфорса
Шаг 1: Введения в UFW
Все современные решения Линукс по сетевой защите используют подсистему ядра Netfilter (сетевой фильтр).
Система пакетной фильтрации на уровне ядра неудобна для использования без пользовательского интерфейса для её управления. Для управления предназначен iptables. Когда пакет попадает на ваш сервер, он передается подсистеме Netfilter для одобрения, изменения или отказа на основе правил, которые она получает от интерфейса пользователя через iptables. Таким образом iptables — это все, что вам нужно для управления вашей сетевой защитой, но он сложен в настройке. Поэтому был разработан Uncomplicated Firewall (ufw) (незамысловатый межсетевой экран) для легкой настройки iptables. UFW предоставляет дружественный способ создания сетевой защиты для IPv4 и IPv6.
Шаг 2: Установить брандмауэр UFW
UFW устанавливается в Ubuntu по умолчанию во всех случаях, кроме варианта с минимальной установкой. Зачастую я заказываю сервера VPS/VDS с минимальной установкой Ubuntu, поэтому на нем нет iptables.
Если UFW нет, мы можем установить его с помощью команды:
sudo apt install ufw
Часто на серверах по умолчанию включен iptables, крайне не рекомендуется использовать одновременно два инструмента для настройки firewall во избежание конфликта правил. В случае, если у вас одновременно работает и iptables, и ufw, то будет применено последнее созданное правило.
Шаг 2.1: Конфигурационный файл UFW (опционально)
Конфигурационный файл UFW находится в /etc/default/ufw.
Вы можете в нем настроить, например поддержку правил для IPv6. Для поддержки правил IPv6 проверьте параметр IPV6=yes конфигурационного файла.
Политики безопасности по умолчанию также находятся в файле /etc/default/ufw и могут быть изменены с помощью следующей команды:
sudo ufw default deny incoming sudo ufw default allow outgoing
Первое правило запрещает все входящие подключения, второе разрешает исходящие.
Шаг 2.2: Создание профилей приложений для UFW (опционально)
Ufw умеет работать с профилями приложений, находящиеся в каталоге /etc/ufw/applications.d, который определяет приложение или службу и соответствующие им настройки безопасности, например открытые или закрытые порты.
Посмотреть созданные профили можно при помощи команды:
sudo ufw app list
Просмотр детальной информации, например о приложении OpenSSH:
$ sudo ufw app info OpenSSH Profile: OpenSSH Title: Secure shell server, an rshd replacement Description: OpenSSH is a free implementation of the Secure Shell protocol. Port: 22/tcp
Все профили создаются вручную. Для создания профиля приложения перейдите в директорию /etc/ufw/applications.d. Создайте текстовый файл с любым названием и вставьте в него строки следующего формата:
[название_профиля>] title=заголовок> description=краткое описание> ports=список портов>/протокол>
После создания своего приложения запустите команду ufw reload, чтобы брандмауэр увидел ваш файл.
Шаг 3: Первоначальная настройка сетевого фильтра при помощи UFW
Вы только что установили сервер Linux Ubuntu с поддержкой UFW, не важно на вашем компьютере или на виртуальном хостинге. Ниже описаны шаги которые нужно сделать для безопасности вашего сервера. Соответственно под ваши нужды правила фаервола в дальнейшем должны расширяться.
Закрываем все кроме доступа к сервер по протоколу SSH:
$ sudo ufw app list Available applications: OpenSSH Nginx Full Nginx HTTP Nginx HTTPS OpenSSH Postfix
Разрешаем SSH и Nginx Full
$ sudo ufw allow OpenSSH $ sudo ufw allow 'Nginx Full'
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Проверяем что получилось:
$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp (OpenSSH) ALLOW IN Anywhere 22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
Из листинга мы видим, что все входящие пакеты на серверы запрещены, кроме службы SSH, а все исходящие разращены.
Шаг 3.1: UFW правила для протокола ICMP
Протокол ICMP должен быть открыт в файрволе всегда!
ufw с одной стороны не позволяет указывать правила icmp с помощью команды интерфейса командной строки. Но он позволяет вам настраивать набор правил с помощью файлов правил, которые представляют собой файлы стиля iptables-restore.
ufw по умолчанию разрешает определенный icmp-трафик, включая эхо-ответ icmp, и это уже настроено по умолчанию в /etc/ufw/before.rules:
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
Если ваш хост не отвечает на пинг, посмотрите в этом файле, чтобы убедиться, что указанная выше строка присутствует, и если это не работает, посмотрите на пингующий хост и любые брандмауэры между ними.
В дистрибутивах Linux на базе Debian, которые поставляются с брандмауэром приложений UFW, вы можете блокировать сообщения ICMP, добавив следующее правило в файл /etc/ufw/before.rules, как показано в приведенном ниже отрывке кода.
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
Шаг 3.2: Общая настройка логирования UFW и конкретной службы
В Ufw есть опция сохранения логов — журнал событий. По умолчанию логи включены и используется уровень low, что можно проверить командой вывода статуса. Как видите в моем примере настройки по умолчанию Logging: on (low).
ufw status verbose Status: active Logging: on (low)
Для запуска, используйте команду:
ufw logging on
Ufw поддерживает несколько уровней логирования:
off — отключен.
low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам.
medium — все то, что при значении low. Плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости.
high — работает также как и medium. Плюс все пакеты с ограничением скорости.
full — также как и high, но без ограниения скорости.
Чтобы задать уровень, укажите его как параметр:
ufw logging high
Файлы относящихся с логам ufw находятся в стандартной директории:
ls /var/log/ufw* /var/log/ufw.log /var/log/ufw.log.1 /var/log/ufw.log.2.gz
Вы можете добавить правило ведения журнала, если хотите отслеживать определенные службы. Я бы рекомендовал вам изменить уровень ведения журнала на low, чтобы в журналах было меньше беспорядка. Чтобы добавить правило ведения журнала, вам просто нужно следовать синтаксису команды:
ufw allow log service_name
Например, добавим правило журнала для порта 22 протокола SSH:
ufw allow log 22/tcp
Шаг 4: Настройка NAT (преобразование сетевых адресов) в UFW
Настройка NAT к сожалению не простая задача и нужно править конфигурационные файл UFW before.rules вручную. Чтобы не дублировать контент, все подробно описано в статье Настройка UFW (iptables) для OpenVPN.
Также не забываем включать преобразование NAT на уровне ядра Linux, описано в той же статье.
Расширенное использование UFW: лучшие команды брандмауэра UFW
sudo ufw enable — активировать UFW для применения внесённых изменений.
sudo ufw disable — деактивировать UFW.
Посмотреть статус сетевой защиты — з варианта:
sudo ufw status sudo ufw status verbose sudo ufw status numbered
Status: active To Action From -- ------ ---- 22 LIMIT Anywhere 443 ALLOW Anywhere 80 ALLOW Anywhere 22 (v6) LIMIT Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6)
Возможно разрешить доступ для определенных хостов или сетей. Следующий пример показывает как разрешить доступ хосту с ip адресом 192.168.0.2 на хост с любым ip по протоколу SOCKS. Если заменить 192.168.0.2 на 192.168.0.0/24 то мы разрешим протокол для любого хоста этой локальной сети. Добавление опции –dry-run команде ufw выведет список правил, но не применит их.
sudo ufw --dry-run allow proto tcp from 192.168.0.2 to any port 1080
Простые варианты разрешения доступа с удаленного IP и открытие порта
ufw allow from xxx.xxx.xxx.xxx ufw allow 6000:6007/tcp ufw allow 6000:6007/udp
sudo ufw allow proto tcp from 192.168.0.2 to any port 1080
Правила могут быть добавлены с использованием нумерованного формата:
sudo ufw insert 1 allow proto tcp from 37.73.96.0/20 to any port 1080
Для удаления правила используйте delete:
sudo ufw delete deny proto tcp from any to any port 1080
Отключение или сброс UFW
Если вы уже настроили правила UFW, но решите начать заново, вы можете использовать эту команду.
ufw reset
Эта команда отключит UFW и удалит все ранее заданные правила, кроме правил по умолчанию. Правила по умолчанию (запрет входящих соединений и разрешение исходящих.) задаются командами:
sudo ufw default deny incoming sudo ufw default allow outgoing
Удаление правил UFW
Существует два способа удаления правил. Первый — по номеру правила. Выполните команду:
ufw status numbered tatus: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 80 ALLOW IN Anywhere [ 3] 22 (v6) ALLOW IN Anywhere (v6) [ 4] 80 (v6) ALLOW IN Anywhere (v6)
После этого выполните команду ufw delete и укажите номер правила, которое следует удалить, например правило 2:
ufw delete 2
Второй способ заключается в том, что после команды ufw delete используется фактическое правило, например:
ufw delete allow http или ufw delete allow 80
Firewall
Ядро линукс включает подсистему Netfilter (сетевой фильтр), который используется для манипулирования или решения судьбы сетевого трафика передаваемого в или через ваш сервер. Все современные решения линукс по сетевой защите используют эту систему пакетной фильтрации.
Система пакетной фильтрации на уровне ядра была бы малоиспользуема администраторами без пользовательского интерфейса для ее управления. Для этого предназначен iptables. Когда пакет попадает на ваш сервер, он передается подсистеме Netfilter для одобрения, изменения или отказа на основе правил, которые она получает от интерфейса пользователя через iptables. Таким образом iptables — это все, что вам нужно для управления вашей сетевой защитой, если вы хорошо с ним знакомы, однако множество внешних интерфейсов доступны для упрощения этой задачи.
ufw — простой Firewall
Инструмент для настройки сетевой защиты Ubuntu по умолчанию — это ufw. Он разработан для легкой настройки iptables и предоставляет дружественный способ создания сетевой защиты для IPv4 и IPv6.
По умолчанию изначально ufw выключен. Со страницы man руководства ufw:
«ufw не предназначен для обеспечения полной функциональности брандмауэра через свой командный интерфейс, но он предоставляет легкий способ добавления или удаления простых правил. Сейчас в большинстве случаев он используется для централизованных брандмауэров.»
Далее следуют несколько примеров использования ufw:
1. Для начала требуется разрешить ufw. Наберите в терминале:
sudo ufw enable
2. Открыть порт (в данном примере SSH ):
sudo ufw allow 22
3. Правила могут быть добавлены с использованием нумерованного формата:
sudo ufw insert 1 allow 80
4. Подобным образом можно закрыть открытый порт:
sudo ufw deny 22
5. Для удаления правила используйте delete:
sudo ufw delete deny 22
6. Также можно разрешить доступ к порту с определенных компьютеров или сетей. Следующий пример разрешает на этом компьютере доступ по SSH с адреса 192.168.0.2 на любой IP адрес:
sudo ufw allow proto tcp from 192.168.0.2 to any port 22
Замените 192.168.0.2 на 192.168.0.0/24 чтобы разрешить доступ по SSH для всей подсети.
7. Добавление опции –dry-run команде ufw выведет список правил, но не применит их. Например, далее показано, что было бы применено, если открыть HTTP порт:
sudo ufw --dry-run allow http
*filter :ufw-user-input - [0:0] :ufw-user-output - [0:0] :ufw-user-forward - [0:0] :ufw-user-limit - [0:0] :ufw-user-limit-accept - [0:0] ### RULES ### ### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 -A ufw-user-input -p tcp --dport 80 -j ACCEPT ### END RULES ### -A ufw-user-input -j RETURN -A ufw-user-output -j RETURN -A ufw-user-forward -j RETURN -A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT]: " -A ufw-user-limit -j REJECT -A ufw-user-limit-accept -j ACCEPT COMMIT Rules updated
8. ufw можно выключить командой:
sudo ufw disable
9. Чтобы посмотреть статус сетевой защиты:
sudo ufw status
10. Для более полного отображения информации введите:
sudo ufw status verbose
11. Для отображения в виде формата numbered:
sudo ufw status numbered
Если порт, который вы хотите открыть или закрыть определен в файле /etc/services, вы можете использовать имя порта вместо его номера. В приведенных выше примерах можете заменить 22 на ssh.
Это лишь краткое описание использования ufw. Пожалуйста обратитесь к странице man ufw для более подробной информации.
Интеграция Приложений в ufw
Приложения, которые открывают порты, можно включать в профили ufw, которые детализируют какие порты необходимы этому приложению для корректной работы. Профили содержатся в /etc/ufw/applications.d, и могут быть отредактированы, если порты по умолчанию были изменены.
1. Чтобы посмотреть для каких приложений установлен профиль введите следующую команду в терминале:
sudo ufw app list
2. Аналогично, разрешить трафик по порту, используя профиль приложения, можно следующей командой:
sudo ufw allow Samba
3. Также доступен расширенный синтаксис:
ufw allow from 192.168.0.0/24 to any app Samba
Замените Samba и 192.168.0.0/24 на используемый вами профиль приложения и IP диапазон вашей сети.
Нет необходимости в определении протокола, поскольку эта информация детализирована в профиле. Также обратите внимание, что имя app заменило номер port.
4. Для просмотра деталей какие порты, протоколы и пр. определены для приложения введите:
sudo ufw app info Samba
Не для всех приложений, которые требуют открытие сетевого порта, поставляется профиль ufw, но если у вас есть профиль для приложения, и вы хотите чтобы этот файл был включен в пакет приложения, зарегистрируйте ошибку о пакете на сайте Launchpad.
ubuntu-bug nameofpackage
Маскировка IP
Цель маскировки ip-адреса состоит в том, чтобы компьютеры с частными, немаршрутизируемыми ip-адресами в вашей сети могли иметь доступ к Интернету через компьютер выполняющий маскировку. Трафик из вашей частной сети попадающий в Интернет должен быть правильно выпущен для корректного ответа, отправленного именно тому компьютеру, который послал запрос. Чтобы сделать это, ядро модифицирует заголовок каждого пакета так, чтобы ответ приходил нужному компьютеру, а не частному ip-адресу, который послал запрос, что невозможно в рамках сети Интернет. Линукс использует Трассировку Соединений (conntrack) для трассировки каждого из соединений принадлежащих соответствующим компьютерам и перенаправляет каждый возвращенный пакет. Трафик, покидает вашу частную сеть «маскируясь» таким образом, будто исходит от вашего шлюза Ubuntu. Этот процесс обозначен в документации Microsoft как Internet Connection Sharing (Общий доступ к Интернет-Соединению).
Маскировка ufw
Маскировка ip-адреса может быть достигнута с использованием различных правил ufw. Это возможно благодаря дополнению к ufw, которым является iptables-restore с файлами правил, расположенных в /etc/ufw/*.rules. Эти файлы являются отличным способом для добавления правил в iptables без использования ufw, а также правил, которые более гибко взаимодействуют со шлюзом или соединением типа «мост».
Эти правила разбиты на два разных файла команд, одни должны быть выполнены ufw перед списком правил, а другие выполняются после списка правил.
1. Во-первых, в ufw должно быть активировано перенаправление. Для этого нужно изменить конфигурацию двух файлов, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на “ACCEPT”:
DEFAULT_FORWARD_POLICY="ACCEPT"
Затем отредактируйте /etc/ufw/sysctl.conf следующим образом:
net/ipv4/ip_forward=1
Аналогично для IPv6:
net/ipv6/conf/default/forwarding=1
2. Теперь добавим правила в файл /etc/ufw/before.rules. Правила по умолчанию описаны лишь в таблице filter, а для работы маскировки нам нужно отредактировать таблицу nat. Добавьте следующие строки в начало файла конфигурации сразу после заголовка с комментарием:
# nat Table rules *nat :POSTROUTING ACCEPT [0:0] # Forward traffic from eth1 through eth0. -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE # don't delete the 'COMMIT' line or these nat table rules won't be processed COMMIT
Комментарии не обязательны, но считается хорошим тоном документировать свою конфигурацию. Также при изменении каких-либо rules файлов в каталоге /etc/ufw, убедитесь, что данные строки являются последними для каждой измененной таблицы:
# don't delete the 'COMMIT' line or these rules won't be processed COMMIT
Для каждой таблицы обязательно присутствие соответствующего ей оператора COMMIT (применение изменений). В данных примерах показаны только таблицы nat и filter, но вы можете также добавлять правила для таблиц raw и mangle.
В примерах выше замените eth0, eth1 и 192.168.0.0/24 на соответствующие интерфейсы и IP диапазон вашей сети.
3. Наконец, выключите и повторно включите ufw для применения изменений:
sudo ufw disable && sudo ufw enable
IP маскировка теперь должна быть включена. Вы также можете добавить дополнительные правила FORWARD в /etc/ufw/before.rules. Рекомендуется чтобы эти дополнительные правила были добавлены в цепочку/секцию (chain) ufw-before-forward.
Маскировка iptables
Iptables также может быть использован для маскировки соединений.
1. Подобно ufw, первым делом нам необходимо включить форвардинг для IPv4 отредактировав следующий файл /etc/sysctl.conf и убрав комментарий со строки:
net.ipv4.ip_forward=1
Если вы хотите включить форвардинг для IPv6 также удалите комментарий:
net.ipv6.conf.default.forwarding=1
2. Далее выполните команду sysctl для применения новых настроек в файле конфигурации:
sudo sysctl -p
3. Теперь настройка маскировки ip-адреса может быть завершена с выполнением лишь одной команды, которая может немного отличатся в зависимости от вашей конфигурации сети:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
После выполнения этой команды можно считать, что ваша частная сеть имеет адрес 192.168.0.0/16, а сетевая карта с выходом в Интернет — ppp0. Синтаксис определен следующим образом:
1. -t nat – правило применяется к таблице nat
2. -A POSTROUTING – правило добавлено (-A) в цепочку POSTROUTING
3. -s 192.168.0.0/16 – правило применено к трафику, исходящему из этого адресного пространства
4. -o ppp0 – правило применено к трафику, который необходимо перенаправить через этот интерфейс
5. -j MASQUERADE – трафик подпадающий под это правило выполняет «прыжок» («jump») (-j) в цепочку MASQUERADE для дальнейшей манипуляции с ним как описаны выше
4. Также каждая цепочка таблицы filter (цепочка, где происходит фильтрация большинства пакетов) по умолчанию имеет правило ACCEPT, но если вы настраиваете ваш firewall с целью создания шлюза, вы должны выбрать либо политику DROP либо REJECT, в этом случае ваш «замаскированный» трафик должен быть пропущен через цепочку FORWARD для срабатывания предыдущих правил:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \ --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Вышеперечисленные команды разрешают форвардинг всех соединений из локальной сети в Интернет, а весь трафик относящийся к этим соединениям возвращается к компьютерам, пославшим запрос.
Если вы хотите, чтобы маскировка работала после перезагрузки ПК, отредактируйте файл /etc/rc.local и добавьте туде вышеперечисленные команды. Например, добавьте первую команду без опций фильтрации:
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
Журналы
Журналы firewall крайне необходимы для обнаружения атак, возникающих проблем с правилами, а также обнаружения повышенной активности в вашей сети. В настройках firewall необходимо включить журналирование для правил, которое должно быть указано перед списком правил (правил, которые решают дальнейшую судьбу пакета, такие как ACCEPT, DROP или REJECT).
Если вы используете ufw, журналирование можно включить следующей командой:
sudo ufw logging on
Чтобы выключить журналирование в ufw просто замените значение on на off.
Для iptables введите:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \ -j LOG --log-prefix "NEW_HTTP_CONN: "
В этом случае в начале поступит запрос на порт 80 от компьютера в локальной сети, затем будет сгенерирован файл журнала в dmesg который выгдлядит примерно так (одна строка разделена на три для корректного отображения на экране):
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
Этот текст журнала также появится в файле /var/log/messages, /var/log/syslog и /var/log/kern.log. Эти настройки можно изменить отредактировав файл /etc/syslog.conf аналогично или при установке и настройке ulogd, а также используя ULOG вместо LOG. Демон ulogd это пользовательский сервер который слушает инструкции ядра для дальнейшего журналирования, в частности для firewall, и может вести журналирование даже в PostgreSQL или MySQL базы данных. Для того, чтобы легко разобраться в файлах журнала можно использовать их анализаторы, такие как logwatch, fwanalog, fwlogwatch или lire.
Другие инструменты
Существует множество утилит для помощи в построении полноценного firewall без углубленных навыков в iptables.
Для работы с интерфейсом:
1. fwbuilder очень мощная утилита, которая настраивается подобно проприетарным продуктам вроде Checkpoint FireWall-1.
Если вы предпочитаете утилиты с поддержкой командной строки и списком файлов конфигураций:
2. Shorewall — мощное решение, которое поможет вам создать серьезный firewall для любого типа вашей сети.
Ссылки
1. Вики страница Ubuntu Firewall содержит необходимую информацию о работе над ufw.
2. Также посмотрите man страницу ufw, которая содержит много полезной информации: man ufw.
3. Для более подробной информации об использовании iptables смотрите packet-filtering-HOWTO.
4. Руководство nat-HOWTO содержит полное описание о маскировке соединений.
5. IPTables HowTo Ubuntu Вики также отличный источник.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2018 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
ufw вместо iptables

Гугл подсказывает, что в самом UFW возможности включить маскарад нет — там используется before.rules, которые пишутся в формате iptables.
Pinkbyte ★★★★★
( 11.03.22 21:00:51 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Pinkbyte 11.03.22 21:00:51 MSK

Опаньки! И как же быть в этом случае?
chukcha ★★★★★
( 11.03.22 21:11:59 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от chukcha 11.03.22 21:11:59 MSK

ufw — это надстройка над iptables, правила iptables при этом вполне себе работают. Какую проблемы ты пытаешься решить?
Если вопрос в порядке правил(например ufw добавляет последним правилом DROP на все интерфейсы в цепочку FORWARD) — замени -A на -I 1 — тогда правило будет добавляться не последним, а первым.
Pinkbyte ★★★★★
( 11.03.22 21:17:48 MSK )
Последнее исправление: Pinkbyte 11.03.22 21:19:43 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка

Я сильно расстрою новостью, что ufw это простая обёртка над ip/nftables, для тех пользователей, кто не хочет ломать последний мозг над синтаксисом и просто хочет allow/deny port?
SkyMaverick ★★★★★
( 11.03.22 21:19:24 MSK )
Последнее исправление: SkyMaverick 11.03.22 21:19:34 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от SkyMaverick 11.03.22 21:19:24 MSK
Да, тепеь я не смогу спать ночами, когда узнал страшную тайну!
Откройте другую. Почему в настройках FW и NAT такой жуткий снтаксис, что нужны обёртки? Только не надо про «гибкость».
modest
( 11.03.22 21:29:38 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от SkyMaverick 11.03.22 21:19:24 MSK

Я не сильно расстроюсь, потому что настолько часто попадаю впросак с этими тонкостями, что уже привык 🙂
Вот иммеющийся конфиг сервера WireGuard:
[Interface] PrivateKey = Address = 10.0.0.1/24 ListenPort = 3999 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Если ufw включен, то vpn не работает. Но стоит остановить ufw, то vpn начинает нормально работать.
Так что ваше «ufw это простая обёртка над ip/nftables» видимо не просто обертка, и конфиг, который взят от Центоса, для Дебиана нуждается в какой-то правке.
chukcha ★★★★★
( 11.03.22 21:36:32 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от modest 11.03.22 21:29:38 MSK
Почему в настройках FW и NAT такой жуткий снтаксис
Абсолютно нормальный синтаксис.
Обертки обычно зарождаются с малого, есть у вас какой-то кусок с однотипными правилами различающиеся одним, двумя правилами. Вы выносите эту хрень в отдельную функцию в том же bash скрипте, потом присобачиваете ещё что-то, потом ещё, добавляете конфиги и вот вас приветствует очередная оболочка. Дальше делитесь с одним человеком, со вторым. и внезапно обнаруживаете, что вашим поделием пользуются сотни.
Или почти тоже самое, но по взрослому, внезапно принимаете решение, что всё это фигня, должно быть по взрослому и творите очередного монстра.
Как-то так.
anc ★★★★★
( 11.03.22 21:36:56 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от chukcha 11.03.22 21:36:32 MSK
anc ★★★★★
( 11.03.22 21:38:01 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от anc 11.03.22 21:38:01 MSK

Да, ответили, в плане просвещения. А можно конкретнее — показать мой конфиг с этими подсказками?
А то я чукча, мало ли что, не так пойму глубину ваших познаний и наворочу невесть что 🙂
chukcha ★★★★★
( 11.03.22 22:03:22 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от chukcha 11.03.22 22:03:22 MSK
А то я чукча, мало ли что, не так пойму глубину ваших познаний и наворочу невесть что 🙂
Не прикидывайтесь, четыре звезды уже нафлудили 🙂
Вам уже ответили:
От себя добавлю, цифирка 1 в конце не обязательна, по умолчанию она и будет использована. -A от слова append, -I от слова insert, цифирка указывает в какую строку цепочки воткнуть правило, по умолчанию втыкает в начало цепочки.
anc ★★★★★
( 11.03.22 22:11:37 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от modest 11.03.22 21:29:38 MSK

Ну не знаю, как по мне синтаксис как синтаксис. Причём у nftables, исключительно моё мнение, куда более человекочитаемый, понятный и вменяемый.
Ну а почему не надо? Гибкость, в том числе и о том, что позволяет решать широкий круг задач. UFW, если абстрагировать — это использующая ограниченное подмножество возможностей обёртка, упрощающая конечному пользователю решение базовых задач разграничения доступа к сети.
Оффтоп. Про синтаксисы, я вот, например, PowerShell как ни пытался, так до сих пор нормально работать с ним не в состоянии. Вот это, как по мне, пример действительно ужасного синтаксиса.
SkyMaverick ★★★★★
( 11.03.22 22:19:23 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от anc 11.03.22 22:11:37 MSK


anc Ну да, вам бы только на мои звезды глазеть :=)
Ладно, сделал вашу замену:
[Interface] PrivateKey = Address = 10.0.0.1/24 ListenPort = 3999 PostUp = iptables -I 1 FORWARD -i %i -j ACCEPT; iptables -t nat -I 1 POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
chukcha ★★★★★
( 11.03.22 22:19:31 MSK ) автор топика
Последнее исправление: chukcha 11.03.22 22:20:22 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от chukcha 11.03.22 22:19:31 MSK
Она не моя, она Pinkbyte. Я тут мимокрокодил. 🙂
anc ★★★★★
( 11.03.22 22:23:30 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от SkyMaverick 11.03.22 22:19:23 MSK
Про синтаксисы, я вот, например, PowerShell как ни пытался, так до сих пор нормально работать с ним не в состоянии. Вот это, как по мне, пример действительно ужасного синтаксиса.
У мц куда не копни, всё такое. Я серьезно, достаточно долго погромировал под эту хрень(в смысле под шинду). Эталоном для меня является vba, единственный случай когда читая документацию я матерился не смотря на присутствие женщин.
anc ★★★★★
( 11.03.22 22:35:40 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от chukcha 11.03.22 22:19:31 MSK
Нет: iptables [-t table] -D chain rulenum
AS ★★★★★
( 11.03.22 23:58:18 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от AS 11.03.22 23:58:18 MSK

Нет: iptables [-t table] -D chain rulenum
Блин, так кому из вас верить??
Кто-нибудь может эти две злочастные строки написать в полном формате, без намеков?
chukcha ★★★★★
( 12.03.22 00:13:49 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AS 11.03.22 23:58:18 MSK
При всём моём к вам уважении, но автоматически удалять по номеру правила это очень неиллюзорный способ однажды получить неожиданное поведение с возможно не очень желательными последствиями.
anc ★★★★★
( 12.03.22 00:18:06 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от anc 12.03.22 00:18:06 MSK

При всем уважении к вашей занимательной дискуссии вы совершенно забыли о топикстартере с его вопросом.
А он так и продолжает терпеливо ждать вашего правильного и обоснованного решения.
Любая ошибка в нем приведет к дискредитации канала VPN, так что дилетантам тут лучше воздержаться от излияний, не гарантирующих безопасность.
chukcha ★★★★★
( 13.03.22 03:27:17 MSK ) автор топика
Последнее исправление: chukcha 13.03.22 03:29:32 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от chukcha 13.03.22 03:27:17 MSK
Так вы попробовали, то что вам предложили?
anc ★★★★★
( 13.03.22 09:17:19 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от chukcha 11.03.22 22:19:31 MSK

Неправильно. -I — это я имел ввиду -I FORWARD например. chain в данном случае название цепочки.
PostUp = iptables -I FORWARD 1 -i %i -j ACCEPT; iptables -t nat -I POSTROUTING 1 -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Pinkbyte ★★★★★
( 13.03.22 11:13:41 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от SkyMaverick 11.03.22 22:19:23 MSK

Оффтоп. Про синтаксисы, я вот, например, PowerShell как ни пытался, так до сих пор нормально работать с ним не в состоянии. Вот это, как по мне, пример действительно ужасного синтаксиса.
Вот тоже самое. Я допускаю, что это некий синдром утёнка, но точно также я не мог работать с lsi megacli, даже поиск в man был затруднителен со всем этим camelcase и сокрашениями. Как только перешёл на storcli, мои волосы сразу стали мягкими и шелковистыми.
Dimez ★★★★★
( 13.03.22 12:51:30 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от chukcha 12.03.22 00:13:49 MSK
Верить надо man iptaples. Хотя.
AS ★★★★★
( 13.03.22 19:47:53 MSK )
Последнее исправление: AS 13.03.22 19:54:12 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от anc 12.03.22 00:18:06 MSK
При всём моём к вам уважении, но автоматически удалять по номеру
Интересно, когда это iptables научили не по номеру удалять. Похоже давно.
AS ★★★★★
( 13.03.22 19:57:04 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AS 13.03.22 19:57:04 MSK
яннп ну и ладно.
anc ★★★★★
( 13.03.22 20:06:46 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от anc 13.03.22 20:06:46 MSK
Ну в мане в начале примеры. Я, честно говоря, думал, что они там все (а иначе нафига их так много)? Лет 15 назад городил скрипт для удаления правил через расчёт номера. В общем только что узнал, что можно было не городить. 🙂
AS ★★★★★
( 14.03.22 09:04:14 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AS 14.03.22 09:04:14 MSK
Ааааа. Семён Семёныч 🙂 Ну сколько я знаю iptables, а это где-то с начала нулевых, номерки были опциональны и сомневаюсь, что когда-то были обязательны. 🙂
anc ★★★★★
( 14.03.22 09:11:19 MSK )
Последнее исправление: anc 14.03.22 09:21:15 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от Pinkbyte 13.03.22 11:13:41 MSK


Pinkbyte Урря! После трех дней траханины удалось таки запустить WireGuard! 🙂
Непонятные строки для сервера WG в итоге получились такие —
[Interface] PrivateKey = реальный_privatekey Address = 10.0.0.1/24 ListenPort = 28888 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE
где в предпоследней строке вместо рекомендованного -I используется -A.
Разницы между ними так и не понял, работает ну и ладно.
Теперь Гигабайты по внутренней сетке 10.0.0.x бегают только в путь, а скорость в туннеле близка к скорости физического канала!
Однако радость было недолгой. Да, защищенный туннель VPN получился, и доступа к нему никто из посторонних не имеет.
Но мне-то надо совсем другое — чтобы VPN-клиент выходил через VPN-сервер в свободный Интернет, как это обычно предлагают Интернет хостеры.
Например, мой локальный клиентский VPN-адрес равен 10.0.0.2, локальный VPN-адрес сервера равен 10.0.0.1, а его внешний 95.95.95.95.
И вот мне нужно через этот мой VPN выйти в Инет под адресом 95.95.95.95
Как это сделать?
Да, можно замутить такой трюк через реверсный прокси, но это будет совсем некошерное решение.
Наверное, можно задействовать какую-ту хитрую маршрутизацию. Но как?
chukcha ★★★★★
( 16.03.22 14:35:23 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Iptables или UFW | Настройка OpenVPN Server?
Есть VPS сервер с Ubuntu на EC2 Amazon. Настраиваю OpenVPN сервер. Нашел очень хороший туториал под нынешнюю версию OpenVPN с Easy-rsa 3, но в ней UFW. Базовую настройку сделал хорошо. Вот не могу понять как настроить firewall, на некоторых статьях пишут конфиг под iptables на других под UFW. Самому же больше хочется стандартный iptables.
Хотел бы понять следующие конфигурации UFW и переписать их под iptables.
Правила в /etc/ufw/before.rules
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES
В файле /etc/default/ufw
DEFAULT_FORWARD_POLICY=»ACCEPT»
Еще команды для UFW
$ sudo ufw allow 1194/udp $ sudo ufw allow OpenSSH
Для наглядности приведу из другой статьи настройку iptables
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Вот еще другие настройки под iptables
iptables -A FORWARD -s 10.128.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.128.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.128.0.0/24 -j SNAT --to-source 123.45.67.89
Помогите кто может.
- Вопрос задан более трёх лет назад
- 8296 просмотров
1 комментарий
Оценить 1 комментарий
Ключевое тут — NAT
Поэтому попробуйте
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
где 10.8.0.0/24 — это адрес сети, которая «висит» на tun/tap интерфейсе.
И будет вам счастье.
Решения вопроса 1
Ключевые слова для поиска: «шлюз iptables».
Опция для проброса трафика через хост:
echo «net.ipv4.ip_forward = 1» >> /etc/sysctl.conf
sysctl -p
Для выхода в интернет используем SNAT вместо маскарадинга (но это если у Вас статический внешний IPv4):
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j SNAT —to-source 211.233.44.5
Предварительно, при этом предполагаем, что других правил нет, т.к. эти должны идти первыми:
iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -А FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPT
Разрешаем 1194/udp, SSH:
iptables -I INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT
iptables -I INPUT -p udp -m udp —dport 1194 -j ACCEPT
Блокируем все остальное:
iptables -P INPUT DROP
iptables -P FORWARD DROP