Usage
Tables
Creating tables
The following command adds a table called filter for the ip(v4) layer:
Likewise, a table for arp can be created with
NoteThe name «filter» used here is completely arbitrary. It could have any name
Listing tables
The following command lists all tables for the ip(v4) layer:
table filter
The contents of the table filter can be listed with:
table ip filter { chain input { type filter hook input priority 0; ct state established,related accept iifname "lo" accept ip protocol icmp accept drop } }
using -a with the nft command, it shows the handle of each rule. Handles are used for various operations on specific rules:
table ip filter { chain input { type filter hook input priority 0; ct state established,related accept # handle 2 iifname "lo" accept # handle 3 ip protocol icmp accept # handle 4 drop # handle 5 } }
The following command deletes the table called filter for the ip(v4) layer:
chains
Adding chains
The following command adds a chain called input to the ip filter table and registered to the input hook with priority 0. It is of the type filter.
NoteIf You’re running this command from Bash you need to escape the semicolon
A non-base chain can be added by not specifying the chain configurations between the curly braces.
Removing chains
The following command deletes the chain called input
NoteChains can only be deleted if there are no rules in them.
rules
Adding rules
The following command adds a rule to the chain called input, on the ip filter table, dropping all incoming traffic to port 80:
Deleting rules
To delete a rule, you first need to get the handle number of the rule. This can be done by using the -a flag on nft:
table ip filter { chain input { type filter hook input priority 0; tcp dport http drop # handle 2 } }
It is then possible to delete the rule with:
Configuration
OpenRC
The init script supports the following actions:
- /etc/init.d/nftables save stores the currently loaded ruleset in /var/lib/nftables/rules-save
- /etc/init.d/nftables reload loads the currently loaded ruleset in /var/lib/nftables/rules-save
- /etc/init.d/nftables stop is intended to be called on system shutdown, verifies if is enabled in /etc/conf.d/nftables and saves the ruleset
- /etc/init.d/nftables start is intended to be called on system boot and loads the last saved ruleset
- /etc/init.d/nftables clear flushes the currently loaded ruleset
- /etc/init.d/nftables list lists the currently loaded ruleset
Don’t forget to add nftables service to startup:
NoteIt is suggested to invoke /etc/init.d/nftables save manually after altering the ruleset. Otherwise, if there is an issue during system shutdown and saving the ruleset fails, the system might boot up with an older ruleset.
Настройка iptables с ipset для блокировки стран
iptables — это Linux брандмауэр по преимуществу, хотя есть некоторые дистрибутивы, которые делают скачок к nftables, который является развитием iptables, намного быстрее, эффективнее и проще в настройке, однако в настоящее время мы все еще используем синтаксис iptables, хотя ниже мы используем nftables , как в последних версиях операционной системы Debian и многих других. Если вы используете iptables, настоятельно рекомендуется использовать расширение ipset, которое позволит нам блокировать или разрешать миллионы IP-адресов, но с более высокой производительностью, чем если бы мы делали это напрямую с IPtables. В случае разрешения или блокировки всей страны настоятельно рекомендуется сделать это через ipset, потому что он явно более эффективен, чем iptables.
Чтобы использовать ipset с iptables, вам необходимо установить его, потому что он не установлен по умолчанию, вы можете установить его следующим образом:
После установки мы можем начать его использовать.
Следующий сценарий, который мы запрограммировали, состоит из блокировки страны или нескольких, добавления всех ее подсетей, загруженных с IPdeny, и включения всех подсетей в ipset для последующего вызова этого ipset и блокировки его в iptables. Таким образом, iptables будет намного эффективнее, чем если бы вы делали это без расширения ipset.
Теперь мы можем увидеть статус iptables, указав следующее, и мы увидим, что он использует настроенный ipset:
Чтобы увидеть статус ipset, мы ставим следующее:
Каждый раз, когда мы хотим заблокировать новую страну, вам придется снова запустить скрипт, и автоматически все содержимое ipset будет удалено, а все новые подсети будут добавлены с нуля. Это наиболее рекомендуется, поскольку различные базы данных IP-адресов и диапазонов в разных странах постоянно обновляются. Мы должны отметить, что в таких странах, как Китай, существует большое количество блоков IP-адресов, поэтому для применения всех правил к брандмауэру потребуется несколько минут, если мы попытаемся использовать только «рекламу», это произойдет почти мгновенно, потому что у нас их очень мало.
Благодаря этому скрипту, если наш интернет-сервис работает только в Испании, мы можем запретить все другие страны, но мы должны помнить, что если пользователь из Испании использует прокси или VPN из другой страны, доступ запрещен.
adwordsR — более новый и функциональный пакет для загрузка=и данных из Google Ads (ex Google AdWords)
Установка пакета с CRAN:
Установка пакета с GitHub:
Пакет adwordsR по смыслу схож с RAdwords, но он более новый, и имеет гораздо больший набор функций.
Возможности пакета adwordsR
Помимо описанных выше возможностей пакета RAdwords, adwordsR даёт вам широкие возможности по работе с TargetingIdeaService, службе с помощью которой можно получать варианты таргетинга прямо из инструмента или платформы, что помогает автоматизировать оптимизацию аккаунта.
Основные функции пакета adwordsR
- — Запрос токена для работы с API Google Ads;
- — Загрузка запрошенного, и сохранённого ранее токена;
- — Загрузка статистики из аккаунта Google Ads.
Typical workstation (combined IPv4 and IPv6)
As for the previous example, but uses the inet family to apply rules to both IPv4 and IPv6 packets. So, only one table needs to be maintained.
Noteinet has been available since kernel 3.14.
FILE
#!/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; ct state invalid counter drop comment "early drop of invalid packets" ct state {established, related} counter accept comment "accept all connections related to connections made by us" iif lo accept comment "accept loopback" iif != lo ip daddr 127.0.0.1/8 counter drop comment "drop connections to loopback not coming from loopback" iif != lo ip6 daddr ::1/128 counter drop comment "drop connections to loopback not coming from loopback" ip protocol icmp counter accept comment "accept all ICMP types" ip6 nexthdr icmpv6 counter accept comment "accept all ICMP types" tcp dport 22 counter accept comment "accept SSH" counter comment "count dropped packets" } chain forward { type filter hook forward priority 0; policy drop; counter comment "count dropped packets" } # If you're not counting packets, this chain can be omitted. chain output { type filter hook output priority 0; policy accept; counter comment "count accepted packets" } }
Installation
Kernel
Nftables is very modular, so the bare minimum would depend on your intended purposes. A recommended minimum for basic IPv4 firewalling with NAT would be:
KERNEL Nftables kernel requirements
Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> <M> Netfilter connection tracking support <M> Netfilter nf_tables support <M> Netfilter nf_tables conntrack module <M> Netfilter nf_tables counter module <M> Netfilter nf_tables log module <M> Netfilter nf_tables limit module <M> Netfilter nf_tables masquerade support <M> Netfilter nf_tables nat module IP: Netfilter Configuration ---> <M> IPv4 nf_tables support <M> IPv4 packet rejection <M> IP tables support (required for filtering/masq/NAT) <M> Packet filtering <M> REJECT target support <M> iptables NAT support <M> MASQUERADE target support
NotePlease note: nftables masquerade will not work if iptables masquerade is in the kernel, so be sure to unload or disable it.
To use family inet for tables with mixed IPv4 and IPv6 rules:
KERNEL Nftables inet family
Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> <M> Netfilter nf_tables support Netfilter nf_tables mixed IPv4/IPv6 tables support
If this is not enabled only families ip and ip6 can be used.
Early filtering based on network device requires netdev tables support:
KERNEL Nftables netdev family
Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> <M> Netfilter nf_tables support Netfilter nf_tables netdev tables support
Tips and tricks
Saving current rule set
The output of command is a valid input file for it as well. Current rule set can be saved to file and later loaded back in.
$ nft -s list ruleset | tee filename
Note: does not output variable definitions, if you had any in your original file they will be lost. Any variables used in rules will be replaced by their value.
Simple stateful firewall
The factual accuracy of this article or section is disputed.
See Simple stateful firewall for more information.
Single machine
Flush the current ruleset:
# nft flush ruleset
Add a table:
# nft add table inet my_table
Add the input, forward, and output base chains. The policy for input and forward will be to drop. The policy for output will be to accept.
# nft add chain inet my_table my_input '{ type filter hook input priority 0 ; policy drop ; }' # nft add chain inet my_table my_forward '{ type filter hook forward priority 0 ; policy drop ; }' # nft add chain inet my_table my_output '{ type filter hook output priority 0 ; policy accept ; }'
Add two regular chains that will be associated with tcp and udp:
# nft add chain inet my_table my_tcp_chain # nft add chain inet my_table my_udp_chain
Related and established traffic will be accepted:
# nft add rule inet my_table my_input ct state related,established accept
All loopback interface traffic will be accepted:
# nft add rule inet my_table my_input iif lo accept
Drop any invalid traffic:
# nft add rule inet my_table my_input ct state invalid drop
Accept ICMP and IGMP:
# nft add rule inet my_table my_input meta l4proto ipv6-icmp icmpv6 type '{ destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-reduction, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report }' accept # nft add rule inet my_table my_input meta l4proto icmp icmp type '{ destination-unreachable, router-solicitation, router-advertisement, time-exceeded, parameter-problem }' accept # nft add rule inet my_table my_input ip protocol igmp accept
New udp traffic will jump to the UDP chain:
# nft add rule inet my_table my_input meta l4proto udp ct state new jump my_udp_chain
New tcp traffic will jump to the TCP chain:
# nft add rule inet my_table my_input 'meta l4proto tcp tcp flags & (fin|syn|rst|ack) == syn ct state new jump my_tcp_chain'
Reject all traffic that was not processed by other rules:
# nft add rule inet my_table my_input meta l4proto udp reject # nft add rule inet my_table my_input meta l4proto tcp reject with tcp reset # nft add rule inet my_table my_input counter reject with icmpx port-unreachable
At this point you should decide what ports you want to open to incoming connections, which are handled by the TCP and UDP chains. For example to open connections for a web server add:
# nft add rule inet my_table my_tcp_chain tcp dport 80 accept
To accept HTTPS connections for a webserver on port 443:
# nft add rule inet my_table my_tcp_chain tcp dport 443 accept
To accept SSH traffic on port 22:
# nft add rule inet my_table my_tcp_chain tcp dport 22 accept
To accept incoming DNS requests:
# nft add rule inet my_table my_tcp_chain tcp dport 53 accept # nft add rule inet my_table my_udp_chain udp dport 53 accept
Be sure to make your changes permanent when satisifed.
Prevent brute-force attacks
Sshguard is program that can detect brute-force attacks and modify firewalls based on IP addresses it temporarily blacklists. See on how to set up nftables to be used with it.
# nft add rule inet filter input log
Verdict Map
Verdict map – это интересная функция в nftables, которая позволит вам выполнить действие, основываясь на информации в пакете. Проще говоря, они сопоставляют критерии с действиями.
Например, чтобы логически разделить набор правил, вам нужны отдельные цепочки для обработки TCP и UDP пакетов. Вы можете использовать verdict map, чтобы направлять пакеты в эти цепочки с помощью одного правила.
Конечно, по аналогии с наборами вы можете создавать мутабельные verdict map.
Ваши глаза вас не обманывают. Синтаксис с наборами и вправду очень схож. По факту, под капотом наборы и verdict map строятся на одном и том же типе данных.
Теперь вы можете использовать мутабельную verdict map в правиле.
Basic NAT
The following is an example of nftables rules for setting up basic Network Address Translation (NAT) using masquerade. If you have a static IP, it would be slightly faster to use source nat (SNAT) instead of masquerade. This way the router would replace the source with a predefined IP, instead of looking up the outgoing IP for every packet.
Notemasquerade is available in kernel 3.18 and up. When using NAT on kernels before 4.18, be sure to unload or disable iptables NAT, as it will take precedence over nftables NAT.
FILE
#!/sbin/nft -f flush ruleset table ip nat { chain prerouting { type nat hook prerouting priority 0; policy accept; } # for all packets to WAN, after routing, replace source address with primary IP of WAN interface chain postrouting { type nat hook postrouting priority 100; policy accept; oifname "wan0" masquerade } }
nftables.conf syntax
When working with nftables.conf, you can define sets in a number of ways. You can then reference those sets later on using notation.
Here are some examples showing sets defined in one line, spanning multiple lines, and sets referencing other sets. The set is then used in a rule to allow incoming traffic from certain IP ranges.
define SIMPLE_SET = { 192.168.1.1, 192.168.1.2 } define CDN_EDGE = { 192.168.1.1, 192.168.1.2, 192.168.1.3, 10.0.0.0/8 } define CDN_MONITORS = { 192.168.1.10, 192.168.1.20 } define CDN = { $CDN_EDGE, $CDN_MONITORS } # Allow HTTP(S) from approved IP ranges only tcp dport { http, https } ip saddr $CDN accept udp dport { http, https } ip saddr $CDN accept
Named sets specifications
Sets specifications are:
type or typeof, is obligatory and determines the data type of the set elements.
Supported data types if using the type keyword are:
-
- ipv4_addr: IPv4 address
- ipv6_addr: IPv6 address.
- ether_addr: Ethernet address.
- inet_proto: Inet protocol type.
- inet_service: Internet service (read tcp port for example)
- mark: Mark type.
- ifname: Network interface name (eth0, eth1..)
The typeof keyword is available since 0.9.4 and allows you to use a high level expression, then let nftables resolve the base type for you:
table inet mytable { set s1 { typeof osf name elements = { "Linux" } } set s2 { typeof vlan id elements = { 2, 3, 103 } } set s3 { typeof ip daddr elements = { 1.1.1.1 } } }
timeout, it determines how long an element stays in the set. The time string respects the format: «v1dv2hv3mv4s»:
% nft add table ip filter % nft add set ip filter ports {type inet_service \; timeout 3h45s \;}
These commands create a table named filter and add a set named ports to it, where elements are deleted after 3 hours and 45 seconds of being added.
-
flags, the available flags are:
- constant — set content may not change while bound
- interval — set contains intervals
- timeout — elements can be added with a timeout
Multiple flags should be separated by comma:
% nft add set ip filter flags_set {type ipv4_addr\; flags constant, interval\;}
gc-interval, stands for garbage collection interval, can only be used if timeout or flags timeout are active. The interval follows the same format of timeouts time string «v1dv2hv3mv4s».
elements, initialize the set with some elements in it:
% nft add set ip filter daddrs {type ipv4_addr \; flags timeout \; elements={192.168.1.1 timeout 10s, 192.168.1.2 timeout 30s} \;}
This command creates a set name daddrs with elements 192.168.1.1, which stays in it for 10s, and 192.168.1.2, which stays for 30s.
size, limits the maximum number of elements of the set. To create a set with maximum 2 elements type:
% nft add set ip filter saddrs {type ipv4_addr \; size 2 \;}
-
policy, determines set selection policy. Available values are:
- performance
- memory
counter, (available since version 0.9.5) which enables a counter per element:
table inet mytable { set s { typeof ip saddr counter elements = { 1.1.1.1 counter packets bytes , 1.1.1.2 counter packets bytes , 1.1.1.3 counter packets bytes , 1.1.1.4 counter packets bytes } } }
You can list the content of a named set via:
% nft list set ip filter myset
Используем nftables в Red Hat Enterprise Linux 8 +20
- 15.07.20 14:30
•
vlstrochkov
•
#511122
•
Хабрахабр
•
Перевод
•
•
3000
DevOps, Настройка Linux, Блог компании OTUS. Онлайн-образование
Статья подготовлена в преддверии старта курса «Администратор Linux»
В Red Hat Enterprise Linux 8 приоритетным низкоуровневым решением является nftables. В этой статье мы поговорим о том, как начать использовать nftables. Наиболее актуальной она будет для системных администраторов и DevOps-специалистов. Там, где это имеет смысл, мы поговорим о различиях между nftables и его предшественником — iptables.
Для начала необходимо отметить, что nftables – это userland-утилита, nft и подсистема ядра. Внутри ядра она строится на базе подсистемы netfilter. В этой статье мы будем говорить о взаимодействии пользователя с утилитой nft.
Здесь вы найдете примеры команд, которые сможете протестировать на машине. Они будут полезны для лучшего понимания содержания.
Мониторинг
Мониторинг — это всегда ключевой момент в построении периметра безопасности и обеспечении работы систем. И кроме классического «tail the logfile» мы предлагаем использовать еще два инструмента — metabase dashboard и метрики prometheus.
Панель мониторинга
Вездесущий cscli позволяет задеплоить нашу панель на основе metabase и docker.
Для начала рекомендуем ознакомиться с официальной документацией по установке docker.
cscli dashboard setup разворачивает новую панель мониторинга metabase на докере, генерируя попутно случайный пароль. Ну а дальше все относительно понятно и красиво:
Мониторинг: Prometheus
Если вам не по душе все эти графики, кнопки и веб-интерфейсы, и вы вообще предпочитаете работать через консоль, то для вас подойдет Prometheus вместо metabase.
Один из способов получить данные, это вызвать cscli metrics:
Важно понимать, что cscli metrics раскрывают только часть потенциала Prometheus. Более подробное описание, что же можно извлечь из показателей, вы получите (внезапно!) в официальной документации по Prometheus в CrowdSec
Если провести быстрый экскурс, то с помощью Prometheus вы можете получить информацию о следующих участках системы и метриках:
— Buckets: как много было создано и какого типа, заполнились/были переполнены с момента запуска демона;
— Acquisition: сколько строк/событий было прочитано из каждого из указанных источников, были ли они проанализированы и/или перемещены позже в корзины;
— Parser: сколько строк/событий было доставлено к каждому парсеру и удалось ли ему обработать упомянутые события;
— Local API: сколько раз был использован каждый маршрут и т. д.
Но как бы не было удобно работать в консоли через cscli, этого недостаточно. Так что рекомендуем использовать Prometheus в связке с Grafana. Вот как это выглядит на практике:
Установка CrowdSec
Для начала давайте установим последнюю версию CrowdSec (ну или можете забрать ее из нашего репозитория на GitHub):
В первую очередь, укажем, на какой машине мы работаем и что будем мониторить
Наш мастер установки позволяет выбрать сервисы для мониторинга обычными чекбоксами. Мы будем наблюдать за стандартным набором из nginx, sshd и самой Linux-системой.
Мастер установки еще и сканирует систему на ассоциированные лог-файлы и предлагает пользователю указать их для мониторинга:
Корректно подцепить логи к системе мониторинга крайне важно, потому что именно из логов CrowdSec будет черпать основную массу информации о происходящем. Если вы все сделали правильно, то мастер установки предложит вам выбрать коллекцию. . — это специальный набор конфигураций, который разрабатывался для различных кейсов и сценариев защиты системы и всего вашего стека
Например, коллекция Crowdsecurity/sshd используется для анализа журнала sshd и обнаружения брутфорса ssh или перебора пользователей.
— это специальный набор конфигураций, который разрабатывался для различных кейсов и сценариев защиты системы и всего вашего стека. Например, коллекция Crowdsecurity/sshd используется для анализа журнала sshd и обнаружения брутфорса ssh или перебора пользователей.
После того, как службы и связанные файлы журналов будут правильно идентифицированы (что очень важно, поскольку именно отсюда CrowdSec будет получать информацию), мастер предложит коллекции. Все коллекции основываются на нашем видении того, как и по каким направлениям стоит защищать систему (то есть никто не запрещает вам заняться ручной конфигурацией периметра, это просто костыль быстрой настройки).
Все коллекции основываются на нашем видении того, как и по каким направлениям стоит защищать систему (то есть никто не запрещает вам заняться ручной конфигурацией периметра, это просто костыль быстрой настройки).
Последний шаг мастера установки — развертывание общих белых списков, которые не дают банить частные IP-адреса
Это важно, потому что решение о блокировки принимает администратор системы, а не CrowdSec. Мы в этом случае просто предоставляем рекомендации
После завершения установки CrowdSec готов к работе.
rym — загрузка данных из API Яндекс.Метрики
Основные возможности пакета rym
Пакет rym позволяет вам работать со всеми доступными в Яндекс.Метрики API интерфейсами:
- Авторизация по протоколу oAuth2;
Основные функции пакета rym
- — Авторизаця;
- — Загрузка списка счётчиков Яндекс.Метрики;
- — Загрузка данных из API отчётов;
- — Загрузка данных из API совместимым с Core API Google Analytics;
- — Загрузка сырых данных из Logs API.
Заключение
Итак с помощью приведённых в этой статье пакетов вы вполне можете автоматизировать сбор данных из таких источников как Яндекс.Директ, Google Ads, Facebook, Вконтакте, MyTarget и Яндекс.Метрика. Конечно это далеко не исчерпывающий список сервисов которые используются интрент маркетологами, но уместить все инструменты в одну статью достаточно проблематично, поэтому если данная статья получит положительные отзывы я напишу продолжение.
Далее полученные данные можно преобразовывать с помощью пакета , и записывать в различные базы данных с помощью DBI интерфейса, но это уже довольно объёмные темы для следующих статей.
Удаляем ненужное правило
В данный момент мы добавили отладочное правило, и впоследствии окончания сеанса отладки его отлично бы выслать. Как это сделать?В iptables требовалось показать любое условие правила. В nftables несколько по другому.
Поначалу нужно получить номер правила в таблице. Его возможно увидеть в выводе команды nft -a list ruleset (опция важна).
Здесь handle 25 — это и есть номер правила. Теперь мы можем удалить его командой sudo nft delete rule inet filter input handle 25.
В отличие от iptables удаление правил по полному набору опций в nftables не поддерживается. Несколько неудобно, что нельзя больше скопировать правило и поменять -A/-I на -D, но зато и команда для удаления правил стала короче.
Verdict Maps
Verdict maps are a very interesting feature in nftables that allow you to perform an action based on packet information. Said more plainly, they map match criteria to an action.
Say for example, in order to logically divide your ruleset you want dedicated chains for processing TCP and UDP packets. You can use a verdict map to steer packets to those chains using a single rule.
# nft add chain inet my_table my_tcp_chain # nft add chain inet my_table my_udp_chain # nft add rule inet my_table my_filter_chain meta l4proto vmap { tcp : jump my_tcp_chain, udp : jump my_udp_chain } # nft list chain inet my_table my_filter_chain table inet my_table { chain my_filter_chain { ... meta nfproto ipv4 ip saddr . meta l4proto . udp dport { 10.30.30.30 . udp . bootps } accept meta l4proto vmap { tcp : jump my_tcp_chain, udp : jump my_udp_chain } } }
Of course, just like sets you can create mutable verdict maps.
# nft add map inet my_table my_vmap { type inet_proto : verdict \; }
Your eyes don’t deceive you. The syntax is very similar to sets. In fact, internally sets and verdict maps are built using a common data type.
Now you can use the mutable verdict map in a rule.
# nft add rule inet my_table my_filter_chain meta l4proto vmap @my_vmap
ryandexdirect — загрузка данных из Яндекс.Директ
Данный пакет предназначен для работы с API одной из наиболее популярных рекламных площадок в СНГ — Яндекс.Директ.
Возможности пакета ryandexdirect
- Авторизация в API Яндекса;
- Загрузка списка рекламных кампаний, ключевых слов, объявлений;
- Остановка и возобновление показов объявлений на уровне рекламных кампаний, ключевых слов и объявлений.
- Запрос остатка средств и других параметров общего счёта.
- Загрузка справочной информации (курсы валют, географический справочник и т.д.)
Основные функции
Основные функции доступные в ryandexdirect, которые могут вам понадобиться для работы с API Яндекс.Директ:
- — Авторизация в API;
- , , — Загрузка списка объявлений, рекламных кампаний, ключевых слов;
- — Загрузка статистики из Яндекс.Директ.
- — Загрузка справочной информации.
- , , —
О зависимостях в Linux. Что это и зачем нужно
Например, Вы захотели установить программу и нажали кнопку «Установить», а она спрашивает Вас про какие-то мифические и непонятные зависимости. Так давайте разберемся – а что же это такое?
Часто компоненты, используемые различными программами, выделяют в отдельные пакеты и помечают, что для работы ПО, предоставленного пакетом A, необходимо установить пакет Б. В таком случае говорят, что пакет A зависит от пакета Б или что между пакетами A и Б существует зависимость (обычно в роли зависимостей выступают какие-либо библиотеки, без которых программа не будет запускаться, поскольку использует функции этой библиотеки). Вот как раз отслеживанием зависимостей между такими пакетами и занимается уже неоднократно упомянутый менеджер пакетов. Говоря просто, пакетный менеджер это такая программа, которая ведёт базу данных установленных приложений и их версий, и всегда знает, какие файлы куда установлены, чтобы можно было поставить новые программы, удалить старые или обновить всю систему целиком без переустановки и вычищения мусора оставшихся файлов.
Вся эта огромная куча пакетов с их ворохом зависимостей друг от друга, управляемая пакетным менеджером, как раз и составляет Ваш дистрибутив Linux. Но это не просто куча мусора, а упорядоченная система, которая называется — та-дам! — репозитории пакетов программ. Круг замкнулся – мы вернулись к первому понятию – что такое репозиторий
Deleting Rules
Deleting rules is done by using the rule handle similar to the add and insert commands above.
The first step is to find the handle of the rule you want to delete.
# nft --handle list ruleset table inet my_table { # handle 21 chain my_filter_chain { # handle 1 type filter hook input priority 0; policy accept; tcp dport http accept # handle 3 tcp dport 1234 accept # handle 8 tcp dport nfs accept # handle 7 tcp dport ssh accept # handle 2 } }
Then use the to delete the rule.
# nft delete rule inet my_table my_filter_chain handle 8 # nft --handle list ruleset table inet my_table { # handle 21 chain my_filter_chain { # handle 1 type filter hook input priority 0; policy accept; tcp dport http accept # handle 3 tcp dport nfs accept # handle 7 tcp dport ssh accept # handle 2 } }
Несколько слов о нюансах
Напоследок все-таки хочется сказать, что какой бы Linux не была устойчивой, стабильной и неубиваемой, всё же пользователь должен придерживаться определенной осторожности. Например:
- Не надо искушать судьбу и ставить программы в Linux в обход менеджера пакетов, простой компиляцией.Работать они будут, но пакетный менеджер ничего о них не будет знать, из-за чего при обновлении системы или программ Вы рискуете получить больше проблем на свою голову, чем представляете. Устанавливайте программы только в виде пакетов.
- Не надо подключать те репозитории, о которых имеете совсем смутное представление. Например, не надо подключать репозитории со словами testing, debug и тому подобными терминами, ибо эти репозитории в первую очередь предназначены для самих разработчиков дистрибутивов и далеко не всегда стабильны.
- Не подключайте подряд все доступные репозитории, это тоже может сыграть с Вами злую шутку. Подключайте только самые необходимые, не надо жадничать
Например, при установке операционной системы Fedora по умолчанию сразу подключены два репозитория:
- Fedora(пакеты, которые подходят на любую комбинацию из компакт-дисков или DVD-дисков)
- Updates (обновленные пакеты, новее, чем репозиторий (хранилище) Fedora)
Для нормальной работы нужно подключить дополнительный репозиторий rpmfusion (без него Вам действительно не обойтись), что даст доступ к программам, которые не могли быть включены в дистрибутив из-за лицензионных ограничений (приложения, которые требуются для воспроизведения мультимедиафайлов, таких как mp3, dvd и т.д.; драйвера – к ним относятся проприетарные драйвера для ATI и NVIDIA; игры: Bub’s Brothers, Secret Maryo Chronicles, UFO: Alien Invasion, Wörms of Prey, xrick, GLtron и многие, многие другие; эмуляторы: эмулятор Commodore 64, а также Commodore 8 bit, эмулятор Amiga, Nestopia, ZSNES и много других)
Чтобы подключить этот репозиторий, достаточно в командной строке (терминале) от суперпользователя (root) ввести команды:
Обратите внимание, что репозиторий rpmfusion разделяется на две части: free и nonfree. Первый содержит чисто свободные программы в понимании FSF, распространяемые под GPL и совместимыми с ней лицензиями
Содержимое второго, вопреки названию, — также программы по преимуществу свободные, но попадающие под пресловутые патентные ограничения некоторых государств (например, аудио- и видеокодеки).
То же самое касается и менеджера пакетов в Fedora. Для нормальной и удобной работы менеджера пакетов (yum) в Fedora рекомендуется подключить дополнительный плагин fastestmirror. Этот плагин очень важен: он определяет не просто ближайшее зеркало, как это делают аналогичные утилиты из других систем управления пакетами, а устанавливает именно самое быстрое зеркало в данный момент – по времени отклика.
В двух словах как-то так
Цепочки и правила в nftables
В iptables есть три цепочки по умолчанию: ввод, вывод и пересылка. Эти три «цепочки» (и другие цепочки, если они у вас настроены) содержат «правила», и iptables работает путем сопоставления сетевого трафика со списком правил в цепочке. Если исследуемый трафик не соответствует ни одному правилу, в трафике будет использоваться политика цепочки по умолчанию (т. е. ACCEPT, DROP).
Nftables работает аналогично этому, с «цепями» и «правилами». Однако он не начинается с каких-либо базовых цепей, что делает настройку немного более гибкой.
Одна из областей неэффективности для iptables заключается в том, что все данные сети должны проходить одну или несколько из этих вышеупомянутых цепочек, даже если трафик не соответствует каким-либо правилам. Независимо от того, настроены ли у вас цепочки или нет, iptables все равно проверяет данные вашей сети на предмет их соответствия.
Management
Atomic rule loading
nft supports atomic rule replacement by using nft -f. Thus it is possible to conveniently manage the rules in a text file. Comments may be added to the file by prefixing them with , as with shell scripts; they can also be appended to the end of rules as , and these will be preserved as-is in nft list output.
Compared to building a ruleset with multiple nft calls in a shell script, this also ensures that failures in such a script do not end with an only partially applied ruleset.
FILE skeleton nftables config file
#! /sbin/nft -f # this is a skeleton file for an nftables ruleset # load it with nft -f /etc/nftables-local # it is supported to define variables here, that can later on be # expanded in rule definitions define http_ports = {80, 443} flush ruleset table inet local { chain input { type filter hook input priority 0; policy drop; tcp dport $http_ports counter accept comment "incoming http traffic"; } chain output { type filter hook output priority 0; policy drop; } }
Backup
You can also backup your rules:
NoteIf you are loading your ruleset with nft -f from a file, do not overwrite this file with the nft list ruleset output. This overwrites comments and variable definitions.