Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкции по 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
для удаления будем использовать порядковый номер правила
Либо же более конкретное правило если у вас статичный 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
после настройки iptables сохраняем правила, так как SSH-сервер на Debian то выполним следующую команду:
sudo netfilter-persistent save
так же можно посмотреть правила с помощью следующей команды
sudo iptables -S
Нюанс. что бы 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 клиенту с данным мас адресом
}
сохраняем и проверяем все ли верно указали в конфиге командой
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
если ошибок нет перезапускаем dhcp-сервер
sudo systemctl start isc-dhcp-server
sudo systemctl status isc-dhcp-server
в данном случае видим предупреждение(то есть выдача 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 серверам, а так же информация с форумов по данной тематике, информация других пользователей размещенная на просторах всемирной паутины и собственные наработки.
За сим откланиваюсь...