В предыдущей статье мы рассмотрели принцип работы брандмауэра и изучили основные параметры. Теперь давайте попрактикуемся… Ниже приведен перечень заданий, который мы выполним в ходе нашего обучения. Также хочу отметить, что мы немного будем отходить от сути задания, чтобы вы лучше поняли суть.
Задание 1. Разрешить все исходящие соединения по всем интерфейсам.
Чтобы вывести список интерфейсов можно воспользоваться командой ifconfig.
Так как команда ifconfig у меня не установлена, установлю её с помощью команд (у вас данная команда может быть уже установлена!) sudo apt-get update (лучше всегда указывайте эту команду при установке чего-либо, иначе какая-то программа не установится и вы не сможете больше установить что-то, это относится и к командам если что… поскольку процесс apt попадет в лист блокировки 😊). Далее введите команду sudo apt install net-tools.
Выполните команду ifconfig, вы увидите список интерфейсов, у меня их два: enp0s3 и lo. Наша задача разрешить доступ всем исходящим соединениям. Приступим к выполнению. Чтобы разрешить доступ всем входящим соединениям введите команду iptables –I OUTPUT –j ACCEPT, затем вывести список цепочек при помощи команды iptables –L, заметьте в таблице OUTPUT теперь разрешены все исходящие сообщения по всем интерфейсам как для источников, так и для получателей.
target – выполняемое действие с пакетом при соответствии его данному правилу, all – все, source– источник, destination – адрес назначения, anywhere – везде, prot– протокол передачи данных, при котором применяется данное правило, opt – дополнительные опции для правила.
Задание 2. Разрешить все ICMP-пакеты на всех интерфейсах.
Итак, для лучшего понимания поэкспериментируем с ping-запросом (это и есть ICMP-пакеты, если кто не знает…).
Чтобы разрешить ICMP-пакеты на всех интерфейсах введите команду iptables –A INPUT –p icmp –j ACCEPT.
Если же вы хотите запретить ping-запрос введите команду: iptables –A INPUT –p icmp –icmp-type echo-request –j DROP
Задание 3. Запретить передачу пакета с интерфейса на интерфейс
Напомню у меня два интерфейса enp0s3 и lo. Я могу запретить передачу с одного интерфейса на другой. У каждого интерфейса есть IP-адреса, их вы можете узнать с помощью команды ifconfig.
Чтобы проверить вступило ли правило в действие выполните ping <IP-адрес сетевого интерфейса> (напомню при помощи команды ifconfig вы узнали IP-адрес каждого интерфейса, выберете сетевой интерфейс, не lo, а другой к примеру, и выполните команду ping) вы должны столкнуться со следующим сообщением:
ping: Do you want ping broadcast? Then -b. If not, check your firewall rules
Как видим, наше правило работает! Просто чудеса какие-то!
А если мы поставим после ping ключ –b и IP-адрес интерфейса, все равно ничего не произойдет… Из-за правила брандмауэра, которое мы создали!
Задание 4. Разрешить все входящие соединения на кольцевом (loopback) интерфейсе
Чтобы разрешить входящий трафик на интерфейс обратной петли, выполните команду: sudo iptables –A INPUT –i lo –j ACCEPT.
Задание 5. Запретить все входящие соединения, кроме портов: 22/TCP(ssh), 25/TCP(smtp), 80/TCP(http), 110/TCP(pop3), 143/TCP (imap4), 443/TCP (https) на всех интерфейсах.
Сначала запретим все входящие соединения:
Как видим политика по умолчанию (policy) была изменена на DROP(запрет).
Теперь выполняем предложенное задание последовательно:
iptables –A –p tcp –dport 22 –j ACCEPT
iptables –A –p tcp –dport 25 –j ACCEPT
iptables –A –p tcp –dport 80 –j ACCEPT
iptables –A –p tcp –dport 110 –j ACCEPT
iptables –A –p tcp –dport 143 –j ACCEPT
iptables –A –p tcp –dport 443 –j ACCEPT
Проверим работу этого правила, откроем браузер, он должен работать
А тот же самый ping-запрос не должен работать в соответствии с политикой по умолчанию. Ping-запрос выполните с другого компьютера (можно как с физического, так и с виртуальной).
В качестве заключения, чтобы удалить ВСЕ правила брандмауэра, которые мы внесли введите две команды iptables –X, а затем iptables –F, таким образом правила удалятся.
Для удаления конкретного правила просто поставьте ключ –D вместо –A вот и всё. Например:
У нас было правило:
iptables -A INPUT -i lo -p icmp -j ACCEPT
Чтобы его удалить введите:
iptables -D INPUT -i lo -p icmp -j ACCEPT
Дополнительно также отмечу, чтобы посмотреть сколько пакетов прошло через наше правило, используйте команду iptables –L –v. Для примера я запретил передачу ICMP-пакетов, как видим счетчик равен нулю:
С другого компьютера я выполнил ping-запрос (смотрите на значения в pktsи bytes, они изменились) и как можно заметить значения у нас возросли, то есть наше правило действительно работает:
Спасибо за то, что прочитали статью до конца! Не забудьте подписаться, так вы помогаете продвижению канала. Если какой-то момент рассмотренный в статье вам остался не понятен, пишите комментарий, попробуем вместе разобраться. Хорошего дня!