This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| сервис_firewall [2021/09/15 10:16] val [FreeBSD (pf)] | сервис_firewall [2025/10/21 11:24] (current) val [nftables] | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| ===== Конфигурация для рабочей станции ===== | ===== Конфигурация для рабочей станции ===== | ||
| + | |||
| + | |||
| ==== Linux (iptables) ==== | ==== Linux (iptables) ==== | ||
| - | * [[https://help.ubuntu.com/community/IptablesHowTo]] | + | |
| - | * [[http://ru.wikibooks.org/wiki/Iptables]] | + | * [[https://help.ubuntu.com/community/IptablesHowTo|ubuntu.com community IptablesHowTo]] | 
| - | * [[https://ru.wikipedia.org/wiki/Netfilter]] | + | * [[https://ru.wikibooks.org/wiki/Iptables|Материал из Викиучебника iptables — утилита командной строки]] | 
| + | * [[https://ru.wikipedia.org/wiki/Netfilter|Материал из Википедии netfilter — межсетевой экран]] | ||
| === Настройка фильтра === | === Настройка фильтра === | ||
| Line 44: | Line 47: | ||
| </code> | </code> | ||
| - | === Сохранение состояния iptables === | + | === Управление состоянием iptables === | 
| + | |||
| + | == Вариант 1 == | ||
| + | |||
| + | == Сохранение состояния iptables == | ||
| <code> | <code> | ||
| - | # iptables-save > /etc/iptables.rules | + | root@gate:~# iptables-save > /etc/iptables.rules | 
| </code> | </code> | ||
| - | === Восстановление состояния iptables === | + | == Восстановление состояния iptables == | 
| <code> | <code> | ||
| - | # iptables-restore < /etc/iptables.rules | + | root@gate:~# iptables-restore < /etc/iptables.rules | 
| </code> | </code> | ||
| - | === Восстановление состояния iptables при загрузке === | + | == Восстановление состояния iptables при загрузке == | 
| - | + | ||
| - | == Debian/Ubuntu == | + | |
| <code> | <code> | ||
| - | # cat /etc/network/interfaces | + | root@gate:~# cat /etc/network/interfaces | 
| </code><code> | </code><code> | ||
| ... | ... | ||
| Line 67: | Line 72: | ||
| </code> | </code> | ||
| - | ==== CentOS ==== | + | == Вариант 2 == | 
| + | <code> | ||
| + | # apt install iptables-persistent | ||
| + | |||
| + | # netfilter-persistent save | ||
| + | </code> | ||
| - | === CentOS 7 === | + | ==== CentOS, AlmaLinux ==== | 
| * [[https://bozza.ru/art-259.html|Настройка firewalld CentOS 7 с примерами команд]] | * [[https://bozza.ru/art-259.html|Настройка firewalld CentOS 7 с примерами команд]] | ||
| Line 109: | Line 119: | ||
| или, возвращаем исходное состояние | или, возвращаем исходное состояние | ||
| # firewall-cmd --reload | # firewall-cmd --reload | ||
| + | |||
| + | # nft list ruleset | ||
| # systemctl stop firewalld | # systemctl stop firewalld | ||
| Line 157: | Line 169: | ||
| </code> | </code> | ||
| ===== Конфигурация для шлюза WAN - LAN ===== | ===== Конфигурация для шлюза WAN - LAN ===== | ||
| + | |||
| + | ==== nftables ==== | ||
| + | |||
| + | * [[https://habr.com/ru/companies/ruvds/articles/580648/|Переход с iptables на nftables. Краткий справочник]] | ||
| + | * [[https://cryptoworld.su/kak-perejti-s-iptables-na-nftables-polnaya-istrukciya/|Как перейти с iptables на Nftables — полная инструкция]] | ||
| + | * [[https://serveradmin.ru/bazovye-nastrojki-nftables-dlya-veb-servera-na-debian/|Набор правил nftables для веб сервера]] | ||
| + | |||
| + | <code> | ||
| + | root@openvpn2:~# systemctl enable nftables.service --now | ||
| + | |||
| + | root@openvpn2:~# cat /etc/nftables.conf | ||
| + | </code><code> | ||
| + | #!/usr/sbin/nft -f | ||
| + | |||
| + | flush ruleset | ||
| + | |||
| + | table inet filter { | ||
| + | chain input { | ||
| + | type filter hook input priority filter; | ||
| + | } | ||
| + | chain forward { | ||
| + | type filter hook forward priority filter; policy drop; | ||
| + | ct state established,related counter accept | ||
| + | # BMSTU DNS noc@bmstu.ru | ||
| + | ip daddr 195.19.32.2 udp dport 53 counter accept | ||
| + | # DMZ NETS noc@bmstu.ru | ||
| + | ip daddr { 195.19.40.0/24, 195.19.50.0/24 } counter accept | ||
| + | # EU eu@bmstu.ru | ||
| + | ip daddr 195.19.33.59 tcp dport { 80, 443 } counter accept | ||
| + | # CAS proxy noc@bmstu.ru | ||
| + | ip daddr 195.19.33.9 tcp dport 8443 counter accept | ||
| + | # lm.bmstu.ru | ||
| + | ip daddr 195.19.33.222 tcp dport 22 counter drop | ||
| + | ip daddr 195.19.33.222 counter accept | ||
| + | |||
| + | } | ||
| + | chain output { | ||
| + | type filter hook output priority filter; | ||
| + | } | ||
| + | } | ||
| + | </code><code> | ||
| + | root@openvpn2:~# systemctl reload nftables.service | ||
| + | |||
| + | root@openvpn2:~# nft list ruleset | ||
| + | </code> | ||
| ==== Debian/Ubuntu (iptables) ==== | ==== Debian/Ubuntu (iptables) ==== | ||
| Line 357: | Line 414: | ||
| root@gate:~# iptables-save > /etc/iptables.rules | root@gate:~# iptables-save > /etc/iptables.rules | ||
| + | или | ||
| + | root@gate:~# netfilter-persistent save | ||
| + | </code> | ||
| + | ==== Debian/Ubuntu (nftables) ==== | ||
| + | <code> | ||
| + | # cat /etc/nftables.conf | ||
| + | </code><code> | ||
| + | ... | ||
| + | table inet filter { | ||
| + | chain input { | ||
| + | type filter hook input priority filter; | ||
| + | } | ||
| + | chain forward { | ||
| + | type filter hook forward priority filter; | ||
| + | iifname "eth0" oifname "eth1" counter packets 0 bytes 0 accept | ||
| + | iifname "eth1" oifname "eth0" counter packets 0 bytes 0 accept | ||
| + | iifname "eth2" counter packets 0 bytes 0 accept | ||
| + | iifname "tun*" counter packets 0 bytes 0 accept | ||
| + | ct state established,related counter packets 0 bytes 0 accept | ||
| + | counter packets 0 bytes 0 drop | ||
| + | } | ||
| + | chain output { | ||
| + | type filter hook output priority filter; | ||
| + | ct state established,related counter packets 0 bytes 0 accept | ||
| + | oifname "eth2" counter packets 0 bytes 0 drop | ||
| + | } | ||
| + | } | ||
| </code> | </code> | ||
| - | |||
| ==== FreeBSD (pf) ==== | ==== FreeBSD (pf) ==== | ||
| <code> | <code> | ||
| Line 389: | Line 472: | ||
| ==== Debian/Ubuntu (iptables) ==== | ==== Debian/Ubuntu (iptables) ==== | ||
| + | |||
| + | === Ограничение частоты подключений === | ||
| <code> | <code> | ||
| root@gate:~# cat firewall.sh | root@gate:~# cat firewall.sh | ||
| Line 397: | Line 482: | ||
| iptables -A FORWARD -p tcp --dport 80 -i eth1 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP | iptables -A FORWARD -p tcp --dport 80 -i eth1 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP | ||
| iptables -A FORWARD -p tcp --dport 80 -i eth1 -m conntrack --ctstate NEW -m recent --set | iptables -A FORWARD -p tcp --dport 80 -i eth1 -m conntrack --ctstate NEW -m recent --set | ||
| + | |||
| + | #iptables -A FORWARD -p tcp -i eth1 -m conntrack --ctstate NEW -m recent --update --seconds 1 --hitcount 10 -j LOG | ||
| + | #iptables -A FORWARD -p tcp -i eth1 -m conntrack --ctstate NEW -m recent --update --seconds 1 --hitcount 10 -j DROP | ||
| + | #iptables -A FORWARD -p tcp -i eth1 -m conntrack --ctstate NEW -m recent --set | ||
| ... | ... | ||
| </code><code> | </code><code> | ||
| root@gate:~# tail -f /var/log/syslog | root@gate:~# tail -f /var/log/syslog | ||
| + | root@gate:~# journalctl -f | ||
| root@gate:~# cat /proc/net/xt_recent/DEFAULT | root@gate:~# cat /proc/net/xt_recent/DEFAULT | ||
| + | root@gate:~# watch cat /proc/net/xt_recent/DEFAULT | ||
| root@gate:~# echo -10.5.7.1 >/proc/net/xt_recent/DEFAULT | root@gate:~# echo -10.5.7.1 >/proc/net/xt_recent/DEFAULT | ||
| Line 408: | Line 499: | ||
| </code> | </code> | ||
| + | ==== nftables ==== | ||
| + | |||
| + | === Блокировка абонентов, превысивших частоту подключений === | ||
| + | |||
| + | * [[https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/7/html/security_guide/sec-using_nftables_to_limit_the_amount_of_connections|Using nftables to limit the amount of connections]] | ||
| + | |||
| + | <code> | ||
| + | gate# cat /etc/nftables.conf | ||
| + | </code><code> | ||
| + | ... | ||
| + | table inet filter { | ||
| + | set denylist { | ||
| + | type ipv4_addr | ||
| + | size 65535 | ||
| + | flags dynamic,timeout | ||
| + | timeout 5m | ||
| + | } | ||
| + | ... | ||
| + | chain forward { | ||
| + | type filter hook forward priority filter; policy accept; | ||
| + | ip protocol tcp ct state new,untracked limit rate over 10/second add @denylist { ip saddr } | ||
| + | ip saddr @denylist drop | ||
| + | } | ||
| + | ... | ||
| + | </code><code> | ||
| + | gate# nft list set inet filter denylist | ||
| + | |||
| + | gate# nft flush set inet filter denylist | ||
| + | </code> | ||
| ==== FreeBSD (pf) ==== | ==== FreeBSD (pf) ==== | ||