Найти в Дзене

iptables часть 4 (настройка доступа к SSH-серверу)

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкции по iptables для фильтрации входящего/исходящего трафика SSH-сервера (в основном для собственного пользования) с пояснениями и все возможными мыслями. Для того что бы iptables использующий политику блокировать все, пропускал входящий/исходящий трафик следует написать разрешающие правила в цепочку INPUT и OUTPUT Для начала посмотрим текущие правила у нас используются, для этого выполним следующую команду sudo iptables -nvL либо же посмотреть сами правила, выполнив команду sudo iptables -S для того что бы написать правило важно знать по какому порту будем подключаться к серверу по умолчанию 22 если не меняли, иначе смотрим конфиг /etc/ssh/sshd_config параметр Port. с портом определились, в данном случае для наглядности буду использовать стандартный. Наше правило на входящий трафик будет примерно таким: sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT разберем правило по пар

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкции по iptables для фильтрации входящего/исходящего трафика SSH-сервера (в основном для собственного пользования) с пояснениями и все возможными мыслями.

Для того что бы iptables использующий политику блокировать все, пропускал входящий/исходящий трафик следует написать разрешающие правила в цепочку INPUT и OUTPUT

Для начала посмотрим текущие правила у нас используются, для этого выполним следующую команду

sudo iptables -nvL

либо же посмотреть сами правила, выполнив команду

sudo iptables -S

для того что бы написать правило важно знать по какому порту будем подключаться к серверу по умолчанию 22 если не меняли, иначе смотрим конфиг /etc/ssh/sshd_config параметр Port.

с портом определились, в данном случае для наглядности буду использовать стандартный. Наше правило на входящий трафик будет примерно таким:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

разберем правило по параметрам

  • -A INPUT: Добавить правило в цепочку INPUT (входящий трафик).
  • -p tcp: Протокол TCP.
  • --dport 22: Порт назначения (destination port).
  • -j ACCEPT: Действие — принять пакет.

читаем правило, добавить разрешающее правило в цепочку входящего трафика по протоколу TCP на порт 22. Таким образом мы разрешили любой входящий трафик на порт 22 по протоколу TCP.

Переходим к цепочке исходящего трафика, пишем аналогичное правило в целом очень похожее на вышеизложенное

sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

  • -A OUTPUT: Добавить правило в цепочку OUTPUT (исходящий трафик).
  • -p tcp: Протокол TCP.
  • --dport 22: Порт назначения (на удалённом сервере).
  • -j ACCEPT: Действие — принять пакет.

читаем правило, добавить разрешающее правило в цепочку исходящего трафика по протоколу TCP на порт 22

Но все же думаю стоит ограничить подключение к этому порту более узкому кругу пользователей, слегка изменив правило. Например во так:

sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
  • -s 192.168.1.0/24: Источник подсеть 192.168.1.0/24

Таким образом ограничили входящий трафик к SSH-серверу. Читаем правило, добавить разрешающее правило в цепочку входящего трафика из подсети 192.168.1.0/24 по протоколу TCP на порт 22. Так же подправим аналогично правилам цепочки INPUT с небольшим нюансом укажем подсеть назначения

sudo iptables -A OUTPUT -p tcp -d 192.168.1.0/24 --dport 22 -j ACCEPT
  • -d 192.168.1.0/24: подсеть назначения.

либо же более направленное например указать подсеть назначения 192.168.1.0/24 (подсеть клиента) Читаем правило, добавить разрешающее правило в цепочку исходящего трафика в подсети 192.168.1.0/24 по протоколу TCP на порт 22.

а прошлые два правила мы удалим так как они нам больше не нужны

sudo iptables -D INPUT 4
sudo iptables -D OUTPUT 8

для удаления будем использовать порядковый номер правила

-2

Либо же более конкретное правило если у вас статичный IP например 192.168.1.10

sudo iptables -A INPUT -p tcp -s 192.168.1.10 --dport 22 -j ACCEPT
  • -s 192.168.1.10: Источник (source IP).

Читаем правило, добавить разрешающее правило в цепочку входящего трафика на IP 192.168.1.10 (клиент) по протоколу TCP на порт 22.

sudo iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 22 -j ACCEPT
  • -d 192.168.1.10: Адрес назначения (destination IP).

Читаем правило, добавить разрешающее правило в цепочку исходящего трафика с IP 192.168.1.10 (клиент) по протоколу TCP на порт 22. Так ограничили доступ в пределах одного конкретного IP адреса

далее удаляем ненужные правила с подсетью

sudo iptables -D INPUT 4
sudo iptables -D OUTPUT 8

-3

после настройки iptables сохраняем правила, так как SSH-сервер на Debian то выполним следующую команду:

sudo netfilter-persistent save
-4

так же можно посмотреть правила с помощью следующей команды

sudo iptables -S
-5

Нюанс. что бы ip адрес клиента был статичным есть два варианта, прописать настройки сети либо же настроить dhcp сервер на выдачу определенного ip по mac-адресу, что мы и сделаем ниже. Приступим, отредактируем на сервере конфиг dhcp-сервера

nano /etc/dhcp/dhcpd.conf

добавим в подсеть (192.168.1.0) следующие параметры

host ArchLinux # в данном случае клиент имеет имя ArchLinux
{
hardware ethernet мас-адрес; # мас-адрес клиента
fixed-address 192.168.1.10; # ip-адрес ктоторый будет выдавать dhcp клиенту с данным мас адресом
}

-6

сохраняем и проверяем все ли верно указали в конфиге командой

sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf

если ошибок нет перезапускаем dhcp-сервер

sudo systemctl start isc-dhcp-server
sudo systemctl status isc-dhcp-server

-7

в данном случае видим предупреждение(то есть выдача ip все равно срабатывает) аренда 192.168.1.10 вне диапазона подсети, исправляем в /etc/dhcp/dhcpd.conf параметр range на 192.168.1.10 192.168.1.200 что бы ip-адрес входил в диапазон раздаваемых адресов

далее вероятно потребуется удалить список арендованных адресов командой ниже

sudo rm /var/lib/dhcp/dhcpd.leases

и перезапустить dhcp сервер

sudo systemctl restart isc-dhcp-server

За основу взята документация по iptables, ssh и dhcp серверам, а так же информация с форумов по данной тематике, информация других пользователей размещенная на просторах всемирной паутины и собственные наработки.
За сим откланиваюсь...