ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืฉืœ ืœื™ื ื•ืงืก: ืฉืจืช, ืคืชื—

ืœืžื™ ืฉืฆืจื™ืš ืœืกืคืง ืœืขืฆืžื, ืœื™ืงื™ืจื™ื”ื, ื’ื™ืฉื” ืœืฉืจืชื™ื ืžื›ืœ ืžืงื•ื ื‘ืขื•ืœื ื‘ืืžืฆืขื•ืช SSH/RDP/ืื—ืจ, RTFM/ื“ื•ืจื‘ืŸ ืงื˜ืŸ.

ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ืกืชื“ืจ ื‘ืœื™ VPN ื•ืฉืืจ ืคืขืžื•ื ื™ื ื•ืฉืจื™ืงื•ืช, ืžื›ืœ ืžื›ืฉื™ืจ ื‘ื”ื™ืฉื’ ื™ื“.

ื•ื›ื“ื™ ืฉืœื ืชืฆื˜ืจื›ื• ืœื”ืชืืžืŸ ื™ื•ืชืจ ืžื“ื™ ืขื ื”ืฉืจืช.

ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ื‘ืฉื‘ื™ืœ ื–ื” ื”ื•ื ื“ืคืง, ื™ื“ื™ื™ื ื™ืฉืจื•ืช ื•-5 ื“ืงื•ืช ืขื‘ื•ื“ื”.

"ื”ื›ืœ ื ืžืฆื ื‘ืื™ื ื˜ืจื ื˜," ื›ืžื•ื‘ืŸ (ืืคื™ืœื• ืขืœ ื”ืื‘ืจื”), ืื‘ืœ ื›ืฉืžื“ื•ื‘ืจ ื‘ื™ื™ืฉื•ื ืกืคืฆื™ืคื™, ื›ืืŸ ื–ื” ืžืชื—ื™ืœ...

ื ืชืจื’ืœ ืฉื™ืžื•ืฉ ื‘-Fedora/CentOS ื›ื“ื•ื’ืžื”, ืื‘ืœ ื–ื” ืœื ืžืฉื ื”.

ื”ื“ื•ืจื‘ืŸ ืžืชืื™ื ื’ื ืœืžืชื—ื™ืœื™ื ื•ื’ื ืœืžื•ืžื—ื™ื ื‘ืขื ื™ื™ืŸ ื”ื–ื”, ืื– ื™ื”ื™ื• ื”ืขืจื•ืช ืื‘ืœ ื™ื”ื™ื• ืงืฆืจื•ืช ื™ื•ืชืจ.

1. ืฉืจืช

  • ื”ืชืงืŸ knock-server:
    yum/dnf install knock-server

  • ื”ื’ื“ืจ ืื•ืชื• (ืœืžืฉืœ ื‘-ssh) - /etc/knockd.conf:

    [options]
        UseSyslog
        interface = enp1s0f0
    [SSHopen]
        sequence        = 33333,22222,11111
        seq_timeout     = 5
        tcpflags        = syn
        start_command   = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout     = 3600
        stop_command    = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    [SSHclose]
        sequence        = 11111,22222,33333
        seq_timeout     = 5
        tcpflags        = syn
        command         = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

    ื—ืœืง "ื”ืคืชื™ื—ื”" ืžื•ื’ื“ืจ ืœืกื’ื™ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืœืื—ืจ ืฉืขื”. ืื™ ืืคืฉืจ ืœื“ืขืช...

  • /etc/sysconfig/iptables:

    ...
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT
    ...

  • ืงึธื“ึดื™ืžึธื”:

    service iptables restart
    service knockd start

  • ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ RDP ืœืฉืจืช Windows ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืฉืžืกืชื•ื‘ื‘ ื‘ืคื ื™ื (/etc/knockd.conf; ื”ื—ืœืฃ ืืช ืฉื ื”ืžืžืฉืง ืœืคื™ ื˜ืขืžืš):

    [RDPopen]
        sequence        = 44444,33333,22222
        seq_timeout     = 5
        tcpflags        = syn
        start_command   = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
        cmd_timeout     = 3600
        stop_command    = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
    [RDPclose]
        sequence        = 22222,33333,44444
        seq_timeout     = 5
        tcpflags        = syn
        command         = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2

    ืื ื• ืขื•ืงื‘ื™ื ืื—ืจ ื›ืœ ื”ื‘ืขื™ื˜ื•ืช ืฉืœื ื• ืžื”ืœืงื•ื— ื‘ืฉืจืช ืขื ื”ืคืงื•ื“ื” iptables -S.

2. ืžื“ืจื™ืš ืœืžื’ืจืคื•ืช

knockd.conf:

ื”ืžืื ื” ืžื›ื™ืœ ื’ื ื”ื›ืœ (ืื‘ืœ ื–ื” ืœื ืžื“ื•ื™ืง), ืื‘ืœ knockd ื”ื•ื ื—ื‘ืจ ืฉื“ื™ ืงืžืฆืŸ ื‘ื”ื•ื“ืขื•ืช, ืื– ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžืื•ื“ ื–ื”ื™ืจ.

  • ื’ืจืกื”
    ื‘ืžืื’ืจื™ Fedora/CentOS, ื”-knockd ื”ืื—ืจื•ืŸ ืœื”ื™ื•ื ื”ื•ื 0.63. ืžื™ ืฉืจื•ืฆื” UDP - ื—ืคืฉ 0.70 ื—ื‘ื™ืœื•ืช.
  • ืžืžืฉืง
    ื‘ืชืฆื•ืจืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ Fedora/CentOS ืฉื•ืจื” ื–ื• ืœื. ืžื•ืกื™ืคื™ื ืขื ื”ื™ื“ื™ื™ื, ืื—ืจืช ื–ื” ืœื ื™ืขื‘ื•ื“.
  • ืคืกืง ื–ืžืŸ
    ื›ืืŸ ืชื•ื›ืœื• ืœื‘ื—ื•ืจ ืœืคื™ ื˜ืขืžื›ื. ื™ืฉ ืฆื•ืจืš ืฉืœืœืงื•ื— ื™ื”ื™ื” ืžืกืคื™ืง ื–ืžืŸ ืœื›ืœ ื”ื‘ืขื™ื˜ื•ืช - ื•ื”ื‘ื•ื˜ ืฉืœ ืกื•ืจืง ื”ืคื•ืจื˜ื™ื ื™ืชืงืœืงืœ (ื•-146% ื™ืกืจื•ืง).
  • ื”ืชื—ืœ/ืขืฆื•ืจ/ืคืงื•ื“ื”.
    ืื ื™ืฉ ืคืงื•ื“ื” ืื—ืช, ืื– ืคืงื•ื“ื”, ืื ื™ืฉ ืฉืชื™ื™ื, ืื– start_command+stop_command.
    ืื ืืชื” ืขื•ืฉื” ื˜ืขื•ืช, knockd ื™ืฉืชื•ืง, ืื‘ืœ ืœื ื™ืขื‘ื•ื“.
  • ืคืจื•ื˜ื•
    ืชื™ืื•ืจื˜ื™ืช, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-UDP. ื‘ืคื•ืขืœ ืขืจื‘ื‘ืชื™ tcp ื•-udp, ื•ื”ืœืงื•ื— ืžื”ื—ื•ืฃ ื‘ื‘ืืœื™ ื”ืฆืœื™ื— ืœืคืชื•ื— ืืช ื”ืฉืขืจ ืจืง ื‘ืคืขื ื”ื—ืžื™ืฉื™ืช. ื›ื™ TCP ื”ื’ื™ืข ื›ืฉืฆืจื™ืš, ืื‘ืœ UDP ื”ื™ื ืœื ืขื•ื‘ื“ื”. ืื‘ืœ ื–ื” ืฉื•ื‘ ืขื ื™ื™ืŸ ืฉืœ ื˜ืขื.
  • ืจืฆืฃ
    ื”ืžื’ืจืคื” ื”ืžืฉืชืžืขืช ื”ื™ื ืฉื”ืจืฆืคื™ื ืœื ืฆืจื™ื›ื™ื ืœื”ืฆื˜ืœื‘... ืื™ืš ืœื ืกื— ืืช ื–ื”...

ืœื“ื•ื’ืžื”, ื–ื”:

open: 11111,22222,33333
close: 22222,11111,33333

ื‘ื‘ืขื™ื˜ื” 11111 ืœืคืชื•ื— ื™ืžืชื™ืŸ ืœื‘ืขื™ื˜ื” ื”ื‘ืื” ื‘-22222. ืขื ื–ืืช, ืœืื—ืจ ื”ื‘ืขื™ื˜ื” ื”ื–ื• (22222) ื–ื” ื™ืชื—ื™ืœ ืœืขื‘ื•ื“ close ื•ื”ื›ืœ ื™ืฉื‘ืจ. ื–ื” ืชืœื•ื™ ื’ื ื‘ืขื™ื›ื•ื‘ ืฉืœ ื”ืœืงื•ื—. ื“ื‘ืจื™ื ื›ืืœื” ยฉ.

iptables

ืื ื‘-/etc/sysconfig/iptables ื–ื”:

*nat
:PREROUTING ACCEPT [0:0]

ื–ื” ืœื ืžืžืฉ ืžืคืจื™ืข ืœื ื•, ืื– ื”ื ื” ื–ื”:

*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited

ื–ื” ื›ืŸ ืžืคืจื™ืข.

ืžื›ื™ื•ื•ืŸ ืฉ-knockd ืžื•ืกื™ืฃ ื—ื•ืงื™ื ืœืกื•ืฃ ืฉืจืฉืจืช INPUT, ื ืงื‘ืœ ื“ื—ื™ื™ื”.

ื•ื›ื™ื‘ื•ื™ ื”ื“ื—ื™ื™ื” ื”ื–ื” ืื•ืžืจ ืœืคืชื•ื— ืืช ื”ืžื›ื•ื ื™ืช ืœื›ืœ ื”ืจื•ื—ื•ืช.

ื›ื“ื™ ืœื ืœืœื›ืช ืœืื™ื‘ื•ื“ ื‘-iptables ืžื” ืœื”ื›ื ื™ืก ืœืคื ื™ ืžื” (ื›ื›ื” ืื ืฉื™ื ืžืฆื™ืข) ื‘ื•ืื• ื ืขืฉื” ืืช ื–ื” ืคืฉื•ื˜ ื™ื•ืชืจ:

  • ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ ืขืœ CentOS/Fedora ืจืืฉื•ืŸ ื”ื›ืœืœ ("ืžื” ืฉืœื ืืกื•ืจ ืžื•ืชืจ") ื™ื•ื—ืœืฃ ื‘ื”ื™ืคืš,
  • ื•ืื ื• ืžืกื™ืจื™ื ืืช ื”ื›ืœืœ ื”ืื—ืจื•ืŸ.

ื”ืชื•ืฆืื” ืฆืจื™ื›ื” ืœื”ื™ื•ืช:

*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited

ืืชื” ื™ื›ื•ืœ, ื›ืžื•ื‘ืŸ, ืœืขืฉื•ืช REJECT ื‘ืžืงื•ื DROP, ืื‘ืœ ืขื DROP ื”ื—ื™ื™ื ื™ื”ื™ื• ืžื”ื ื™ื ื™ื•ืชืจ ืขื‘ื•ืจ ื‘ื•ื˜ื™ื.

3. ืœืงื•ื—

ื”ืžืงื•ื ื”ื–ื” ื”ื•ื ื”ืžืขื ื™ื™ืŸ ื‘ื™ื•ืชืจ (ืžื ืงื•ื“ืช ืžื‘ื˜ื™), ืžื›ื™ื•ื•ืŸ ืฉืืชื” ืฆืจื™ืš ืœืขื‘ื•ื“ ืœื ืจืง ืžื›ืœ ื—ื•ืฃ, ืืœื ื’ื ืžื›ืœ ืžื›ืฉื™ืจ.

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืžืกืคืจ ืœืงื•ื—ื•ืช ืจืฉื•ืžื™ื ื‘ ืžืงื•ื•ืŸ ื”ืคืจื•ื™ืงื˜, ืื‘ืœ ื–ื” ืžืื•ืชื” ืกื“ืจื” "ื”ื›ืœ ื‘ืื™ื ื˜ืจื ื˜". ืœื›ืŸ, ืืคืจื˜ ืžื” ืขื•ื‘ื“ ื‘ืงืฆื•ืช ื”ืืฆื‘ืขื•ืช ืฉืœื™ ื›ืืŸ ื•ืขื›ืฉื™ื•.

ื‘ืขืช ื‘ื—ื™ืจืช ืœืงื•ื—, ืขืœื™ืš ืœื•ื•ื“ื ืฉื”ื•ื ืชื•ืžืš ื‘ืืคืฉืจื•ืช ื”ื”ืฉื”ื™ื” ื‘ื™ืŸ ืžื ื•ืช. ื›ืŸ, ื™ืฉ ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื—ื•ืคื™ื ื•-100 ืžื’ื”-ื‘ื™ื˜ ืœืขื•ืœื ืœื ืžื‘ื˜ื™ื—ื™ื ืฉื”ืžื ื•ืช ื™ื’ื™ืขื• ื‘ืกื“ืจ ื”ื ื›ื•ืŸ ื‘ื–ืžืŸ ื”ื ื›ื•ืŸ ืžืžื™ืงื•ื ื ืชื•ืŸ.

ื•ื›ืŸ, ื‘ืขืช ื”ืงืžืช ืœืงื•ื—, ืืชื” ืฆืจื™ืš ืœื‘ื—ื•ืจ ืืช ื”ืขื™ื›ื•ื‘ ื‘ืขืฆืžืš. ื™ื•ืชืจ ืžื“ื™ ืคืกืง ื–ืžืŸ - ื‘ื•ื˜ื™ื ื™ืชืงืคื•, ืžืขื˜ ืžื“ื™ - ืœืœืงื•ื— ืœื ื™ื”ื™ื” ื–ืžืŸ. ื™ื•ืชืจ ืžื“ื™ ืขื™ื›ื•ื‘ - ื”ืœืงื•ื— ืœื ื™ื’ื™ืข ื‘ื–ืžืŸ ืื• ืฉืชื”ื™ื” ื”ืชื ื’ืฉื•ืช ืฉืœ ืื™ื“ื™ื•ื˜ื™ื (ืจืื” "ื’ืจืคื•ืช"), ืžืขื˜ ืžื“ื™ - ื”ื—ื‘ื™ืœื•ืช ื™ืœื›ื• ืœืื™ื‘ื•ื“ ื‘ืื™ื ื˜ืจื ื˜.

ืขื ืคืกืง ื–ืžืŸ = 5 ืฉื ื™ื•ืช, ื”ืฉื”ื™ื” = 100..500 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ื”ื™ื ืืคืฉืจื•ืช ืขื•ื‘ื“ืช ืœื—ืœื•ื˜ื™ืŸ

Windows

ืœื ืžืฉื ื” ื›ืžื” ื–ื” ื ืฉืžืข ืžืฆื—ื™ืง, ื–ื” ื“ื™ ืœื ื˜ืจื™ื•ื•ื™ืืœื™ ืœื’ื•ื’ืœ ืœืงื•ื— ื ื•ืง ื‘ืจื•ืจ ืœืคืœื˜ืคื•ืจืžื” ื”ื–ื•. ื›ื–ื” ืฉื”-CLI ืชื•ืžืš ื‘-delay, TCP - ื•ืœืœื ืงืฉืชื•ืช.

ืœื—ื™ืœื•ืคื™ืŸ, ืืชื” ื™ื›ื•ืœ ืœื ืกื•ืช ื–ื”. ื›ื ืจืื” ืฉื”ื’ื•ื’ืœ ืฉืœื™ ื”ื•ื ืœื ืขื•ื’ื”.

ืœื™ื ื•ืงืก

ื”ื›ืœ ืคืฉื•ื˜ ื›ืืŸ:

dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333

MacOS

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ื”ื™ื ืœื”ืชืงื™ืŸ ืืช ื”ืคื•ืจื˜ ืž-homebrew:
brew install knock
ื•ืฆื™ื™ืจ ืืช ืงื‘ืฆื™ ื”ืืฆื•ื•ื” ื”ื“ืจื•ืฉื™ื ืขื‘ื•ืจ ืคืงื•ื“ื•ืช ื›ืžื•:

#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333

iOS

ืืคืฉืจื•ืช ืขื‘ื•ื“ื” ื”ื™ื KnockOnD (ื—ื™ื ื, ืžื”ื—ื ื•ืช).

ืื ื“ืจื•ืื™ื“

"ื“ืคื•ืง ืขืœ ื™ืฆื™ืื•ืช" ืœื ืคืจืกื•ื, ืื‘ืœ ื–ื” ืคืฉื•ื˜ ืขื•ื‘ื“. ื•ื”ืžืคืชื—ื™ื ืžื’ื™ื‘ื™ื ืœืžื“ื™.

ื .ื‘ ืกื™ืžื•ืŸ ืขืœ ื”ืื‘ืจื”, ื›ืžื•ื‘ืŸ, ืืœื•ื”ื™ื ื™ื‘ืจืš ืื•ืชื• ืžืชื™ืฉื”ื•...

UPD1: ื”ื•ื“ื•ืช ืœ ืœืื“ื ื˜ื•ื‘ ืžืฆืืชื™ ืœืงื•ื— ืขื•ื‘ื“ ืชื—ืช Windows.
UPD2: ืขื•ื“ ืื—ื“ ืื™ืฉ ื˜ื•ื‘ ื”ื–ื›ื™ืจ ืœื™ ืฉื”ื•ืกืคืช ื›ืœืœื™ื ื—ื“ืฉื™ื ื‘ืกื•ืฃ iptables ืœื ืชืžื™ื“ ืฉื™ืžื•ืฉื™ืช. ืื‘ืœ - ื–ื” ืชืœื•ื™.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”