25 полезных советов по iptables для администратора Linux
Одной из ключевых задач при обслуживании сети является управление трафиком — совокупность средств и методов, направленных на обеспечение функционирования сети и эффективное использование ресурсов. В этой статье мы представим Вам 25 советов по настройке межсетевого экрана с помощью iptables — утилиты командной строки, использующейся как фильтр. Через него ядро направляет все сетевые пакеты: входящие, исходящие и предназначенные компьютеру.
Описание утилиты iptables
Инструмент iptables делит все пакеты на три цепочки:
INPUT — для управления поведением входящих соединений;
FORWARD — для проходящих соединений;
OUTPUT — пакеты, сгенерированные локально.
Если Вы хотите использовать компьютер в качестве маршрутизатора — типы цепочек будут другими, поскольку в этом случае будет использоваться таблица NAT.
Таблица NAT (от англ. Network Address Translation) — это механизм преобразования сетевых адресов транзитных пакетов в сетях TCP / IP, который делит пакеты на следующие цепочки:
PREROUTING — изменяет пакеты перед маршрутизацией;
OUTPUT — изменяет пакеты после маршрутизации;
POSTROUTING — используется для изменения пакетов, перед отправкой.
Советы по настройке iptables для администратора Linux
Теперь давайте перейдем непосредственно к 25 советам по настройке iptables.
Важно: для использования утилиты Вам потребуются права суперпользователя (права root).
Запускаем / останавливаем / перезапускаем iptables
Чтобы начать использовать межсетевой экран — Вам нужно знать, как им управлять. Давайте разберемся в том, как его запустить, остановить или перезапустить. Если Вы используете дистрибутивы на базе SystemD (свежие версии Debian, Ubuntu, Arch Linux, RHEL, CentOS, Fedora, openSUSE и т.д.) — введите в командную строку следующие команды.
Для запуска утилиты:
systemctl start iptables
Для прекращения работы:
systemctl stop iptables
Для перезагрузки:
systemctl restart iptables
В случае использования систем Linux на основе SysVinit — для запуска инструмента введите в командную строку следующую команду:
/etc/init.d/iptables start
Для остановки:
/etc/init.d/iptables stop
Для перезагрузки:
/etc/init.d/iptables restart
Проверяем все правила брандмауэра
Таблицы iptables содержат наборы правил, называемых цепочками, которые будут фильтровать входящие и исходящие пакеты данных. Если Вы хотите проверить действующие правила — введите в командную строку следующую команду:
iptables -L -n -v
Эта команда должна вернуть следующий результат, если Вы ранее не настраивали межсетевой экран:
Если Вы хотите проверить правила таблицы NAT — используйте приведенную ниже команду:
iptables -t nat -L -v -n
Блокируем определенные IP-адреса с помощью iptables
Как системный администратор, Вы наверняка сталкивались с подозрительной активностью того или иного IP-адреса. Во избежание проблем Вы можете заблокировать IP с помощью этой утилиты. В качестве примера — заблокируем адрес 192.168.59.123 :
iptables -A INPUT -s 192.168.59.123 -j DROP
Советуем очень осторожно подходить к блокировке, поскольку в случае ошибки можно легко заблокировать собственный или совсем не тот IP-адрес. Опция -A добавляет новое правило в конец выбранной цепочки, тогда как опция -s — позволяет добавить нужный Вам IP-адрес.
Иногда Вам может потребоваться заблокировать не сам IP-адрес, а только TCP-трафик с него. Для этого модифицируйте предыдущую команду, добавив опцию -p , которая указывает на протокол (в нашем случаи — TCP). В результате команда будет выглядеть следующим образом:
iptables -A INPUT -p tcp -s 192.168.59.111 -j DROP
Разблокируем ранее заблокированные IP-адреса
Когда Вы выяснили, что действия со стороны определенного IP-адреса больше не представляют угрозы для сети — будет правильным разблокировать запросы от него. Для удаления ранее созданного правила блокировки воспользуйтесь данной командой:
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
Опция -D позволяет Вам удалить одно или несколько правил из выбранной цепочки. Вы также можете использовать опцию --delete , что является расширенной версией -D .
Блокируем определенный порт с помощью брандмауэра iptables
Номер порта — натуральное число, записываемое в заголовках протоколов транспортного уровня, которое используется для определения процесса-получателя пакета в пределах одного хоста. Порты распознаются Интернетом и другими сетевыми протоколами, что позволяет компьютеру устанавливать соединения. В случае необходимости Вы можете заблокировать входящие или исходящие соединения, проходящие через определенный порт. Такая блокировка является базовой мерой безопасности. И любой системный администратор в наше время должен знать, как ее выполнить.
Для блокировки исходящих соединений через конкретный порт — используйте следующую команду:
iptables -A OUTPUT -p tcp --dport xxx -j DROP
Вы также можете разрешить входящие соединения через выбранный порт. Для этого используйте следующую команду:
iptables -A INPUT -p tcp --dport xxx -j ACCEPT
Если Вам нужно разрешить или заблокировать трафик UDP вместо TCP — замените аргумент tcp на udp .
Разрешаем соединения с несколькими портами в iptables, используя multiport
Чтобы не настраивать доступ к нескольким портам по отдельности — рекомендуем Вам использовать модуль сопоставления пакетов multiport. Опция -m позволяет Вам использовать multiport, тогда как опция --dports — указывает номера портов назначения:
iptables -A INPUT -p tcp -m multiport --dports 27,80,555 -j ACCEPT
Аналогичным образом осуществляется настройка доступа для исходящих соединений:
iptables -A OUTPUT -p tcp -m multiport --sports 27,80,555 -j ACCEPT
Разрешаем доступ определенного диапазона сети к конкретному порту
Бывает, что для удовлетворения политики безопасности сети Вам потребуется ограничить подключения на конкретном порту для Вашей сети. Например, разрешить исходящие подключения через порт 22 к сети 192.168.100.0/24.
Для этого воспользуйтесь командой:
iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
Опция -d позволяет Вам указать нужный IP-адрес назначения.
Блокируем Facebook с помощью iptables
Для увеличения продуктивности персонала во время рабочего дня Ваш работодатель может потребовать заблокировать доступ к определенному сайту или приложению (например, к социальным сетям или посторонним мессенджерам). В качестве примера рассмотрим Facebook.
Важно: диапазон IP-адресов, используемый Facebook, может отличаться в зависимости от Вашего местоположения.
Во-первых, узнайте IP-адреса, используемые Facebook:
Далее вводим следующую команду:
whois 157.240.224.35 | grep CIDR
Затем — блокируем Facebook с помощью следующего правила:
iptables -A OUTPUT -p tcp -d 157.240.0.0/20 -j DROP
Настраиваем переадресацию портов в iptables
Переадресация портов — это часть механизма NAT, задачей которой является предоставление доступа из Интернета к сервисам Вашей сети. Как системный администратор, Вы обязательно столкнетесь с этой задачей. Настроить переадресацию портов в iptables можно с помощью следующей команды:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
Данная команда переадресовывает весь входящий трафик через сетевой интерфейс eth0 с порта 25 на порт 2525 (выбранные в качестве примера).
Ограничиваем сетевой поток на 80 порт Apache с помощью iptables
Возможны ситуации, при которых IP-адреса начинают запрашивать много подключений к веб-портам на сайте. В результате это может вызвать ряд проблем. Ваша задача как системного администратора — предотвратить подобные события и настроить процедуру получения пакетов. Для этого воспользуйтесь следующим правилом:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
Данное правило использует сразу несколько опций. Во-первых, --limit — ограничивает количество входящих соединений в указанный промежуток времени (в нашем случае — до 100 в минуту). Во-вторых, --limit-burst — устанавливает предельное количества пакетов в 200 штук, когда начинает срабатывать правило. Редактируйте эти параметры под Вашу конкретную задачу.
Блокируем входящие запросы ping
Утилита ping используется в качестве простого метода для выявления доступных хостов в сети и определяет схемы подключения этих хостов к Интернету. С помощью нее злоумышленники могут найти удобные цели для атаки. Блокируя запросы ping, можно предотвратить часть самых простых атак на свой компьютер. Чтобы заблокировать такие запросы — выполните следующую команду.
iptables -A INPUT -p icmp -i eth0 -j DROP
Разрешаем доступ loopback
Loopback — логический интерфейс, необходимый для корректной работы маршрутизатора и передачи данных. Сам интерфейс является отображением логических процессов в маршрутизаторе. Он часто используется для тестирования передачи данных или передающей инфраструктуры. Доступ loopback важен для Вашей сети, и всегда должен оставаться активным. Настроить его помогут следующие команды.
Для входящих соединений:
iptables -A INPUT -i lo -j ACCEPT
Для исходящих соединений:
iptables -A OUTPUT -o lo -j ACCEPT
Опция -i нужна, чтобы задать имя интерфейса, через который был получен пакет. Тогда как опция -o — позволяет задать имя интерфейса, через который будет отправлен пакет. В нашем случаи — это lo (Loopback Interface)
Ведем журнал пропущенных сетевых пакетов
Журнал — это файл с записями о событиях, которые произошли с программой в определенный момент времени. Различают регистрацию внешних событий и протоколирование работы самой программы — источника записей. Исследование содержимого файла регистрации ошибок после возникновения неполадок важная часть работы системного администратора. И часто позволяет быстрее понять причины возникновения сбоев.
Для регистрации отброшенных пакетов на определенном сетевом интерфейсе Вы можете использовать следующую команду:
iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
Также Вы можете изменить значение аргумента, идущего после опции --log-prefix на любое другое — по собственному выбору.
У дистрибутивов CentOS / RHEL сообщения об ошибках хранятся в файлах, расположенных по адресу /var/log/messages . Тогда как у дистрибутивов Ubuntu / Debian — в каталоге /var/log/kern.log , Вы можете легко найти их с помощью следующей команды:
grep "IPtables dropped packets:" /var/log/messages
Блокируем доступ к определенному MAC-адресу с помощью iptables
Фильтрация MAC-адресов позволяет Вам определять список устройств, которым разрешен доступ к сети. Стоит отметить, что сегодня это — важная часть сетевого администрирования. Чтобы заблокировать доступ к системе с определенного MAC-адреса — используйте приведенную команду:
iptables -A INPUT -m mac --mac-source 9A:62:4E:FF:AF:56 -j DROP
В Вашем случаи, нужно заменить взятый в качестве примера адрес 9A:62:4E:FF:AF:56 на фактический MAC-адрес, который Вы хотите заблокировать.
Ограничиваем количество одновременных подключений с одного IP-адреса
Для уменьшения или регулирования нагрузки на определенный порт Вы можете установить количество одновременных соединений с указанным портом с одного IP-адреса. Для этого используйте команду со следующими опциями:
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
В результате команда установит ограничение — не более 3-х подключений для клиента к порту 22. Кроме того, опция --connlimit-above установит количество активных TCP-соединений — не более n (значение может быть изменено в соответствии с Вашими требованиями).
Ведем поиск в правилах
Требования безопасности сети могут насчитывать несколько десятков, а то и сотен правил. Это, конечно же, усложняет работу с ними. При возникновении какой-либо ошибки поиск соответствующего правила вручную может занять длительное время. Для удобства утилита iptables предлагает простой способ поиска по записанным правилам:
iptables -L $table -v -n | grep $string
В данной команде Вам нужно заменить переменную $table на таблицу, в которой Вы хотите выполнить поиск. А переменную $string — на строку, которую Вы ищете. Например:
iptables -C OUTPUT -v -n | grep 192.168.0.100
Создаем новую цепочку iptables
Инструмент iptables позволяет использовать не только заранее созданные цепочки, но и создавать свои собственные. В новых цепочках Вы также можете хранить собственные правила. Для создания новой цепочки введите следующую команду:
iptables -N <your-chain-name>
Теперь Вы можете проверить все цепочки:
iptables -L
Опция -N или --new-chain позволяет Вам создать цепочки с заданным названием.
Сбрасываем все цепочки или правила брандмауэра iptables
После обновления политики безопасности сети, возможно, Вам потребуется сбросить все текущие правила из определенной таблицы. Для этого используйте следующую команду:
iptables -F
Для сброса правил из указанной таблицы (в нашем случае — NAT) введите следующую команду:
iptables -t nat -F
Сохраняем правила в файл
Создание резервных копий — этот один из навыков, отличающих профессионалов в системном администрировании от новичков. Потому что Вы никогда не сможете предусмотреть все. И очень важно иметь возможность восстановить правила брандмауэра после сбоя. Вместо того чтобы настраивать все заново вручную. Для экспорта правил в файл Вы используйте команду iptables-save :
iptables-save > ~/<your-file-name>
Восстанавливаем правила из файла
Чтобы восстановить ранее сохраненный список утерянных правил из файла — используйте команду iptables-restore :
iptables-restore < ~/<your-file-name>
Настраиваем правила в соответствии с PCI
Системным администраторам может потребоваться настроить свои серверы на совместимость с PCI – стандарт безопасности данных индустрии платежных карт.
Большинство систем PCI используют определенный номер версии пакета программного обеспечения, который содержит заявленную уязвимость. Перед настройкой правил убедитесь, что Вы соответствуете требованиям поставщика PCI, внимательно изучите его отчет. Возможно, Вам понадобиться заблокировать UDP-трафик на определенных портах.
Для такой настройки на совместимость потребуется несколько IP-адресов. При написании соответствующих правил нужно быть предельно осторожным. И использовать их только в том случае, если Вы на 100% уверены, что делаете:
iptables -I INPUT -d SITE -p tcp -m multiport --dports xx,xx,xxx,xxx,xxx,xxx,xxx,xxx -j DROP
Если Вы используете cPanel или иную подобную панель управления — возможно, Вам также придется заблокировать её порты в соответствии со следующим примером:
iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx -j DROP
Разрешаем установленные и связанные соединения
Поскольку любой сетевой трафик разделен на входящий и исходящий, Вам придется разрешить установленный входящий трафик в Вашу сеть. Для этого нужно использовать командную опцию --ctstate , которая позволяет задать требуемое состояние соединения:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Для настройки правила для исходящего трафика используйте следующую команду:
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
Удаляем INVALID пакетов
Рассмотрим использование опции --ctstate на примере удаления пакетов INVALID (то есть тех, которые относятся к неизвестному соединению). В большинстве случаев такие пакеты нужно отбрасывать (или удалять). Для этой задачи введите следующую команду:
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Блокируем соединения на сетевом интерфейсе
Некоторые компьютерные системы могут иметь более одного сетевого интерфейса. Для их настройки Вам потребуется ограничить доступ к тому или иному сетевому интерфейсу либо заблокировать соединения с указанного IP-адреса. Сделать это поможет следующая команда:
iptables -A INPUT -i eth0 -s 192.168.59.123 -j DROP
Блокируем отправку электронной почты с помощью iptables
В некоторых случаях Вам нужно будет запретить отправлять электронные письма. Для этого нужно заблокировать исходящие порты протокола SMTP — такие как 25 , 587 , 465 . Вот пример решения подобной задачи:
iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
Выводы
Утилита iptables — это мощный брандмауэр, который позволит Вам правильно настроить все нужные правила для сети. Каждому системному администратору придется работать с множеством подобных инструментов. И мы надеемся, что данная статья помогла Вам разобраться с основами использования iptables для администратора Linux. Если вы считаете, что мы должны добавить больше примеров в это руководство — поделитесь ими в комментариях.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
|