{"id":18551947,"url":"https://github.com/bepb/knock","last_synced_at":"2025-04-24T03:30:48.623Z","repository":{"id":200481220,"uuid":"705611565","full_name":"BEPb/knock","owner":"BEPb","description":"init","archived":false,"fork":false,"pushed_at":"2023-10-16T13:53:25.000Z","size":35,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-30T06:32:03.585Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BEPb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-16T11:00:55.000Z","updated_at":"2025-01-05T10:30:20.000Z","dependencies_parsed_at":"2023-10-17T03:10:17.328Z","dependency_job_id":null,"html_url":"https://github.com/BEPb/knock","commit_stats":null,"previous_names":["bepb/knock"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2Fknock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2Fknock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2Fknock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2Fknock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BEPb","download_url":"https://codeload.github.com/BEPb/knock/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250556128,"owners_count":21449935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T21:11:12.616Z","updated_at":"2025-04-24T03:30:48.604Z","avatar_url":"https://github.com/BEPb.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Knock\nпрограмма для подлключения по ssh после выполнения входной последовательности портов\n\nPort Knocking состоит из двух программ:\n— сервер (knockd)\n— клиент (knock)\nУстановим сервер:\n```commandline\nsudo apt-get install knockd\n```\nДалее просмотрим все сетевые порты:\n```commandline\n$ ip addr\n1: lo: \u003cLOOPBACK,UP,LOWER_UP\u003e mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n    ...\n2: eth0: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc fq_codel state UP group default qlen 1000\n    ...\n3: eth1: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc fq_codel state UP group default qlen 1000\n    ...\n```\nВ данном случае eth0это интерфейс, который привязывается к общедоступному IP-адресу. Поэтому я буду использовать этот интерфейс для настройки knockd.\n\nДалее отредактируйте knockdфайл конфигурации.\nфайл конфигурации вы можете найти по адресу: /usr/local/etc/knockd.conf\nесли его там нет используйте поиск:\n```commandline\nfind / -name 'knockd.conf'\n```\nотредактируйте файл конфигурации по вашему усмотрению, установите свою последовательность портов, сохраните изменения:\n```commandline\nsudo nano /usr/local/etc/knockd.conf\nsudo nano /etc/default/knockd\n```\n```commandline\n# control if we start knockd at init or not\n# 1 = start\n# anything else = don't start\n# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING\nSTART_KNOCKD=1\n\n# command line options\nKNOCKD_OPTS=\"-i eth1\"\n```\nЗапустим сервирную часть knockd:\n```commandline\nsudo systemctl start knockd\nsudo systemctl enable knockd\nsudo systemctl status knockd\n```\nесли хотим изменить порт ssh допустим на 6036, раскоментируйте и поменяйти в файле конфигурации порт 22 на другой\n```commandline\nsudo nano /etc/ssh/sshd_config\n\nпосле чего перезапустим службу\n\nsystemctl restart sshd.service\n```\nСначала выполните следующую команду, чтобы она не разорвала наше текущее активное соединение:\n```commandline\nsudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT\n```\n\nТеперь выполните iptables-команду, чтобы заблокировать все входящие SSH-соединения на порту 60636по умолчанию:\n```commandline\nsudo iptables -A INPUT -p tcp --dport 60636 -j REJECT\nили для ее отмены\nsudo iptables -D INPUT -p tcp --dport 60636 -j REJECT\n```\n\n### Сборка\n\n#### Проверка\nЧтобы собрать Knockd, убедитесь, что у вас есть libpcap и инструменты autoconf установлен. \nДля libpcap:\n```commandline\ndpkg -l | grep libpcap\n```\nЕсли libpcap установлен, вы увидите строку, которая начинается с ii и которая указывает имя пакета, версию и \nописание. Если его нет, то ничего не будет выведено. \nДля autoconf:\n```commandline\ndpkg -l | grep autoconf\n```\nАналогично предыдущему, если autoconf установлен, вы увидите строку, начинающуюся с ii, соответствующую этому пакету.\nЕсли его нет, то ничего не будет выведено. \n\n#### Подготовка\nЕсли пакеты не были установлены, то для установки libpcap:\nВведите следующую команду в терминал:\n```commandline\nsudo apt-get install libpcap-dev\n```\nУстановка autoconf:\nВведите следующую команду в терминал:\n```commandline\nsudo apt-get install autoconf\n```\nПосле ввода команды sudo apt-get install ..., вам может потребоваться ввести пароль администратора для подтверждения \nустановки. После завершения установки вы сможете использовать libpcap и autoconf в вашей системе \nТеперь установим git и сборщики build-essential и gcc:\n```commandline\nsudo apt-get install git\nsudo apt-get install build-essential\nsudo apt-get install gcc make\n```\n\n#### Установка\nЗатем выполните следующее:\n```commandline\ngit clone https://github.com/BEPb/knock\ncd knock\nautoreconf -fi\n./configure --prefix=/usr/local\nmake\nsudo make install\n```\nубедится в том что установка прошла успешно, можно набрав команду:\n```commandline\nknock -V\n```\nвы должны увидеть следующее:\n```commandline\nknock 1.0\nCopyright (C) 2023 BEPb\n```\nтак же для того что бы увидеть что программа запущена и работает:\n```commandline\nps -ax | grep knock\n```\n\n### ПРИМЕР\nПриведенный ниже пример можно использовать для запуска брандмауэра со строгой политикой подключения, доступ к которому \nвозможен только после успешного выполнения последовательного подключения по разным портам.\n\n   1. Клиент отправляет четыре пакета TCP SYN на сервер по следующим портам:\n      38281, 29374, 4921, 54918\n   2. Сервер обнаруживает это и запускает команду iptables, чтобы открыть порт 22 для клиента.\n   3. Клиент подключается к серверу через SSH и делает все, что ему нужно.\n   4. Клиент отправляет на сервер еще четыре TCP SYN-пакета: \n     37281, 8529, 40127, 10100\n   5. Сервер обнаруживает это и запускает другую команду iptables, чтобы закрыть порт 22 к клиенту.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbepb%2Fknock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbepb%2Fknock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbepb%2Fknock/lists"}