Разговоры о iptables. video1.

В этом видео я рассказываю:
– что такое iptables;
– как происходит передача данных через Интернет;
– как можно фильтровать трафик по протоколам (на основе портов);
– несколько примеров фильтрации трафика.

Я уже немного рассказывал о данной утилите в своих предыдущих видео о повышении безопасноти Linux серверов.
В комментариях подписчик SsergeySav написал, что про iptables мало было сказано у меня на канале.

SsergeySav
Доброго времени! 5 советов – хорошо, а вот по iptables у вас я ничего больше не нашёл. Нет или я плохо искал??? Слепил сервер с приличным функционалом, а с iptables пшик получается. Есть полнейшее…

Надо исправляться!

Что такое iptables?

Из википедии:
IPTables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux, начиная с версии 2.4. Для использования утилиты IPTables требуются привилегии суперпользователя (root).

Расскажу немного о том как работает Интернет и передача данных, в небольшом приближении.
В своей практике я много раз встречал людей которые занимаются администрированием серверов или каких-либо баз данных, не говоря уже о программистах, которые мало понимают даже базовые-основные понятия передачи данных. Понимать основы передачи данных было правильно, особенно если берёшься настраивать iptables.
Я не ругаю админов или программистов – я мало понимаю в базах данных и плохо программирую…

Итак.
Для того чтобы понять что нужно блокировать или что пропускать на своём firewall нужно выяснить какие протоколы используются для передачи данных от вас к серверу и наоборот.
Например, Вы хотите зайти на мой сайт – вводите в браузере www.it-inside.org и Вам открывается мой сайт.
Что происходит для того чтобы данные с сайта по вашему запросу были переданы на ваш компьютер?

Браузер передаёт запрос на сервер по протоколу http, но сам браузер не отвечает за передачу данных через интернет на другие устройства – основная задача браузе отобразить принятый с сервера контент. Чтобы получить данные с сервера – имя которого вы ввели в адресной строке (возможно вы ввели не просто адрес It-inside.org, но и указали какую-либо страницу) браузер упаковывает свой запрос скажем для простоты в контейнер и обращается к службе доставки указывая только адрес куда нужно доставить запрос – адрес It-inside.org . Я опущу момент с преобразованием имени сайта в ip адрес, но отмечу, что данные в конечном итоге от вашего компьютера через маршрутизаторы до сервера пойду уже с указанием Ip-адреса, а не имени вебсервера.
Что такое транспортная служба или служба доставки – в простейшем представлении это некая служба или протокол который отвечает за передачу данных от вашего компьютера до сервера и обратно. Данная служба разбивает передаваемое сообщение от браузера на небольшие фрагменты и передаёт уже непосредственно службам которые занимаются передачей данных через маршрутизаторы, коммутаторы и провода – эти службы называются – протоколы сетевого и канального уровней.
Для чего протоколы разбивают данные на части? Наглядным примером может служить передача какого-либо большого файла через Интернет- фильм, музыка и тп. Если файл передать целиком без разделения на части, то в конце может оказаться что не всё дошло правильно – например, во время передачи данных могли произойти потери или ошибки. Если для фильма или аудио файла потеря части может быть не особо критичной, то для программы -если вы скачали, например, какое-либо приложение, потеря части кода будет намного проблематичней, программа просто может перестать работать. Потеряв несколько пакетов, сервер может их переслать повторно и целостность данные будет восстановлена у вас на комрьютере. Потеряв часть данных при пересылке, например, целого фильма – придётся пересылать весь фильм повторно, что затратит больше времени и ресурсов чем пересылка только части утерянных пакетов. По этому передаваемые данные разбиваются на части и передаются последовательно. На транспортном уровне основными протоколами являются tcp и udp. Протокол TCP гарантирует доставку данных – если какой-то пакет потерялся при передачи, то он будет отправлен повторно и целостность данных сохраниться – у вас будет целый, не битый фильм или программа – примерами приложений могут быть – Браузеры(отображение контента), почта и тп.
Протокол UDP этим не занимается, он разбивает передаваемые данные на части и пересылает – это подходит для тех случаем если гарантированная доставка не требуется или просто не нужна – например, потоковые сервисы, телефония – если какое-то слово потерялось при разговоре, то пересылать его ещё раз нет смысла, всё что получено было воспроизведено и воспроизводить какое-либо потерянное слово нет смысла – разговор уже идёт и в другое придложение встраивать ничего не нужно. Примерами могут служить такие приложения как Skype (video и voice)
Я говорю подробнее о протоколах TCP и UDP по тому что их можно фильтровать с помощью iptables и другими firewall-ами. Обычно все службы и приложения имеют стандартные порты. Например, стандартный порт для веб.браузера это протокол tcp порт80 – порт это по сути присвоенный номер. Передаваеммым данным присваевается метка, что данные относятся к протоколу tcp и номер-порт данных 80. Когда система получает такие данные она понимает, что скорее всего такие данные предназначаются веб серверу или от веб сервера.
Например, протокол ssh использует протокол TCP для передачи данных и порт 22. Протоколу ssh важна гарантированная доставка данных, все команды должны быть доставлены правильно.

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

Теперь нужно немного расскахать о сетевом протоколе – Ip – он используется для доставки данных от вас к серверу и обратно. Протокол ip имеет Ip-address’a и используя их можно доставлять данные – они точно определяют ваш компьютер и веб сервер (я не говорю сейчас о NAT). Сетевая служба не занимается гарантированной доставкой, основная задача передать данные от источника к получателю. В процессе передачи данные могут быть потеряны, повторной пересылкой займётся протокол транспортного уровня.

Зная ip адреса можно фильтровать трафик по источникам – например, вы можете запретить доступ к вашему серверу для каких-то адресов или предоставить доступ только для определённых адресов – например, для адресов вашей компании или домашней сети.
Комбинируя ip адреса и протоколы, порты транспортного уровня можно подобрать приемлемую для вас комбинацию – доступности и безопасности.
Какой-бы сложный пароль у вас не стоял бы на ssh он не сравниться с полным запретом на доступ к данной службе – протокол tcp порт 22. Доступ можно предоставить только для известных вам адресов – например, адресов вашей компании или вашего домашнего подключения. Как минимум количество доступных вариантов подключения к вашему серверу будет сильно меньше.
Для веб сервера в тоже время можно предоставить полный доступ для всех. Протокол tcp порт 80.

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

Теперь от слов к практике (подробнее смотрите в видео).
Основные команды.
Посмотреть установленные правила:
iptables -L -v -n --line-numbers
iptables -S

Добавить правило в конец списка:
sudo iptables -A INPUT -s 0.0.0.0/0 -d 192.168.254.254/32 -j DROP
Добавить правило в определённую строку, на определённое место(например, 3):
sudo iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p icmp -j ACCEPT
Удалить правило с номером 10
sudo iptables -D INPUT 10
фильтрация http трафика на веб сервер:
sudo iptables -I INPUT 1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 80 -j DROP
sudo iptables -D INPUT 1

Блокирование ssh:
sudo iptables -I INPUT 1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 22 -j DROP
sudo iptables -I INPUT 1 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 22 -j DROP

Блокирование icmp:
sudo iptables -I INPUT -s 0.0.0.0/0 -d 0.0.0.0/0 -p icmp -j ACCEPT
sudo iptables -I INPUT -s 0.0.0.0/0 -d 0.0.0.0/0 -p icmp -j DROP

Важность порядка следования правил!
Если вы поставите правило запрещающее доступ всем на ваш сервер, например, по ssh выше правила разрещающего доступ по ssh с ip адресов вашего домашнего подключения или вашей фирты, то возможно вам придётся ехать в какой-то далёкий ДатаЦентр и менять настройки подключившись к консоли (если ваш сервер стоит в далёком ДЦ и просить подключить вас к ip-kvm или тп).

Заключение.
Для грамотной настройки фильтрации трафика необходимо знать какие-службы запущены у вас на сервере и какие протоколы, порты они используют. На боевых серверах тренироваться не стоит, а на своих стоит! Главное правило разрешающее удалённый доступ себе на сервер всегда оставляйте на первом месте.

На сегодня всё, спасибо за внимание, надеюсь вам понравилось.
Мне важен ваш отклик – пишите свои мысли в комментариях к видео, подписывайтсь на канал, вступайте в мою группу в Вконтакте, ставьте большие пальцы вверх!
Удачи!