Это должен знать каждый об iptables

Хотя Linux славится своей надежностью и безопасностью, светить открытыми портами в сеть, где полно каккеров и прочих извращенцев — не самая хорошая идея. Рассмотрим как обнести все потенциально уязвимые отверстия огненной стеной.

Для этих целей добрые программисты запилили в Линукс фаейрвол iptables. Он быстр, надежен и бесплатен, однако, мало кто им пользуется по причине сложной и запутанной настройки. Интернет-издание Либератум первым в мире предлагает простой конфиг. Скописатил, запустил, забыл.

Но сначала небольшое отступление. Программа iptables устроена таким хитрым образом, что все сделанные настройки слетят при первой же перезагрузке. Поэтому неопытные админы стараются сохранить настройки в .sh-файле, а сами файлы раскидывают где попало. Мы не будем уподобляться этим наивным слепцам и сделаем все правильно. Есть программа, предоставляющая для iptables стандартный интерфейс Linux-сервиса и умеющая сохранять и восстанавливать правила. Имя ей — iptables-persistent.

apt-get install iptables-persistent

Вот теперь можно переходить к созданию правил для файервола. Все делается от имени суперпользователя.

iptables -F
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Этот конфиг предполагает следующее поведение:

  • все входящие соединения выпиливаются — это для каккеров;
  • все исходящие соединения устанавливаются — это для хозяина системы;
  • пропускаются все уже установленные соединения;
  • пропускается всё в обоих направлениях на интерфейсе lo;
  • выпиливаются нулевые и syn-flood-пакеты — от пионеров;
  • пропускаются входящие соединения на 22й порт (это для того, чтобы можно было зайти по ssh, а также для того, чтобы продемонстрировать как пользователь может самостоятельно открыть любой порт — нужно скопировать эту строку и заменить номер порта).

Теперь проверим, правильно ли iptables понял наши указания:

iptables -L -v

Получаем следующую картину:

iptables -L -v
Chain INPUT (policy DROP 3710 packets, 163K bytes)
 pkts bytes target     prot opt in     out     source               destination
  851 77161 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
    2    80 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags:! FIN,SYN,RST,ACK/SYN state NEW
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
    3   180 ACCEPT     all  --  lo     any     anywhere             anywhere
    1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:22
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain OUTPUT (policy ACCEPT 1017 packets, 424K bytes)
 pkts bytes target     prot opt in     out     source               destination

Да, все верно. И что интересно, iptables уже показывает сколько пакетов удалось отбросить — policy DROP 3710 packets. То есть, не успели мы еще настроить всё как следует, а компьютер уже попытались отыметь каккеры — какое всё же опасное место этот ваш интернет!

Теперь сохраняем правила для последующего употребления:

iptables-save > /etc/iptables/rules.v4

И перезапустим сервис:

service iptables-persistent restart

Все, теперь девственности портов ничего не угрожает.

Примечание

В новых версиях Ubuntu и Debian служба iptables-persistent может называться netfilter-persistent.

4.421055
Ваша оценка: Нет Средняя оценка: 4.4 (19 votes)

А не легче воспользоваться UFW? Если хотите лёгкой жизни пишите правила в ufw.

Ваша оценка: Нет Средняя оценка: 5 (1 vote)
pomodor

Легче. Но легкая тропа не бывает правильной.

Синтаксис iptables очень сложен и требует несколько дней (или даже недель) на изучение и запоминание. Зато потом моя стоимость как Linux-специалиста увеличивается. Я могу прописать в резюме, что я конфигурирую iptables с закрытыми глазами и потребовать увеличения зарплаты на 5-10 тыс.

А что дает освоение UFW? Работодатель спрашивает: а что это такое? Я говорю, мол, это приблуда для неосиливших iptables. У работодателя справедливо возникает вопрос: соискатель хвастается, что не осилил iptables. Не придурок ли он? И речь о повышении зарплаты, как вы понимаете, уже не идет.

Ваша оценка: Нет Средняя оценка: 4.3 (9 votes)

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

Ваша оценка: Нет Средняя оценка: 4.8 (4 votes)
pomodor

Чаще просматривайте вакансии. Особенно те, в которых написано, что знание iptables будет преимуществом/плюсом к зарплате.

Ваша оценка: Нет

Да какой из меня админ, я скорее просто опытный пользователь. Только шефу не говори :))) он верит что я профи, уволит нафиг, :((( а мне кредиты ещё платить.
Кстати iptables я однажды настраивал на рабочем роутере EdgeRouter Lite но было это уже давненько, там ведь как, один раз настроил и забыл навсегда. Микротик скоро докупят, опять вспоминать придётся, но там вроде админка получше, возможно правила прям через админку можно писать, а не как в EdgeRouter по ssh через терминал или встроенный тормозной терминал.

Ваша оценка: Нет

Со страницы man руководства ufw:
«ufw не предназначен для обеспечения полной функциональности брандмауэра через свой командный интерфейс, но он предоставляет легкий способ добавления или удаления простых правил. Сейчас в большинстве случаев он используется для централизованных брандмауэров.»

Ваша оценка: Нет

to PomodorTheGreat: Спасибо еще раз за статьи, занес правила из статьи в iptables, кроме 22 порта, сижу тут экспериментирую. Сразу после создания правил остался без инета, тк заблокировался dnsmasq на 53 порту, из чего стало понятно что все работает как надо. Но по ssh я зашел на локальный сервер сервер без проблем, хотя 22 порт я не открывал. Так ведь не должно быть, так как флаг у tcp должен быть state NEW , или я чегото не понимаю? Локальная сеть простая, рутер и к нему два компа:

рутер(192.168.0.1) — мой комп(192.168.0.3)
|
сервер (192.168.0.6)

Ваша оценка: Нет

э.. поправка, 22 порт и не надо было открывать, это я стормозил. его же только сервер использует, а мой отвечает на одном из Registered ports в данном случае 40052

bob@boblin:~$ netstat -anlt
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 0.0.0.0:48910 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:30000 0.0.0.0:* LISTEN 
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 
 
tcp 0 0 192.168.0.2:40052 192.168.0.6:22 TIME_WAIT
 
tcp 0 0 192.168.0.2:698 192.168.0.6:2049 VERBUNDEN 
tcp 0 0 192.168.0.2:33191 216.58.213.35:80 TIME_WAIT 
tcp6 0 0 :::38603 :::* LISTEN 
tcp6 0 0 :::111 :::* LISTEN 

все равно не пойму почему прошел к серверу по ssh

Ваша оценка: Нет
pomodor

А вы правила сохраняете? Что показывает iptables -L -n после перезагрузки?

Ваша оценка: Нет
pomodor

Так ведь не должно быть, так как флаг у tcp должен быть state NEW , или я чегото не понимаю?

Думаю, что-то всё же недопонимаете. Правило со state NEW используется для защиты от syn-flood и никакого отношения к 22 порту не имеет. Как-нибудь точнее распишу смысл указанных строчек, раз появился спрос.

Ваша оценка: Нет Средняя оценка: 5 (1 vote)

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

Просто, как только трассировщик «увидел» первый (SYN) пакет, то присваивает ему статус NEW. Как только через трассировщика проходит второй пакет (SYN/ACK), то соединению присваивается статус ESTABLISHED.

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

Ваша оценка: Нет
pomodor

С программиста на админа — это скорее даунгрейд. Не проще выучить что-нибудь востребованное из ЯП и искать работу программистом?

Ваша оценка: Нет

Да ну даунгрейд, админ должен знать СТОЛЬКО, требования в объявлениях о приеме просто заоблачные. Я не совсем программист — создаю или изменяю пакеты для автоматической раздачи через SCCM, Netinstall и другие похожие, дорабатываю MSI файлы, к exe-шникам делаю враперы с помощью vb, powershell или autoit, иногда на c#. Основной софт для меня adminstudio. Так что я и не прогаммист в смысле этого слова, даже не знаю как определить. Не нашел после учебы место админа, а нашел вот такое и не знаю куда податься. Мало по малу расширяю знания по всем направлениям, изучаю яву между делом :)

Ваша оценка: Нет Средняя оценка: 3 (1 vote)
pomodor

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

Ваша оценка: Нет

у меня вопрос: после правил iptables -P INPUT DROP разрешены только эти 2

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

для чего еще другие 3 дропа на инпут, ведь и так все запрещено??

Ваша оценка: Нет
pomodor

А очень просто: iptables -P INPUT DROP не отбрасывает все входящие пакеты, а устанавливает политику. То есть, сначала пакет будет разобран по всей цепочке и если для него не будет найдено правило, сработает политика запрета. Внимание, вопрос: а зачем битый пакет разбирать по всей цепочке, если его можно отбросить сразу?

Ваша оценка: Нет Средняя оценка: 5 (2 votes)
pomodor

Ах да, что еще более важно. 22-й порт-то открыт и даже с iptables -P INPUT DROP на него можно слать испорченные пакеты, чтобы вызвать отказ в обслуживании. Вот «другие 3 дропа на инпут» как раз для предотвращения этого.

Я даже больше скажу. На рабочих Web-серверах я добавляю еще одно правило:

-A INPUT -p tcp -m connlimit --connlimit-above 4 --connlimit-mask 32 --connlimit-saddr -j REJECT --reject-with icmp-port-unreachable

Оно ограничивает количество подключений к порту. 4 штуки в одни руки с одного IP. Без этого правила любой пионер на широком канале может открыть кучу параллельных соединений на какую-нибудь тяжелую страницу и вызвать маленький DoS.

Ваша оценка: Нет Средняя оценка: 5 (2 votes)

А мне кажется, что так Вы вставляете палки в колёса тем, кто сидит за натом. Например провайдерским. Может тяжёлую страницу облегчить? А то веб-серверы уже запарили ддосить мой нетбук своими тяжёлыми страницами. Открываешь очередную ссылку в новой вкладке, чтоб после дочитывания текущей прочитать, и начинается пошаговая стратегия, ибо в ОЗУ они уже не влазят.

Ваша оценка: Нет Средняя оценка: 1 (1 vote)

обалдеть , наконец то мне становится более-менее понятна техникa iptables. Еще нравится статья про отличия append от insert. Очень интересно, можно было бы ваши советы по iptables объеденить в отдельную тему.

Ваша оценка: Нет
pomodor

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

Ваша оценка: Нет Средняя оценка: 5 (1 vote)

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

Ваша оценка: Нет

Ну и где?
А то данный в посте набор, как я понял, требует коррекции и, прочтя всю тему с комментариями, я так и не понял, какой именно. Впишу правила — и заблокирую себе интернет и даже хелп не смогу найти)).

Ваша оценка: Нет Средняя оценка: 1 (1 vote)
Отправить комментарий
КАПЧА
Вы человек? Подсказка: зарегистрируйтесь, чтобы этот вопрос больше никогда не возникал. Кстати, анонимные ссылки запрещены.
CAPTCHA на основе изображений
Enter the characters shown in the image.