Debian iptables разрешить доступ ssh

Обновлено: 02.07.2024

После установки нового сервера приходится выполнять один и тот же набор стандартных настроек. Сегодня мы займемся базовой настройкой сервера под управлением операционной системы Debian. Я приведу практические советы по небольшому увеличению безопасности и удобству администрирования, основанные на моем личном опыте.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Данная статья является частью единого цикла статьей про сервер Debian.

Введение

Любая работа с сервером после установки чаще всего начинается со стандартных обязательных действий, без которых либо не получится продвинуться дальше, либо будет неудобно работать. Например, вам в любом случае необходимо выполнить сетевые настройки, желательно обновить систему и установить часовой пояс. Рекомендуется сразу настроить автообновление времени, подрихтовать параметры sshd, установить midnight commander и выполнить другие настройки.

Об этом я хочу рассказать в статье. Я буду делиться своим реальным опытом работы. Это не значит, что нужно делать так, как я. Я могу в чем-то ошибаться, что-то делать не так удобно, как можно было бы сделать. Это просто советы, которые кому-то помогут узнать что-то новое, а кто-то возможно поделится со мной чем-то новым для меня, либо укажет на мои ошибки. Мне бы хотелось, чтобы это было так. Своими материалами я не только делюсь с вами знаниями, но и сам узнаю что-то новое в том числе и из комментариев и писем на почту.

Указываем сетевые параметры

Итак, у нас в наличии только что установленная система. Узнать или проверить ее версию можно командами:

Очень подробно про настройку сети в Debian я написал в отдельной статье. Рекомендую с ней ознакомиться. Здесь же кратко выполним основное. Для настройки сети, необходимо отредактировать файл /etc/network/interfaces. Сделаем это:

Для получения IP адреса по dhcp достаточно будет следующего содержания:

Если у вас статический адрес, то его настроить можно следующими параметрами в файле:

Сохраняем файл. Теперь нужно выполнить перезапуск сети. В Debian это делается командой:

В системном логе /var/log/syslog при этом будут записи:

Будьте аккуратны при настройке и перезапуске сети, если подключаетесь к серверу удаленно. Обязательно должен быть доступ к консоли на случай, если где-то ошибетесь и потеряете доступ к серверу.

К сетевым настройкам я отношу установку пакета net-tools, в состав которого входят старые и привычные утилиты для работы с сетью - ifconfig, netstat, route и другие. В современных дистрибутивах их заменили одной командой ip, но лично мне вывод некоторых старых команд, конкретно, netstat, нравится больше, поэтому я иногда ими тоже пользуюсь.

На этом настройка сети закончена.

Обновление системы, отличие apt upgrade от dist-upgrade и full-upgrade

Сеть настроили, теперь можно обновить систему и пакеты. В Debian это делается достаточно просто. Воспользуемся несколькими командами. Сначала обновим локальный индекс пакетов до последних изменений в репозиториях:

Обновление debian

Посмотреть список пакетов, готовых к обновлению, можно с помощью команды:

Теперь выполним простое обновление всех пакетов системы:

apt upgrade

Ключ upgrade выполняет только обновление одной версии пакета на другую, более свежую. Он не будет устанавливать или удалять пакеты, даже если это необходимо для обновления других. Это наиболее безопасный и надежный вариант обновления, но он может обновить не все. Например, с ее помощью не обновить ядро до более свежей версии.

Ключ dist-upgrade или full-upgrade (это одно и то же) в дополнение к upgrade обрабатывает все изменения зависимостей для новых пакетов и во время работы может удалять ненужные и ставить необходимые пакеты для обновления. Вот выдержка из документации по поводу этих двух ключей.

Отличие apt upgrade от apt dist-upgrade и full-upgrade

Так что после обычного обновления, делаем еще full-upgrade.

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

Рекомендую делать это регулярно после обновлений, чтобы старые пакеты не занимали лишнее место на диске.

На этом обновление системы закончено. Если вы хотите обновить версию релиза, например Debian 9 обновить до Debian 10 Buster, то читайте отдельный материал.

Настройка ssh

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

Существует расхожее мнение, что менять порт ssh это наивность, а не защита. Надо просто настроить сертификаты, fail2ban или еще каким-то образом защитить ssh порт, к примеру, с помощью ограничений iptables, и т.д. Тем не менее, я все же рекомендую порт сменить на нестандартный. Даже если у вас все защищено от подбора паролей, так как вы используете сертификаты, лишние запросы к ssh порту тратят ресурсы сервера, хоть и не очень большие. Идет установка соединения, обмен рукопожатиями и т.д. Зачем вам это нужно?

По-умолчанию в Debian, впрочем как и в любом другом дистрибутиве Linux, ssh сервер работает на 22 порту. Изменим этот порт, к примеру, на 23331. Так же я еще изменяю конфигурацию для разрешения подключения по ssh пользователя root с использованием пароля. В Debian из коробки пользователь root по ssh паролем авторизовываться не может. Изменим и это. Открываем файл настроек:

И изменяем там следующие строки. Приводим их к виду:

Сохраняем изменения и перезапускаем сервер ssh следующей командой:

Все в порядке, сервер слушает 23331 порт. Теперь новое подключение будет осуществлено только по порту 23331. При этом, после перезапуска ssh, старое подключение не будет разорвано.

Я знаю, что многие возражают против подключения рутом к серверу. Якобы это небезопасно и т.д. и т.п. Мне эти доводы кажутся не убедительными. Не понимаю, в чем может быть проблема, если у меня нормальный сложный пароль на root, который не получится подобрать или сбрутить. Ни разу за всю мою работу системным администратором у меня не возникло проблем с этим моментом. А вот работать так значительно удобнее, особенно, когда необходимо оперативно куда-то подключиться по форс мажорным обстоятельствам.

Отдельно тему подключения к серверу под root я рассмотрел в статье про sudo. Кому интересно, переходите в нее и делитесь своим мнением на этот счет.

Установка утилит mc, htop, iftop

Следующим шагом я настраиваю некоторые полезные утилиты, которыми регулярно пользуюсь в повседневной работе. Первая из них это всем известный двухпанельный файловый менеджер Midnight Commander. Установим mc на наш сервер:

И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax синтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл unknown.syntax. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса.

Я сразу же ставлю редактором по-умолчанию mcedit. Для этого просто выбираю его из меню при первом редактировании какого-нибудь файла. Если у вас такое меню не появляется, можете вызвать его сами и выбрать необходимый редактор по-умолчанию:

Так же я рекомендую очень удобный диспетчер задач - htop. Мне он помог, к примеру, решить проблему Взлома сервера CentOS. Ставим его на сервер:

Полезной утилитой, позволяющей смотреть сетевую загрузку в режиме реального времени, является iftop. Очень рекомендую. Более простого и удобного инструмента мне не попадалось, хотя я много перепробовал подобных вещей. Устанавливаем iftop на сервер:

debian iftop

Настройка и обновление времени в Debian

Теперь проверим установленный часовой пояс, время и включим автоматическую синхронизацию времени с удаленного сервера. Очень подробно этот вопрос я рассмотрел в отдельной статье - настройка времени в Debian.

Узнать дату, время, часовой пояс можно командой date:

Если все указано верно, то менять ничего не нужно. Если же у вас неправильное время или указан часовой пояс не соответствующий вашему, то настроить это можно следующим образом. Сначала обновим часовые пояса:

Теперь выберем правильный часовой пояс с помощью команды:

Выбирая соответствующие пункты визарда, указываете свой часовой пояс.

Дальше синхронизируем время с сервером времени в интернете. Для разовой или ручной синхронизации понадобится отдельная утилита. Установим ntpdate на сервер:

И синхронизируем время:

Если получаете ошибку:

Значит у вас уже работает служба ntp. Ее нужно остановить и обновить время вручную. Хотя если она работает, то у вас и так должно быть все в порядке.

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

После установки он сам запустится и будет автоматически синхронизировать часы сервера. Проверим, запустился ли сервис ntpd:

Настройка firewall (iptables) в Debian

В качестве firewall в Debian по-умолчанию используется iptables, его и будем настраивать. Изначально фаервол полностью открыт и пропускает весь трафик. Проверить список правил iptables можно следующей командой:

Обращаю пристальное внимание на то, что настраивать firewall без прямого доступа к консоли сервера не следует. Особенно, если вы не очень разбираетесь в этом и копируете команды с сайта. Шанс ошибиться очень высок. Вы просто потеряете удаленный доступ к серверу.

Создадим файл с правилами iptables:

Очень подробно вопрос настройки iptables я рассмотрел отдельно, рекомендую ознакомиться. Хотя в примере другая ОС linux, принципиальной разницы нет, настройки iptables абсолютно одинаковые, так как правила одни и те же.

Добавляем набор простых правил для базовой настройки. Все необходимое вы потом сможете сами открыть или закрыть по аналогии с существующими правилами:

Даем файлу права на запуск:

Настройка iptables в debian

Проверяем, что правила записались в файл /etc/iptables_rules. Если их там нет, то записываем их вручную.

Правила применились и произошла их запись в файл /etc/iptables_rules. Теперь нужно сделать так, чтобы они применялись при загрузке сервера. Для этого делаем следующее. Открываем файл /etc/network/interfaces и добавляем в него строку pre-up iptables-restore < /etc/iptables_rules Должно получиться вот так:

Для проверки перезагрузите сервер и посмотрите правила iptables. Должен загрузиться настроенный набор правил из файла /etc/iptables_rules.

Настройка логов cron

По-умолчанию, в Debian нет отдельного лог файла для событий cron, они все сыпятся в общий лог /var/log/syslog. Лично мне это не очень нравится, я предпочитаю выводить эти события в отдельный файл. Об этом я написал отдельно - вывести логи cron в отдельный файл. Рекомендую пройти по ссылке и настроить, если вам это необходимо. Там очень кратко и только по делу, не буду сюда копировать эту информацию.

Установка и настройка screen

Я привык в своей работе пользоваться консольной утилитой screen. Изначально она задумывалась как инструмент, который позволяет запустить что-то удаленно в консоли, отключиться от сервера и при этом все, что выполняется в консоли продолжит свою работу. Вы сможете спокойно вернуться в ту же сессию и продолжить работу.

Первое время я именно так и использовал эту утилиту. Редко ее запускал, если не забывал, когда выполнялся какой-то длительный процесс, который жалко было прервать из-за случайного обрыва связи или необходимости отключить ноутбук от сети и куда-то переместиться.

Позже я решил подробнее ознакомиться с этим инструментом и обнаружил, что там есть несколько удобных моментов, которые можно использовать в ежедневной работе. Вот как использую утилиту screen я. При подключении к серверу у меня запускается screen с тремя окнами 1, 2, 3. Первое окно автоматически переходит в каталог /, второе в /etc, третье в /var/log. Я осмысленно назвал эти окна: Main, etc, logs соответственно. Внизу находится строка состояния, в которой отображен список всех открытых окон и подсвечено активное окно.

С помощью горячих клавиш я очень быстро переключаюсь между окнами в случае необходимости. Вот как выглядит мое рабочее окно ssh подключения:

настройка screen в debian

Переключаюсь между окнами с помощью стандартных горячих клавиш screen: ctrl+a 1, ctrl+a 2, ctrl+a 3. Я специально изменил нумерацию, чтобы она начиналась не с 0 по-дефолту, а с 1. Так удобнее на клавиатуре переключать окна. Кнопка 0 находится слишком далеко от 1 и 2.

Чтобы настроить такую же работу screen, как у меня, достаточно выполнить несколько простых действий. Сначала устанавливаем screen:

Создаем в каталоге /root конфигурационный файл .screenrc следующего содержания:

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Теперь можно перезагрузить сервер и проверить, все ли в порядке. У меня все в порядке, проверил :) На этом базовая настройка сервера debian окончена. Можно приступать к конфигурации различных сервисов, под которые он настраивался. Об этом я рассказываю в отдельных статьях.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Debian.

Самой распространенной операцией при работе с межсетевым экраном, по моему мнению, является операция закрытия и открытия портов на сетевом интерфейсе. Порт открывается для того чтобы к нему можно было получить доступ из вне. Закрывают же порт чтобы запретить устанавливать соединение с программой на вашем устройстве, работающей по этому порту. В этой статье мы рассмотрим как открыть порт iptables на примере Debian Linux.

Порт - это, грубо говоря, номер квартиры в многоквартирном доме, за которым проживают известные (или не очень) жильцы. IP адрес - это номер многоквартирного дома, в котором множество квартир. Жилец - это программа, использующая данный номер порта. Этот пример работает в том случае, когда целью является открытие и закрытие доступа программам на том же самом компьютере, который подключен к сети Интернет.

Как открыть порт с помощью iptables

В iptables для создания нового правила или блока правил используется команда:

sudo iptables [ -t таблица ] -A [ цепочка ] спецификации_правила

sudo iptables -t filter -A INPUT -p tcp -s 8.8.8.8 --sport 53 -d 192.168.1.1 -j ACCEPT

Рассмотрим подробно случай открытия порта с помощью iptables. Следует заметить, что понятие порт используется в протоколах tcp и udp, поэтому для разных протоколов доступны одинаковые номера портов, но при этом эти номера, говоря на языке нашего примера, означают разные квартиры в разных домах в разных микрорайонах, где за микрорайон можно принять наименование протокола.

Примечание: Существуют таблицы общепринятых номеров портов для распространённых программ и типов программ по функциональному назначению. Остальные порты являются свободно используемыми. Рассмотрение таблиц портов выходит за рамки данной статьи. Вернемся к простой задаче закрыть один порт.

Примечание: Если вы собираетесь открыть порт, убедитесь, что политика iptables по умолчанию блокировать всё соединения к портам (DROP). Если же используется политика по умолчанию ACCEPT, то ничего открывать не надо, все порты уже открыты, а вам нужно только закрыть те, которые должны быть недоступны из вне. Подробнее в статье как пользоваться iptables.

1. Один порт

Чтобы открыть порт iptables debian используется следующая команда:

sudo iptables [ -t таблица ] -A [ цепочка ] -p протокол [ --sport порт_отправителя ] [ --dport порт_назначения ] -j [ действие ]

sudo iptables -t filter -A INPUT -p tcp --dport 8081 -j ACCEPT


В данном случае мы открыли в таблице filter в цепочке INPUT протокола tcp порт назначения 8081 с помощью действия ACCEPT (принять). Таким образом для всех внешних машин, пытающихся установить соединение по данному порту, данный порт будет теперь доступен. Если мы хотим открыть порт для конкретной машины следует использовать следующую команду:

sudo iptables -t filter -A INPUT -p tcp -s 10.0.0.1/32 --dport 8080 -j ACCEPT

Мы открыли порт 8080 на нашем компьютере для внешней машины с адресом 10.0.0.1.

2. Диапазон портов

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

sudo iptables [ -t таблица ] -A [ цепочка ] -p протокол [ --sport начальный_порт_отправителя:конечный_порт_отправителя ] [ --dport начальный_порт_назначения:конечный_порт_назначения ] -j [ действие ]

sudo iptables -t filter -A INPUT -p tcp --dport 18070:18081 -j ACCEPT

Данной командой мы открыли порты 18070-18081 для входящих пакетов, адресованных именно этому компьютеру, передаваемых по протоколу TCP.


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

Так вот, входящие пакеты будут создавать входящие соединения по определенным правилам для конкретных программ, и исходящие пакеты будут создавать исходящие соединения по определенным правилам для конкретных программ. При этом для каждой программы, нуждающейся в установлении связи с через сеть, чаще всего будут функционировать два соединения: входящее и исходящее, так как программе одновременно требуется в течении работы получать и отправлять данные.

Правила для входящих соединений будут в большинстве случаев расположены в цепочках PREROUTING, INPUT. Правила для исходящих соединений будут в большинстве случаев расположены в цепочках POSTROUTING, OUTPUT.

Чтобы разрешить порт iptables для входящего соединения:

sudo iptables -t filter -A INPUT -p tcp --dport 8080 -j ACCEPT

Пример для исходящего соединения:

sudo iptables -t filter -A OUTPUT -p tcp --dport 8080 -j ACCEPT

Примечание: В данном случае правила выглядят очень похоже, но смысловое значение у них будет абсолютно противоположное. В первом случае мы имеем дело с пакетом ВХОДЯЩИМ, который должен поступить на порт назначения 8080 НАШЕГО компьютера. Во втором случае мы имеем дело с пакетом ИСХОДЯЩИМ, который должен поступить на порт назначения 8080 УДАЛЕННОГО компьютера. Следует также заметить, что программа не использует на нашем компьютере и удаленном компьютере одинаковый номер порта для одной программы. Порты будут различаться.


4. Состояние соединения

Существует возможность формировать правила фильтрации пакетов по совпадению с определенными шаблонами дополнительной спецификации правил Netfilter. За это отвечают параметры -m и -j. Мы рассмотрим использование параметра -m, который может использовать множество различных шаблонов, из которых мы рассмотрим один: --state состояние. Этот шаблон может принимать следующие значения:

  • NEW — пакет открыл новое соединение или иным образом связан с соединением, в рамках которого ещё не было пакетов в обоих направлениях (входящем и исходящем);
  • ESTABLISHED — пакет связан с соединением, которое видело пакеты в обоих направлениях;
  • RELATED — пакет открывает новое соединение, но связан с уже существующим соединением, например, передача данных FTP или ошибка протокола ICMP;
  • INVALID — пакет, связанный с неизвестным соединением.

Открытие портов iptables для новых соединений:

sudo iptables -t filter -A INPUT -p tcp -s 192.168.1.0/24 --dport 445 -m state --state NEW -j DROP

В этом примере в таблицу filter в цепочку INPUT для протокола tcp, от компьютера из подсети 192.168.1.0/24, на порт назначения 445 (так как цепочка входящая, то порт назначения находится на данном компьютере) для пакетов, открывающих новое соединение, применить действие ACCEPT (принять пакет).

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

sudo iptables -t filter -A INPUT -p tcp -s 192.168.2.0/24 --dport 445 -m state --state ESTABLISHED -j ACCEPT

В данном случае в таблицу filter в цепочку INPUT для протокола tcp, от компьютера из подсети 192.168.2.0/24, на порт назначения 445 (так как цепочка входящая, то порт назначения находится на данном компьютере) для пакетов, поступающих в рамках уже открытого соединения, применить действие ACCEPT (принять пакет).


Как закрыть порт iptables

Если вы открыли порт с помощью описанных выше правил и политика брандмауэра по умолчанию DROP, то достаточно это правило удалить. Если же у вас стоит политика по умолчанию ACCEPT, то чтобы закрыть порт надо использовать действие DROP.

sudo iptables -t filter -A INPUT -p tcp -s 192.168.3.0/24 --dport 445 -m state --state ESTABLISHED -j DROP

Эта команда в таблицу filter в цепочку INPUT запишет правило для протокола TCP, от компьютера из подсети 192.168.3.0/24, на порт назначения 445 (так как цепочка входящая, то порт назначения находится на данном компьютере) для пакетов, поступающих в рамках уже открытого соединения, применять действие DROP (отбросить пакет).


Для правил, запрещающих прием пакета, применимо всё сказанное выше для закрытия порта (одиночный порт, диапазон портов, входящие и исходящие соединения, действия для установленных соединений и новых соединений). Про закрытие портов в iptables читайте более подробно в отдельной статье.

Проверка открыт ли порт

Когда мы настроили все правила, закрывающие и открывающие порты, нам необходимо проверить корректность примененных настроек. Для этого можно использовать приложение telnet. Telnet - приложение, позволяющее установить двунаправленное соединение между двумя компьютерами с помощью протокола telnet. В рамках нашей задачи попытка установления соединения между двумя машинами в сети используется как тест правил Netfilter. Выполняем команду следующего вида:

$ telnet ip-адрес порт

telnet 192.168.1.5 443

Connection closed by foreign host.

Или неожиданно можем получить приглашение доступа к данной машине, если на этом порте ожидает подключения серверная часть telnet.

telnet: Unable to connect to remote host: Connection timed out


Примечание: Чтобы получить результаты необходимо подождать довольно продолжительное время, чтобы telnet получил результат попытки соединения по указанному порту.

Выводы

Итак, сегодня мы рассмотрели как открыть порт 80 iptables или любой другой на локальной машине. Теперь мы знаем, как открыть (или закрыть) конкретный порт, диапазон портов, в чем разница между входящими и исходящими соединениями, как работать с новыми и уже установленными соединениями.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Настройка осуществляется на:

Создаём файл настроек для IPTABLES:

Разрешаем его запуск:

В него добавляем:

Теперь разберём созданные правила подробнее.

В IPTABLES используется три вида таблиц:

Соответственно, нас интересует третья таблица Filter. В этой таблицы имеются три встроенные цепочки:

Пакет, проходящий через эти цепочки, исходя из правила может быть пропущен (ACCEPT) или отброшен (DROP):

$IPTABLES -P INPUT DROP

Пакеты, проходящие фильтр OUTPUT соответственно будут пропущены:

$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -A INPUT -i lo -j ACCEPT

В следующем правиле для фильтра входящих соединений INPUT мы указываем:

Добавим ещё несколько правил:

Перезапустим скрипт, что бы правила вступили в силу, заодно проверим ошибки:

Пропущен пробел после tcp .

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Ещё несколько примеров использования.

Проверить статус IPTABLES:

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 180K packets, 12M bytes)
pkts bytes target prot opt in out source destination

-L : показать список правил;
-v : выводить дополнительную информацию;
-n : отображать ip адрес и порт числами, а не перобразовывать в FQDN-имя.

Вывести текущие правила, только INPUT:

Или только OUTPUT:

Добавление и удаление правил.

Вывести текущие правила INPUT с указанием строк (номеров правил):

Что бы добавить правило перед 5:

Заблокировать входящие соединения для IP 8.8.8.8 :

Посмотрим в правилах:

Разрешить SSH с адресов начиная от 10.0.0.5 и до 10.0.0.10 включительно:

Ограничить количество параллельных соединений к серверу для одного адреса

Для ограничений используется connlimit модуль. Чтобы разрешить только 3 SSH соединения на одного клиента:

С помощью утилиты iptables мы можем: ограничить все входящие соединения на свой компьютер или сервер; создать белый список IP адресов, с которых можно подключиться или наоборот заблокировать конкретный IP; а также открывать и закрывать порты и многое другое. В этой статье мы разберем только основные настройки iptables. Не будем погружаться в подробности и делать обзор всех возможностей утилиты, а лишь разберем те, которые требуются чаще всего.

Если вы хотите разобраться с утилитой более подробно, тогда стоит открыть статью в wikibooks и хорошенько запастись энтузиазмом и терпением, а в этой статье будут следующие, довольно простые, но в тоже время важные темы (кликабельно):

Перед тем, как начинать настраивать фаервол, необходимо авторизоваться под root. Если вы уже авторизованы под обычным пользователем в группе sudo , то перейти в root можно простой командой:

Если ввести команду с sudo не предоставляется возможности, тогда нужно ввести просто su , но для этого потребуется ввести пароль от root.

Установка iptables

Для начала убедимся, что утилита iptables установлена. Для этого введем команду iptables -h и если вывод будет command not found , значит утилиту требуется установить.

Установка iptables очень простая, для этого достаточно ввести:

Вместо apt может быть ваш вариант, который зависит от вашего дистрибутива и что там стоит по-умолчанию. Дожидаемся конца установки.

Основные настройки iptables для десктопа

Чтобы защитить наш десктоп огненной стеной и не бояться, что к нам подключатся извне посторонние, технически подкованные персоны, следует прописать базовые правила в фаервол. Это не даст 100% гарантии безопасности вашего ПК (что в принципе невозможно), но существенно усложнит жизнь незваным гостям, которые скорее всего выберут цель полегче.

И так, если вы уже авторизованы под root в вашем домашней ОС и готовы забаррикадироваться от недоброжелателей, то стоит начать с правил по-умолчанию. Они будут срабатывать, если для соединения не нашлось других правил.

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

Просмотр правил iptables

После того, как мы внесли новые правила в iptables, необходимо их проверить и убедиться, что мы все сделали правильно. Для этого достаточно ввести простую команду, которая отобразит все установленные правила:

Если вы вводили команды из прошлого раздела, то у вас должен быть примерно такой вывод:

Как открыть порт в iptables

Чтобы разрешить подключаться к нашей ОС по SSH, нам потребуется разрешить подключение через порт 22, прописав правило в iptables:

Далее проверим все наши правила с помощью команды iptables -L

Как мы видим, появилось новое правило для ssh по стандартному порту 22. Теперь он открыт и можно подключаться, так как теперь блокируются все входящие соединения, кроме соединений по этому порту. О том, как подключаться к серверу по SSH, вы можете почитать здесь.

Как заблокировать IP адрес в iptables

Вместо используемого адреса в примере может быть любой, как внутренний, так и внешний. Проверим правила с помощью iptables -L

Как сохранить правила iptables

Одной из особенностей утилиты iptables является то, что прописанные правила полностью сбрасываются после перезагрузки системы. Самый простым способом сохранить настройки iptables будет поставить утилиту iptables-persistent . В debian и ubuntu это делается так, если вы по прежнему авторизованы под root:

Во время установки будет вопрос, сохранить ли текущие настройки iptables, пока выберем не сохранять, то есть No , потому что для начала нужно сохранить их в отдельный текстовый файл. В противном случае iptables-persistent ничего не сохранит.

После установки сохраним текущие настройки iptables в отдельный файл, который будет располагаться в папке утилиты:

А затем перезапустим службу iptables-persistent

То попробуйте перезапустить службу с другим названием:

В debian и ubuntu должен работать второй вариант.

Все, теперь можно смело перезагружать компьютер или сервер, все настройки iptables при это сохранятся.

Как откатить сохраненные правила iptables

Если вы ввели несколько правил по ошибке и хотите откатиться к тому набору правил, которые мы сохранили в файл в предыдущем разделе с помощью команды iptables-save , то для их восстановления достаточно ввести команду iptables-restore и указать пусть к этому файлу с сохраненными настройками:

Как удалить правило в iptables

Чтобы удалить одно конкретное правило из iptables, для начала нужно выяснить его номер и цепочку. Для этого нужно получить список всех правил с опцией --line-numbers :

Если вы вводили команды из прошлых разделов, то у вас должен быть примерно такой вывод:

В данном примере мы будем удалять правило под номером 1, который запрещает все входящие соединения с IP адреса 192.168.122.122 :

Уникальный номер правила мы знаем, теперь смотрим название его цепочки:

Теперь выведем весь список и проверим удалилось ли правило:

Как мы видим, правило успешно удалилось.

Как сбросить все правила iptables

Если необходимо сбросить все правила сразу, то нужно ввести следующие команды:

Теперь выведем список правил и проверим сбросились ли они:

Основные настройки iptables для веб-сервера

Для начала следует очистить правила, которые выставляет хостер по-умолчанию, потому что при определенных обстоятельствах прописанные ниже правила могут конфликтовать с теми, что уже есть.

Затем выставим настройки по-умолчанию, запретив все входящие соединения. А потом будем уже настраивать исключения из этих правил.

Теперь разрешим внутренние соединения с 127.0.0.1 (localhost), а также установленные соединения для приложений и пинга.

Добавим несколько дополнительных фильтров:

Далее откроем порт 22, чтобы была возможность подключаться к серверу по SSH:

Открываем порты для базовых сервисов веб-сервера:

Если дополнительно планируется настраивать на сервере почту, то следует открыть порты и для этих служб:

Затем проверим все настройки командой iptables -L

И наконец стоит сохранить наши правила, чтобы они не испарились после перезагрузки сервера. Как это сделать, уже рассказано в разделе выше.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: