The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Пример правил nftables с реализацией port knoсking для открытия доступа к SSH
Общий набор правил для nftables с реализацией техники "port knoсking",
позволяющей организовать временное открытие сетевого порта к SSH только после
предварительной попытки соединения к определённой последовательности портов
(порты задаются в параметрах "define ssh_port_knock_[1234]").


   #!/usr/bin/env -S bash -c 'nft -cof "${0}" && nft -f "${0}"'

   flush ruleset

   table inet filter {

   	define sshd_port = 2299;

   	set ssh_bad_ipv4_set {
   		type ipv4_addr;
   		flags dynamic;
   		timeout 15m;
   	}

   	set ssh_bad_ipv6_set {
   		type ipv6_addr;
   		flags dynamic;
   		timeout 15m;
   	}

   	set ssh_clients_ipv4_set {
   		type ipv4_addr;
   		flags dynamic;
   		timeout 3s;
   	}

   	set ssh_clients_ipv6_set {
   		type ipv6_addr;
   		flags dynamic;
   		timeout 3s;
   	}

   	set ssh_clients_candidates_ipv4_set {
   		type ipv4_addr . inet_service;
   		flags dynamic;
   		timeout 1s;
   	}

   	set ssh_clients_candidates_ipv6_set {
   		type ipv6_addr . inet_service;
   		flags dynamic;
   		timeout 1s;
   	}

   	### printf %d\\n 0x$(openssl rand -hex 2)
   	define ssh_port_knock_1 = changeme1;
   	define ssh_port_knock_2 = changeme2;
   	define ssh_port_knock_3 = changeme3;
   	define ssh_port_knock_4 = changeme4;

   	### opened ports
   	set serving_tcp_ports_set {
   		type inet_service;
   		flags constant;
   #		elements = {
   #			http,
   #			https,
   #		};
   	}

   	set trusted_ipv4_set {
   		type ipv4_addr;
   		flags constant, interval;
   		elements = {
   			169.254.169.254,
   			10.0.0.0/8,
   			192.168.0.0/16,
   		};
   	}

   	set trusted_ipv6_set {
   		type ipv6_addr;
   		flags constant, interval;
   		elements = {
   			fd00:ec2::254,
   		};
   	}

   	define dns_resolvers = {
   		0.0.0.0/0,
   	}

   	define allowed_icmp_types_input = {
   		echo-reply,
   		echo-request,
   		destination-unreachable,
   	}

   	define allowed_icmp_types_output = {
   		echo-reply,
   		echo-request,
   		destination-unreachable,
   	}

   	### rfc4890; assist mobility candidate codes: 144, 145, 146, 147
   	define allowed_icmpv6_types_input = {
   		echo-reply,
   		echo-request,
   		destination-unreachable,
   		packet-too-big,
   		time-exceeded,
   		parameter-problem,
   		nd-router-solicit,
   		nd-router-advert,
   		nd-neighbor-solicit,
   		nd-neighbor-advert,
   		ind-neighbor-solicit,
   		ind-neighbor-advert,
   		mld-listener-query,
   		mld-listener-report,
   		mld-listener-done,
   		mld2-listener-report,
   	}

   	### rfc4890; assist mobility candidate codes: 144, 145, 146, 147
   	define allowed_icmpv6_types_output = {
   		echo-reply,
   		echo-request,
   		destination-unreachable,
   		packet-too-big,
   		time-exceeded,
   		parameter-problem,
   		nd-router-solicit,
   		nd-router-advert,
   		nd-neighbor-solicit,
   		nd-neighbor-advert,
   		ind-neighbor-solicit,
   		ind-neighbor-advert,
   		mld-listener-query,
   		mld-listener-report,
   		mld-listener-done,
   		mld2-listener-report,
   	}

   	chain INPUT {
   		type filter hook input priority filter + 20; policy drop;

   		iif lo accept comment "accept input connections via loopback";
   		iif != lo ip saddr 127.0.0.0/8 counter drop comment "drop loopback connections not coming from loopback";
   		iif != lo ip daddr 127.0.0.0/8 counter drop comment "drop loopback connections not coming from loopback";
   		iif != lo ip6 saddr ::1/128 counter drop comment "drop loopback connections not coming from loopback";
   		iif != lo ip6 daddr ::1/128 counter drop comment "drop loopback connections not coming from loopback";

   		### as little rules as possible for trusted hosts
   		ip saddr @trusted_ipv4_set accept comment "accept trusted hosts";
   		ip6 saddr @trusted_ipv6_set accept comment "accept trusted hosts";

   		### before ct
   		meta l4proto icmp icmp type $allowed_icmp_types_input limit rate 10/second burst 20 packets counter accept comment "accept icmp with limits";
   		meta l4proto icmpv6 icmpv6 type $allowed_icmpv6_types_input limit rate 10/second burst 20 packets counter accept comment "accept icmpv6 with limits";
   		meta l4proto { icmp, icmpv6 } counter drop comment "drop icmp over limit";

   		ct state vmap { established : accept, related : accept, invalid : drop };

   		tcp dport @serving_tcp_ports_set ct state new counter accept comment "accept connections to serving tcp ports";

   		### port knocking
   		#tcp dport $ssh_port_knock_1 add @ssh_clients_candidates_ipv4_set { ip saddr . $ssh_port_knock_2 };
   		#tcp dport $ssh_port_knock_1 add @ssh_clients_candidates_ipv6_set { ip6 saddr . $ssh_port_knock_2 };
   		#tcp dport $ssh_port_knock_2 ip saddr . tcp dport @ssh_clients_candidates_ipv4_set add @ssh_clients_candidates_ipv4_set { ip saddr . $ssh_port_knock_3 };
   		#tcp dport $ssh_port_knock_2 ip6 saddr . tcp dport @ssh_clients_candidates_ipv6_set add @ssh_clients_candidates_ipv6_set { ip6 saddr . $ssh_port_knock_3 };
   		#tcp dport $ssh_port_knock_3 ip saddr . tcp dport @ssh_clients_candidates_ipv4_set add @ssh_clients_candidates_ipv4_set { ip saddr . $ssh_port_knock_4 };
   		#tcp dport $ssh_port_knock_3 ip6 saddr . tcp dport @ssh_clients_candidates_ipv6_set add @ssh_clients_candidates_ipv6_set { ip6 saddr . $ssh_port_knock_4 };
   		#tcp dport $ssh_port_knock_4 ip saddr . tcp dport @ssh_clients_candidates_ipv4_set add @ssh_clients_ipv4_set { ip saddr } counter log prefix "ssh port knocked : ";
   		#tcp dport $ssh_port_knock_4 ip6 saddr . tcp dport @ssh_clients_candidates_ipv6_set add @ssh_clients_ipv6_set { ip6 saddr } counter log prefix "ssh port knocked : ";
   		#tcp dport $sshd_port ip saddr @ssh_clients_ipv4_set counter accept;
   		#tcp dport $sshd_port ip6 saddr @ssh_clients_ipv6_set counter accept;

   		### rate limits
   		tcp dport $sshd_port ct state new, untracked meter ssh_conns_ratemeter4 { ip saddr timeout 5m limit rate over 1/minute burst 7 packets } counter update @ssh_bad_ipv4_set { ip saddr } comment "update ssh bruteforce set with saddr of attacker; hint: nft list meter inet filter ssh_conns_ratemeter4";
   		tcp dport $sshd_port ct state new, untracked meter ssh_conns_ratemeter6 { ip6 saddr timeout 5m limit rate over 1/minute burst 7 packets } counter update @ssh_bad_ipv6_set { ip6 saddr } comment "update ssh bruteforce set with saddr of attacker; hint: nft list meter inet filter ssh_conns_ratemeter6";
   		tcp dport $sshd_port ip saddr @ssh_bad_ipv4_set counter drop comment "drop ssh bruteforce; hint: nft list set inet filter ssh_bad_ipv4_set";
   		tcp dport $sshd_port ip6 saddr @ssh_bad_ipv6_set counter drop comment "drop ssh bruteforce; hint: nft list set inet filter ssh_bad_ipv6_set";
   		tcp dport $sshd_port counter accept comment "accept ssh connections";

   		### new rules place here:

   		counter comment "count dropped packets";
   		#log prefix "nft drop IN : " comment "log dropped packets";
   	}

   	chain OUTPUT {
   		type filter hook output priority filter + 20; policy drop;

   		oif lo accept comment "accept input connections via loopback";
   		oif != lo ip saddr 127.0.0.0/8 counter drop comment "drop loopback connections not coming from loopback";
   		oif != lo ip daddr 127.0.0.0/8 counter drop comment "drop loopback connections not coming from loopback";
   		oif != lo ip6 saddr ::1/128 counter drop comment "drop loopback connections not coming from loopback";
   		oif != lo ip6 daddr ::1/128 counter drop comment "drop loopback connections not coming from loopback";

   		### as little rules as possible for trusted hosts
   		ip daddr @trusted_ipv4_set accept comment "accept trusted hosts";
   		ip6 daddr @trusted_ipv6_set accept comment "accept trusted hosts";

   		### before ct
   		meta l4proto icmp icmp type $allowed_icmp_types_output limit rate 10/second burst 20 packets counter accept comment "accept icmp with limits";
   		meta l4proto icmpv6 icmpv6 type $allowed_icmpv6_types_output limit rate 10/second burst 20 packets counter accept comment "accept icmpv6 with limits";
   		meta l4proto { icmp, icmpv6 } counter drop comment "drop icmp over limit";

   		ct state vmap { established : accept, related : accept, invalid : drop };

   		meta skuid { root, uadm, chrony } meta skgid { root, uadm, chrony } counter accept comment "accept connections from specified users";
   		meta skuid postfix meta skgid postfix tcp dport { smtp, smtps, submission } counter accept comment "accept connections from postfix user";
   		meta l4proto { tcp, udp } th dport 53 ip daddr $dns_resolvers counter accept comment "accept dns; for paranoia specify comma separated list of resolvers in $dns_resolvers";

   		### new rules place here:

   		counter comment "count dropped packets";
   		log prefix "nft drop OUT : " comment "log dropped packets";
   	}

   	chain FORWARD {
   		type filter hook forward priority filter + 20; policy drop;

   		log prefix "nft drop FWD : " comment "log dropped packets";
   	}

   }
 
31.03.2023 , Автор: umask
Ключи: nftables, port, knocking / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетные фильтры в Linux: iptables, ipchains

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, sabitov (ok), 08:03, 01/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    "chain OUTPUT" -- комментарии при обработке лупбека неправильные. Понятно, что копипаста рулит, но не до такой же степени! :)
     
     
  • 2.4, umask (?), 01:04, 02/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Так лучше Я, если честно, думал что возникнет вопрос, прежде всего, про iif ... большой текст свёрнут, показать
     

  • 1.2, sabitov (ok), 08:19, 01/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну, и если тешить паранойю, то icmpv6 лучше проверять отдельным правилом, т.к. он реально нихрена непростой :(

    У меня так:

    add rule  inet fw input_icmpv6 \
            ip6 saddr @lan_list_6 \
            icmpv6 type echo-request \
                    accept

    add rule  inet fw input_icmpv6 \
            ip6 nexthdr icmpv6 \
            icmpv6 type echo-request \
                    limit rate 15/minute \
                    accept

    #Router Solicitation
    add rule  inet fw input_icmpv6 \
            ip6 saddr { fe80::/10, 2001:db8::/48, ::0/128 } \
            ip6 daddr { ff02::2 } \
            ip6 hoplimit 255 \
            icmpv6 type 133 \
            icmpv6 code 0 \
                    accept

    #Neighbor Solicitation
    add rule  inet fw input_icmpv6 \
            ip6 saddr { fe80::/10, 2001:db8::/48, ::0/128 } \
            ip6 daddr { fe80::/10, 2001:db8::/48, ff02::0001:ff00:0/104 } \
            ip6 hoplimit 255 \
            icmpv6 type 135 \
            icmpv6 code 0 \
                    accept

    #Router Advertisement
    #Neighbor Advertisement
    add rule  inet fw input_icmpv6 \
            ip6 saddr { fe80::/10, 2001:db8::/48 } \
            ip6 daddr { ff02::1, fe80::/10, 2001:db8::/48 } \
            ip6 hoplimit 255 \
            icmpv6 type { 134, 136 } \
            icmpv6 code 0 \
                    accept

    add rule  inet fw input_icmpv6 \
            ip6 nexthdr icmpv6 \
            icmpv6 type { 1, 2, 3, 4 } \
                    accept

    Не настаиваю, но вдруг пригодится :)

     
     
  • 2.5, umask (?), 01:11, 02/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >         icmpv6 code 0 \
    >            
    >     accept
    > add rule  inet fw input_icmpv6 \
    >         ip6 nexthdr icmpv6 \
    >         icmpv6 type { 1,
    > 2, 3, 4 } \
    >            
    >     accept
    > Не настаиваю, но вдруг пригодится :)

    Спасибо.

    А можно увидеть ваш rule set полностью?

    Думаю, здесь можно попробовать упросить правила через virdict map (vmap). Но нужно пробовать, насколько это будет удобно в итоге.

    Ещё бы проэкспериментировать, что ядро думает на advertisement/solicitation на не link-local адреса. Возможно, что по стандарту icmp и вовсе не уйдёт дальше маршрутизатора. Да, icmp6 не прост.

     

  • 1.3, anonymous (??), 13:18, 01/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Для включения port knocking нужно закомментировать правила в ### rate limits и раскомментировать - в ### port knocking.

    И конечно, заменить changeme[1-4] номерами портов.

     
  • 1.6, OpenEcho (?), 08:01, 02/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вообще сурово так, для такой задачи то...

    Не проще URL knocking?
    Курлишь секретный линк с клиента, мониторишь лог веб сервера с tail -f и если есть запрос по секретному линку тo просто открываешь порт для айпишника застуканного вебсервером... и простота спасет от ошибок

     
     
  • 2.10, Tron is Whistling (?), 09:56, 04/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Есть маленькая незадачка - вёбсервер к тому времени может лечь, а чтобы поднять - надо SSH :D
     
     
  • 3.12, OpenEcho (?), 19:31, 04/04/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Есть маленькая незадачка - вёбсервер к тому времени может лечь, а чтобы
    > поднять - надо SSH :D

    И как часто веб сервера "ложаться"? И ни какого мониторинга который автоматически рестартуют, а только все ручками? Для URL-knocking можно вообще отдельный веб сервис держать на нестандартных портах и простейших веб серверах, хоть на busybox. Зато открыть SSH порт можно будет без "спец" програм стучащих по портам (особенно актуально в комадировках)

     
     
  • 4.16, Tron is Whistling (?), 09:19, 05/04/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ещё раз: SSH нужен для доступа к системе в т.ч. в критических случаях. Подвязывать его на дополнительный сервис - так себе затея, но если ССЗБ - why not?

    В принципе я ниже всё написал. Можно UDP отправить. Можно даже TCP SYN с единственно правильным sequence - это вообще не засвет ни разу :D

     
     
  • 5.17, Tron is Whistling (?), 09:21, 05/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    SYN кстати прикольная тема. На тот же порт, где и SSH. Выглядеть будет просто как retry.
     
  • 4.33, Аноним (33), 17:04, 06/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Вот это и будет как раз именно тот самый день. Когда сильно пожалеешь о усложнении добавлением +1 сервиса веб-сервера и процессов разбора логов. Память там, лимиты на число файлов/соединений, прочие сложности упрощающего решения через добавление сложных процессов.
     
  • 2.11, Tron is Whistling (?), 09:57, 04/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Впрочем никто не мешает сделать вместо port knocking просто u32 knocking - и посылать "секретный" UDP с определённым ключом. Вот только после каждой посылки ключ менять за***ься.
     
     
  • 3.13, OpenEcho (?), 19:36, 04/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Впрочем никто не мешает сделать вместо port knocking просто u32 knocking -
    > и посылать "секретный" UDP с определённым ключом. Вот только после каждой
    > посылки ключ менять за***ься.

    Это будет явный засвет для MITM (в смысле что используется какая-то технология, а значит субьект для исследования), в случае же с HTTPS секретный линк не засвечивается и в общем потоке запросов затерян

     
     
  • 4.14, Tron is Whistling (?), 09:14, 05/04/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну, ещё раз повторюсь - HTTPS к тому времени может лежать, и чего делать? Ехать?
    В принципе засвет кнокинга не критичен, можно даже часто не менять, потому что далее ещё SSH.
     
  • 4.15, Tron is Whistling (?), 09:16, 05/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и опять же - можно не засвечивать. UDP бывает разный. На порт 53 например отправить традиционный DNS-запрос к некому похожему на реальный домен. И усё. Или на порт 443 инициацию квака с добавочкой.
     

  • 1.7, Anonx (?), 10:06, 02/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    set trusted_ipv4_set {
       169.254.169.254,

    Зачем метадату то в трастед?

     
  • 1.8, Tron is Whistling (?), 09:51, 04/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вообще из всей этой портяны неплохо бы было выделить только собственно port knocking, и его и опубликовать.
     
  • 1.9, Tron is Whistling (?), 09:55, 04/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    На iptables/recent или iptables/ipset/SET сие кстати выглядит куда читабельнее.
     
     
  • 2.19, Аноним (19), 18:33, 05/04/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И примерно в 3 раза короче.
     

  • 1.18, Аноним (19), 18:32, 05/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  Автор: umask

    Ложь.

    Это стырено с nftables manual.

     
     
  • 2.20, Pensia2077 (?), 23:50, 05/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    O_o

    Ничего себе!

    Весь ruleset сп*****ли?

     
     
  • 3.21, Аноним (19), 13:19, 06/04/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ваш мусор до и после стыренных правил ничего не меняет.

    Ссылки на оригиналы оставлять надо.

     

  • 1.22, Страдивариус (?), 15:26, 06/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А со стороны клиента как стучаться в это нужно и чем?
     
     
  • 2.25, Pensia2077 (?), 01:27, 12/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > А со стороны клиента как стучаться в это нужно и чем?

    knockd/knock

     

  • 1.23, pashev.ru (?), 00:06, 09/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Не надо так мудрить с шибангом.
     
     
  • 2.24, Pensia2077 (?), 01:26, 12/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Why not?
     

  • 1.26, Hui (?), 12:02, 15/04/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Что за шизики пишут эти статьи....

    Для создания правила port-knocking с использованием nftables для открытия порта 22 после нока на порту 1122, вы можете использовать следующую команду:

    nft add rule ip filter input tcp dport 22 ct state new,untracked meta nftrace set 1 reject with tcp reset

    nft add rule ip filter input tcp dport 1122 tcp flags syn meta nftrace set 1 ct state new,untracked tcp dport 22 accept


    Это создаст два правила. Первое правило запрещает входящий трафик на порт 22, если он не соответствует заданным условиям. Второе правило открывает порт 22 после успешного нока на порту 1122. Важно понимать, что это только пример и вы можете изменить порты и условия в зависимости от своих потребностей.

     
  • 1.28, Пряник (?), 09:55, 12/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Никогда не понимал, зачем port knocking для SSH? Там итак где-то 1 попытка в секунду, с такой скоростью брутфорс не сработает. Лучше для уязвимых сервисов, типа RDP/VNC/SMB/IPMI. Попытка сменить SSH порт вообще забавляет. Может ещё порт SMTP/IMAP смените на 2525? Мало ли ваш postfix взломают и начнут спам слать.
     
     
  • 2.32, Страдивариус (?), 21:19, 05/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Логи засираются.
     
  • 2.36, xen (??), 15:00, 28/07/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    4 гига логов по сравнению с 20 мегабайт. Если места хватает, то не страшно, но на небольших машинках имеет вполне смысл
     
     
  • 3.37, Пряник (?), 15:50, 28/07/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Вспоминаем про RateLimit логов.
     
     
  • 4.38, mikhailnov (ok), 20:29, 01/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, чтобы успешный вход злоумышленника вообще не был залогирован?
     

  • 1.29, pavlinux (ok), 13:49, 13/06/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно traceroute/tracepath в студию, где ICMPv6 без искажений проходит?
     
  • 1.30, Аноним (30), 22:49, 16/06/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сложно очень. Я бы примерно так действовал для последовательности 1111, 2222, 3333, 4444.

    # Закрыть доступ к SSH
    nft add rule filter input tcp dport 22 ct state new reject

    # Определить последовательность портов для порт-нокинга
    nft add chain filter port_knocking { type filter hook prerouting priority 0 \; }
    nft add rule filter port_knocking tcp dport 1111 tcp flags syn counter accept
    nft add rule filter port_knocking tcp dport 2222 tcp flags syn recent set policy timeout seconds 15 name "knock2" counter accept
    nft add rule filter port_knocking tcp dport 3333 tcp flags syn recent set policy timeout seconds 15 name "knock3" counter accept
    nft add rule filter port_knocking tcp dport 4444 tcp flags syn recent set policy timeout seconds 15 name "knock4" counter accept

    # Добавить временное правило на открытие доступа к SSH
    nft add rule filter input tcp dport 22 ct state new ip saddr <клиент> recent check seconds 15 name "knock4" counter accept

    # Установить таймер на закрытие доступа к SSH
    nft add rule filter input tcp dport 22 ct state established,related,untracked counter accept

     
  • 1.31, Аноним (31), 17:01, 26/06/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Такая простыня... проще надо быть.

    iptables -A INPUT -p tcp -m tcp --dport 1111 -m recent --set --name SSH0 --mask 255.255.255.255 --rsource -m comment --comment "knock-knock port for SSH" -j DROP
    iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 60 --name SSH0 --mask 255.255.255.255 --rsource -m comment --comment "60 seconds for SSH connect" -j ACCEPT

     
  • 1.34, Аноним (34), 17:29, 10/07/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    nftables - фаервол курильщика
    iptables + ipset - фаервол здорового человека
     
  • 1.35, daWSL (?), 21:08, 21/07/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Коллеги, прошу прощения если я чего-то "матёро недогоняю", но вот реально, эта "простыня" правда сильно "православнее" 6-ти строчек в iptables?
     
  • 1.39, лохпидр (?), 13:21, 05/08/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    port knocking это своего рода пароль... но зачем? есть же сертификаты
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру