Настраиваем защищенный iptables

NetfilterБрандмауэр (firewall, фаерволл) неотъемлемая часть любой unix системы. И надо уметь работать с ним. В linux системах брандмауэр входит в стандартное ядро и называется netfilter. Iptables - название команды, с помощью которой задаются правила в системе netfilter.
В этой статье я хочу вам привести пример брандмауэра в котором по умолчанию все запрещено. Для домашних систем в которых работают разные torrent качалки и прочие p2p программы данный пример брандмауэра не подойдет, т.к. любое соединение на определенный порт надо прописывать в конфигурации.

Итак начинаем.. Сначала приведу два вспомогательных скрипта.
Первый, разрешает все и вся к нам и от нас. Запускается с целью протестировать соединения, если думаете, что вам мешает ваш рабочий брандмауэр. Этот скрипт я назвал fwaccept.


#очистка существующих правил
iptables -F
iptables -X

#политика по умолчанию - ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Следующий скрипт fwdrop. Как видно из названия все соединения запрещает. Запускать только за консолью компьютера или сервера, а иначе удаленное управление точно потеряете. Может пригодиться, если вдруг заметите постороннюю активность и надо срочно перекрыть доступ. Ну мало ли, что в жизни бывает :)


#очистка существующих правил
iptables -F
iptables -X
#политика по умолчанию - DENY
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

А теперь сам скрипт моего firewall в котором по умолчанию все запрещено. Скрипт для одной сетевой карты, т.е для машин роутеров он не совсем подходит, или надо все прописывать на вторую сетевую.
Я надеюсь вам что-то пригодится из этого скрипта, т.к. описано много протоколов и примеров взаимодействия с другими машинами и сетями. Специально не использованы так называемые цепочки правил, чтобы не запутать новичков. Изменяете переменные на свои, убирайте лишнее и можно начинать работать :)
В каждой строке всегда 2 правила на вход и выход. Скрипт большой - показать

В данном скрипте, пришлось переносить строки через синтаксис "\", чтобы нормально влезло на экран. Скрипт доступен для скачки в разных кодировках - fw-windows1251.txt, fw-koi8.txt, fw-utf8.txt.
Единственное, что может скомпрометировать безопасность в данном скрипте, это режим пассивного канала данных. Очень уж много доступа со множества портов разрешается на нашу машину. При открытии FTP сервера на машине, где запущен этот скрипт будет заметное увеличение соединения, это из-за пассивных портов FTP.

После того как скрипт отлажен и не выдает никаких ошибок при запуске, можно выполнить


# iptables-save > /etc/rc.d/fwrules

Команда iptables-save позволяет записать текущий набор правил iptables в файл, а файл можно восстанавливать обратно в память компьютера командой iptables-restore. Для чего все это? Команда iptables-restore при загрузке скрипта отработает почти в 20 раз быстрее чем наш скрипт. Там конечно разница в мс, но я хочу показать, как надо правильно делать.
Замерим скорость загрузки нашего скрипта и через iptables-restore


# time fw
real    0m0.717s
user    0m0.132s
sys     0m0.244s
# time iptables-restore /etc/rc.d/fwrules
real    0m0.039s
user    0m0.004s
sys     0m0.008s

Почувствуйте разницу!

Еще один совет при отлаживании правил firewall. Смотрите вывод команды


# iptables -vL

Ответ команды будет большой, но вывод можно ограничивать командой grep только нужных строчек. Смотрите на счетчик пакетов или байтов в начале строки. Это скажет по какому пути пошло соединение, а если не пошло, значит уперлось в DROP политику.

А теперь занесем загрузку скрипта при старте ОС. В каждом дистрибутиве это по разному, так что почитайте сами. Если лень читать, то вставьте в скрипт rc.local строку c iptables-restore и путем до файла сохраненных настроек.

Защищенной вам работы!

Статья просмотрена 11 254 раз
Запись опубликована в рубрике Firewall, iptables с метками , , , , . Добавьте в закладки постоянную ссылку.

16 комментариев: Настраиваем защищенный iptables

  1. Nikolay говорит:

    Здравствуйте
    Скажите, зачем в скрипте присутствуют правила с целью DROP в начале, если политика DENY ? То есть запрещено всё, что явно не разрешено.

    • mik говорит:

      да вы правы. Если политика DENY то эти правила избыточны. Но я их держу на всякий случай в скрипте :) Может кому и пригодятся, т.к. блокировать данные с этих адресов нужно обязательно.

  2. karavan говорит:

    К слову про iptables-save…
    На машинах Like RedHat (Centos, Fedora etc.) этот скрипт только выводит текущие загруженные правила, при этом ни как не воздействуя на /etc/sysconfig/iptables
    Возможность записи загруженных правил в конфиг только так
    service iptables save
    или
    /etc/init.d/iptables save

    • пятачок говорит:

      ни в коем случае… там порты по фаллигатовской системе нарсипируются

  3. karavan говорит:

    P.S.: Хотя да, автор указывает перенаправление вывода в файл, но в разных машинах он разный. И тут либо направлять в родной файлик, либо через rc.local подгружать создаваемый.

  4. mexx говорит:

    Спасибо за статью, только пытаюсь освоить iptables и разжеванные комментарии в скрипте очень кстати .
    Такой вопрос – у меня интерфейс ppp0, оператор присваивает динамический IP из диапазона “10.x.x.x” – как адаптировать скрипт? Просто убрать переменную А и все с ней связанное? Или еще какая-то специфика должна быть?

    • mik говорит:

      Не совсем понял что за переменная A в скрипте.. Но все равно я думаю скрипт описанный в статье не подходит для динамического адреса. Этот скрипт больше ориентирован для серверов со статическим адресом.
      Для инета с ppp0 модно использовать что-то попроще. У меня был когда-то этот скрипт.
      http://ruunix.ru/wp-content/uploads/iptables/fw_drop_in_pass_out.txt
      Он тоже с комментариями на KOI8-R. Думаю разберетесь. Тут фактически ничего допиливать не надо, просто лишнее выкинуть или добавить свои ip для соседних машин в сети.

  5. mexx говорит:

    Под переменной А я подразумевал CLASS_A=”10.0.0.0/8″
    За второй скрипт спасибо, буду изучать. Но первый сделан “от противного”, “запрещено все, что явно не разрешено”, этот путь мне представляется более правильным.
    P.S.: Не люблю и не хочу быть модным, не моё )

    • mik говорит:

      Первый скрипт конечно более суровый :) Если первый адаптировать, то да CLASS_A надо убирать, плюс разобраться с переменной IPADDR, т.к у вас по сути будет 2 интерфейса, 1 eth0, второй ppp0 с динамическим адресом.

      Переменная EXTERNAL_INTERFACE у вас будет в таком случае ppp0, но в правилах не надо задавать “-s $IPADDR”, т.к. этот адрес будет динамическим.
      В общем на первый взгляд так.

  6. mexx говорит:

    Попробовал все же сделать на основе второго скрипта, вроде почти все понял ) Логика там не хуже первого, ибо “всё, что явно не разрешено, то DROP”. Внес в него несколько изменений из Google, что-то поменял местами. Все же не определился с набором –icmp-type Есть возможность посмотреть краем глаза на предмет явных ошибок? Я понимаю, что “нафик_оно_мне_ надо”, но вдруг… ) В любом случае – спасибо, на конкретных примерах проще понимать.

    • mik говорит:

      про icmp типы в инете посмотреть можно. для чего какой тип отвечает. Лучше что у меня прописано то и оставить. Я это в книжке “Брандмауэры в linux” взял.
      нуа посмотреть почему бы и нет :) выложите куда-нибудь или по почте скиньте. в контактах сайта есть мыло.

  7. Cергей говорит:

    Здравствуйте
    Установил программу Gufw Firewall и на компе пропал интернет
    Устанавливал из центра программ Мюон что как-бы подразумевает правильность проги
    Было написано что этот Гуф Фаервол это охренительно простой способ защитить комп
    Причём интернет пропал и в системе Виндовс
    Винда показывает наличие подключения а браузер пишет что нет интерета
    Как такое возможно? Как пингвин может залезать в БИОС?
    Пришлось достать с антресолей древний лаптоп Азер всунуть в него лайв-диск с пингвином и с помощью такого бубна искать подмоги
    Пингвин от КДЕ 14 04
    Теперь вот собственно вопрос Как с этим злом бороться?
    Дело в том что этот гуф фаервол будто бы выключен потому что всякий раз при старте системы приходится его искать и включать а интернет отсутствует постоянно даже в винде
    Фаервол пишет в журнале какие-то порты но я хз правильно ли
    Люди добрые помогите пожалуйста мы сами не местные мы с винды и в этом пингвине хуже чем в лесу

    • mik говорит:

      Сергей, я понятия не имею что это за программа такая. Разбираться ради вас в этой проблеме не вижу смысла.
      А вот проблема отсутствия в windows интернета интересна. В браузере то что нет интернет еще ничего не значит, там могут быть настройки разные. Запустите в windows команду cmd и далее выполните команду ping 8.8.8.8. Если ответы пошли, значит интернет есть. Остальное дело настроек компьютера. Если ответы не пошли, тогда предположу, что программа в linux отключает полностью сетевую карту проводную или беспроводную. Вы не указали через какое подключение выходите в интернет.
      На будущее не используйте программы не читая к ним документации. В linux такой подход не сработает. Надо четко понимать что вы делаете и заче вам firewall этот нужен. Если ваш компьютер стоит за роутером вам этот firewall вообще не сдался.

  8. Сергей говорит:

    Здравствуйте.
    Программа вот эта:
    http://gufw.org/
    Ради меня разбираться не нужно. Хотя и приятно было-бы … :о)
    Я просто подумал: чувак ведёт блог, значит крут невероятно и он мою проблему одной левой…
    С интернетом уже разобрались – нашёлся в нашем городке шибко шарящий товарищ. Каким-то макаром фаервол отключил в биосе сетевую карту. Включили в биосе и в настройках фаервола в одном месте поставили галку.
    Осталось только понять, как он (фаервол) это делает…
    Сейчас бодаюсь с системным временем. Эта зараза тупо переставляет системное время на -3 часа от московского. А при загрузке пингвина в трее пишет +3 часа от московского. При загрузке виндовс время устанавливается как положено.
    Можно плюнуть, но ведь интересно… :о)
    Спасибо за участие.

    • mik говорит:

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

      А насчет времени запускайте команду
      date -R
      должен быть примерно такой ответ
      Sat, 21 Apr 2018 16:44:32 +0300
      вот +0300 это показывает часовой пояс. В данном случае +3 часа к нулевому поясу Гринвича. Я думаю у вас какая-то проблема с часовым поясом.

  9. Сергей говорит:

    Привет. Относительно трабла со временем выяснил, что если не грузить виндовс, то показывает правильное время – московское. Вот несколько дней не загружал винду и время не сбивается. Часовой пояс установлен на Москву и тож стоит ровно.
    Спасибо за участие.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>