[в закладки] шпаргалка системного администратора по сетевым инструментам linux

IPSet

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

sudo iptables -A INPUT -m set --match-set !RU src -j DROP

Это правило заблокирует все входящие соединения, кроме адресов из списка ipset RU.

IPSet, как видите, удобный инструмент, который значительно сокращает таблицу правил iptables. В частности, хорошо бывает объединять в отдельные списки сети серверов, адреса админов, остальных пользователей и так далее. А потом уже разом запрещать доступ одним и разрешать другим.

Типы правил

Существует три типа сетевых пакетов: входящие (отправленные на этот компьютер), исходящие (отправленные в сеть из этого компьютера) и проходящие (пересылаемые дальше). Фильтр iptables также делит пакеты на три цепочки, input, forward и output.

  • Input. Обрабатываются входящие соединения и сетевые пакеты. Цепочка задействуется при попытке подключения к пользовательскому компьютеру по SSH или отправке сайтом контента через браузер.
  • Output.
    Обрабатываются исходящие пакеты и соединения. Если выполнить пинг любого ресурса или зайти на любой сайт в браузере, iptables разрешит действие или запретит соединение, исходя из записанной цепочки правил.
  • Forward. Обрабатываются проходящие соединения. Сетевые пакеты, которые проходят через компьютер и предназначены другому адресату, попадают в эту цепочку. Встречается, если использовать компьютер как маршрутизатор или при раздаче Wi-Fi.

Не забывайте, что пинг внешних хостов требует не только отправки пакетов (input), но и получения ответа (input)

Двусторонняя коммуникация — важное условие работы многих протоколов. Поэтому настройка iptables должна учитывать возможность полноценной работы с сервером по SSH

Зачастую forward оказывается невостребованным.

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

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

  • ACCEPT. Разрешить прохождение сетевого пакета дальше по цепочке правил;
  • DROP. Удалить пакет;
  • REJECT. Отклонить сетевой пакет, уведомив об этом отправителя;
  • LOG. Запись о сетевом пакете в лог;
  • QUEUE. Отправить сетевой пакет пользовательскому приложению.

Автоматизация после сбоев/перезагрузок

Чтобы не потерять все настроенные нами параметры, добавим в crontab периодическое сохранение правил IPSet и iptables.

sudo crontab -e
 
# Каждую первую минуту каждого часа, то есть раз в час
1 * * * * /bin/bash root ipset save > /opt/ipset.rules
1 * * * * iptables-save root > /opt/firewall.rules

И в /etc/rc.local добавим восстановление:

ipset restore < /opt/routers/ipset.rules
iptables-restore < /opt/routers/iptables.rules

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

Напоследок напишем скрипт, который позволит нам более удобно добавлять IP-адреса в списки IPSet, чтобы каждый раз не ломиться в консоль. Этот скрипт выглядит так:

#!/bin/bash
 
test=$(zenity --entry --title="Добавление адреса в ipset списки " --text="Введите адрес ip или домена")
initip=$(dig +short "$test" -u 1.1.1.1)
 
if ; then
zenity --password --title="Введите пароль администратора" | sudo -S ipset -exist -A vpn "$test"
echo "$test" >> /opt/iptovpn.txt
else
zenity --password --title="Введите пароль администратора" | sudo -S ipset -exist -A vpn "$initip"
echo "$initip" >> /opt/iptovpn.txt
fi
 
sudo ipset save > /opt/ipset.rules

При запуске мы вводим имя домена или сразу IP-адрес. Скрипт переварит и то и другое, после чего и запихает IP в список IPSet.

Также в архиве вы найдете скрипт add_in_file, который читает файл со списком доменов, получает IP и складывает в списки IPSet.

Как определиться с назначением файрвола

Перед тем, как заниматься настройкой утилиты, потребуется разобраться с ее предназначением, а именно – действующими цепочками правил, то есть то, что она будет делать по умолчанию. Как отреагировать, когда запрашиваемые соединения не подходят ни к одному правилу?

Для начала потребуется понять, какие из настроек межсетевого экрана уже установлены. Для этого применяется команда –L:


Скриншот №1. Настройки межсетевого экрана

Для четкого и понятного вывода информации можно воспользоваться дополнительной командой «grep». В итоге мы получаем тройку цепочек, у каждой из которых стоит разрешение приема трафика. Подобные правила предпочитают устанавливать при стандартной настройке.

Если в процессе эксплуатации Iptables конфигурация была кем-то изменена, значения могут стоять другие. Проверить это можно за пару секунд, достаточно ввести команды:

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

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

Шифрование трафика в Linux

Что нам понадобится, чтобы все работало, и желательно — комфортно? Само собой, iptables, куда же без него. Еще iproute2, он и позволит нам насоздавать кучу таблиц. IPSet потребуется для того, чтобы не городить огород из множества правил iptables.

Что есть что

  • iptables — утилита командной строки. Базовое средство управления работой файрвола для ядер Linux.
  • iproute2 — набор утилит для управления параметрами сетевых устройств в ядре Linux.
  • IPSet — инструмент для работы со списками IP-адресов и сетевых портов в сетевом фильтре. Формирует список в специальном формате для передачи файрволу.
  • stunnel — инструмент организации шифрованных соединений для клиентов или серверов, которые не поддерживают TLS или SSL. Stunnel перехватывает незашифрованные данные, которые должны были отправиться в сеть, и шифрует их. Программа работает как в Unix-системах, так и в Windows. В качестве шифрования использует OpenSSL для реализации базового протокола TLS и SSL.
  • OpenVPN — VPN-сервер с поддержкой шифрования библиотекой OpenSSL. Клиентские части доступны практически на всех платформах. Умеет работать через прокси типа Socks, HTTP, через NAT и сетевые фильтры.

Про все эти утилиты можно отыскать много информации в интернете, причем с примерами настроек в самых разных вариантах. Мы станем использовать iptables для маркировки пакетов. У нас будут два варианта настройки. Первый — когда машина, на которой выполняется обход, сама подключена к VPN. Второй вариант — когда в сети находится узел (виртуалка, Raspberry Pi или любой другой хост с Linux), играющий роль маршрутизатора. Далее мы разберем эти варианты чуть подробнее.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: