Linux кеңештери жана амалдары: сервер, ачыңыз

Өзүн, жакындарын SSH/RDP/башка аркылуу дүйнөнүн каалаган жеринен серверлерине кирүү мүмкүнчүлүгүн камсыз кылуу керек болгондор үчүн, кичинекей RTFM/spur.

Колубуздагы каалаган түзмөктөн VPN жана башка коңгуроолорсуз иштешибиз керек.

Жана сервер менен ашыкча көнүгүү жасабашыңыз үчүн.

Бул үчүн сизге керек болгон нерсе knockd, түз колдору жана 5 мүнөттүк иш.

"Баары Интернетте", албетте (ал тургай Habré), бирок конкреттүү ишке ашырууга келгенде, ал ушул жерден башталат ...

Мисал катары биз Fedora/CentOS колдонуп машыгабыз, бирок бул маанилүү эмес.

Шпор бул маселеде жаңы баштагандарга да, эксперттерге да ылайыктуу, андыктан комментарийлер болот, бирок алар кыскараак болот.

1. Сервер

  • knock-серверди орнотуу:
    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

    "Ачуучу" бөлүгү 1 сааттан кийин автоматтык түрдө жабылат. Сиз эч качан билесиз...

  • /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

  • ичинде айлануучу виртуалдык Windows серверине RDP кошо аласыз (/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 репозиторийлеринде бүгүнкү күндө эң акыркы такылдатуу 0.63. Ким UDP каалайт - 0.70 пакеттерди изде.
  • Interface
    Демейки Fedora/CentOS конфигурациясында бул линия жоголгон. Колуңуз менен кошуңуз, антпесе иштебейт.
  • убакыт бүттү
    Бул жерде сиз табитиңизге жараша тандай аласыз. Кардардын бардык соккулар үчүн жетиштүү убактысы болушу керек - жана порт сканер боту бузулат (жана 146% сканерлейт).
  • баштоо/токтоо/буйрук.
    Эгер бир буйрук болсо, анда команда, экөө болсо, анда баштоо_буйрук+токтотуу_командасы.
    Эгер ката кетирсеңиз, knockd унчукпай калат, бирок иштебейт.
  • прото
    Теориялык жактан UDP колдонсо болот. Иш жүзүндө мен tcp менен udpди аралаштырдым, Балидеги пляждан келген кардар дарбазаны бешинчи жолу гана ача алды. Анткени TCP керек болгондо келди, бирок UDP бул факт эмес. Бирок бул дагы бир даам маселеси.
  • ирээт
    Жашыруун тырмоо - тизмектер кесилишпөөсү керек ... муну кантип айтышым керек ...

Мисалы, бул:

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

By kick 11111 ачык кийинки тепкени 22222 күтөт. Бирок, бул (22222) тепкенден кийин ал иштей баштайт жакын жана баары бузулат. Бул кардардын кечигүүсүнө да көз каранды. Мындай нерселер ©.

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

Сиз, албетте, DROP ордуна REECT жасай аласыз, бирок DROP менен жашоо боттор үчүн кызыктуураак болот.

3. Кардар

Бул жер эң кызыктуу (менин көз карашым боюнча), анткени сиз каалаган пляждан гана эмес, каалаган түзмөктөн да иштешиңиз керек.

Негизи, бир катар кардарлардын тизмеси бар сайты долбоор, бирок бул ошол эле сериядан "бардыгы Интернетте." Ошондуктан, мен бул жерде жана азыр менин колумда эмне иштеп жатканын тизмелейм.

Кардар тандоодо, ал пакеттердин ортосунда кечигүү опциясын колдой тургандыгын текшеришиңиз керек. Ооба, пляждардын ортосунда айырмачылыктар бар жана 100 мегабит пакеттер белгиленген жерден керектүү убакта керектүү тартипте келе тургандыгына эч качан кепилдик бербейт.

Ооба, кардарды орнотуп жатканда, кечиктирүүнү өзүңүз тандап алышыңыз керек. Өтө көп тайм-аут - боттор кол салат, өтө аз - кардардын убактысы болбойт. Өтө көп кечигүү - кардар аны өз убагында аткара албайт же акмактардын чатагы болот ("тырмоолорду" караңыз), өтө аз - пакеттер Интернетте жоголуп кетет.

Таймут = 5 сек, кечигүү = 100..500ms - бул толугу менен иштеген вариант

Windows

Канчалык күлкүлүү угулбасын, Google үчүн бул платформа үчүн так тыкылдатуу кардары үчүн анча маанилүү эмес. Мындай CLI кечиктирүүнү колдойт, TCP - жана жаа жок.

Же болбосо, аракет кылсаңыз болот бул ушул. Кыязы, менин Google торт эмес.

Linux

Бул жерде баары жөнөкөй:

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

Белги

Жумушчу вариант - KnockOnD (дүкөндөн бекер).

Android

"Портторду тык" Жарнама эмес, бирок ал жөн гана иштейт. Жана иштеп чыгуучулар абдан жооп беришет.

PS Хабреге белгилөө, албетте, Кудай аны качандыр бир күнү колдосун ...

UPD1: рахмат жакшы адамга табылган иштеп жаткан кардар Windows астында.
UPD2: дагы бир жакшы адам iptables аягында жаңы эрежелерди коюу дайыма эле пайдалуу боло бербестигин эскертти. Бирок - бул көз каранды.

Source: www.habr.com

Комментарий кошуу