Home » Linux » CentOS » Настройка iptables в CentOS 7

Настройка iptables в CentOS 7

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

Вступление

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

К этому фаерволу существуют разные обвязки, которые используются для более «удобной» настройки. В ubuntu есть ufw, в centos — firewalld, с другими не знаком. Лично я не вижу никакого удобства в использовании этих инструментов. Я привык настраивать линуксовый фаервол по-старинке, как научился в самом начале работы. Мне кажется это наиболее простым и удобным способом, которым я с вами и поделюсь. Суть его сводится к тому, что создается скрипт с правилами фаервола. Этот скрипт можно легко редактировать под свои нужды и переносить с сервера на сервер.

Отключение firewalld

Вопрос отключения firewalld я уже касался в теме по настройке сервера. Первым делом отключим firewalld, который присутствует в centos 7 по-умолчанию сразу после установки:

# systemctl stop firewalld

Теперь удалим его из автозагрузки, чтобы он не включился снова после рестарта:

# systemctl disable firewalld

После этого на сервере настройки сетевого экрана становятся полностью открытыми. Посмотреть правила iptables можно командой:

# iptables -L -v -n

Просмотр правил iptables

Дальше пойдет информация исключительно по конфигурированию только iptables. Темы firewalld я больше касаться не буду.

Установка iptables

На самом деле фаервол у нас на сервере уже стоит и работает, просто нет никаких правил, все открыто. Установить нам нужно будет дополнительные утилиты управления, без которых конфигурировать iptables невозможно. Например, нельзя будет перезапустить фаервол:

# systemctl restart iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

Или добавить в автозапуск не получится:

# systemctl enable iptables.service
Failed to issue method call: No such file or directory

Чтобы подобных ошибок не было, установим необходимый пакет с утилитами:

# yum -y install iptables-services

Теперь можно добавить iptables в автозагрузку и запустить:

# systemctl enable iptables.service
# systemctl start iptables.service

Настройка фаервола

Для управления правилами фаервола я использую скрипт. Создадим его:

# mcedit /etc/iptables.sh

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

Мы рассмотрим ситуацию, когда сервер является шлюзом в интернет для локальной сети.

Первым делом зададим все переменные, которые будем использовать в скрипте. Это не обязательно делать, но рекомендуется, потому что удобно переносить настройки с сервера на сервер. Достаточно будет просто переназначить переменные.

Перед применением новых правил, очищаем все цепочки:

Блокируем весь трафик, который не соответствует ни одному из правил:

Разрешаем весь трафик локалхоста и локалки:

Разрешаем делать ping:

Если вам это не нужно, то не добавляйте разрешающие правила для icmp.

Открываем доступ в инет самому серверу:

Если вы хотите открыть все входящие соединения сервера, то добавляйте дальше правило:

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

Дальше разрешим все установленные соединения и дочерние от них. Так как они уже установлены, значит прошли через цепочки правил, фильтровать их еще раз нет смысла:

Теперь добавим защиту от наиболее распространенных сетевых атак. Сначала отбросим все пакеты, которые не имеют никакого статуса:

Блокируем нулевые пакеты:

Закрываемся от syn-flood атак:

Следом за этими правилами рекомендуется поставить правила на запрет доступа с определенных IP, если у вас имеется такая необходимость. Например, вас задолбал адрес 84.122.21.197 брутом ssh. Блокируем его:

Если вы не ставите ограничений на доступ из локальной сети, то разрешаем всем выход в интернет:

Следом запрещаем доступ из инета в локальную сеть:

Чтобы наша локальная сеть пользовалась интернетом, включаем nat:

Чтобы не потерять доступ к серверу, после применения правил, разрешаем подключения по ssh:

И в конце записываем правила, чтобы они применились после перезагрузки:

Мы составили простейший конфиг, который блокирует все входящие соединения, кроме ssh и разрешает доступ из локальной сети в интернет. Попутно защитились от некоторых сетевых атак.

Сохраняем скрипт, делаем исполняемым и запускаем:

# chmod 0740 /etc/iptables.sh
# /etc/iptables.sh

Выполним просмотр правил и проверим, все ли правила на месте:

# iptables -L -v -n
Обращаю ваше внимание — применять правила нужно лишь в том случае, если у вас имеется доступ к консоли сервера. При ошибке в настройках вы можете потерять доступ. Убедитесь, что в нештатной ситуации вы сможете отключить фаервол и скорректировать настройки.

Открытие портов

Теперь немного расширим нашу конфигурацию и откроем в iptables порты для некоторых сервисов. Допустим, у нас работает веб-сервер и необходимо открыть к нему доступ из интернета. Добавляем правила для веб-трафика:

Было добавлено разрешение на входящие соединения по 80-му и 443-му портам, которые использует web сервер в своей работе.

Если у вас установлен почтовый сервер, то нужно разрешить на него входящие соединения по всем используемым портам:

Для корректной работы DNS сервера, нужно открыть UDP порт 53

И так далее. По аналогии можете открыть доступ для всех необходимых сервисов.

Проброс (forward) порта

Рассмотрим ситуацию, когда необходимо выполнить проброс портов с внешнего интерфейса на какой-то компьютер в локальной сети. Допустим, вам необходимо получить rdp доступ к компьютеру 10.1.3.50 из интернета. Делаем проброс TCP порта 3389:

Если вы не хотите светить снаружи известным портом, то можно сделать перенаправление с нестандартного порта на порт rdp конечного компьютера:

Если вы пробрасываете порт снаружи внутрь локальной сети, то обязательно закомментируйте правило, которое блокирует доступ из внешней сети во внутреннюю. В моем примере это правило:

$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT

Либо перед этим правилом создайте разрешающее правило для доступа снаружи к внутреннему сервису, например вот так:

$IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j ACCEPT

Включение логов

Во время настройки полезно включить логи, чтобы мониторить заблокированные пакеты и выяснять, почему отсутствует доступ к необходимым сервисам, которые мы вроде бы уже открыли. Я отправляю все заблокированные пакеты в отдельные цепочки (block_in, block_out, block_fw), соответствующие направлению трафика и маркирую в логах каждое направление. Так удобнее делать разбор полетов. Добавляем следующие правила в самый конец скрипта, перед сохранением настроек:

Все заблокированные пакеты вы сможете отследить в файле /var/log/messages.

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

Как отключить iptables

Если вы вдруг решите, что firewall вам больше не нужен, то отключить его можно следующим образом:

# systemctl stop iptables.service

Эта команда останавливает фаервол. А следующая удаляет из автозагрузки:

# systemctl disable iptables.service

Отключив сетевой экран, мы разрешили все соединения.

Заключение

Как и обещал, выкладываю готовый скрипт с основным набором правил, которые мы рассмотрели iptables.sh

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

А представляете, если это был бы удаленный сервер? Ко мне так обратился один знакомый, который попросил настроить firewall на веб-сервере. Предыдущий админ заставил его 2 раза приезжать к размещению машины и сбрасывать настройки неправильно сконфигурированного экрана, что в конечном счете и привело к прекращению сотрудничества. Это было давно, но случай мне запомнился. Сейчас практически все хостинги предлагают платно или бесплатно удаленный KVM доступ. Лучше озаботиться об этом заранее.

Видео

Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по CentOS

Рекомендую полезные материалы по CentOS:
Настройки системы
  • Установка
  • Базовая настройка
  • Настройка времени
  • Настройка сети
  • Настройка репозиториев
  • Настройка iptables
Установка CentOS 7 в конфигурации minimal или netinstall с загрузочной флешки или по сети на диск или raid раздел.
Базовая настройка CentOS 7 для работы с любым функционалом. Приведены практические советы по улучшению безопасности и удобства администрирования.
Как установить точное время на сервере CentOS, настроить часовой пояс, синхронизировать время с помощью ntpdate и ntpd и другое.
Подробное описание настройки сети в CentOS 7 - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др.
Установка репозиториев epel, rpmforge и др. Добавление, удаление, обновление rpm репозиториев в CentOS.
Рассмотрены основные моменты настройки iptables в Centos 7 - установка, добавление правил, проброс портов, nat, логирование и д.р.
Настройка программных комплексов
 
  • Прокси сервер
  • Шлюз
  • Asterisk
  • Asterisk+Freepbx
  • Сервер VPN
  • Web сервер Apache
  • Web сервер Nginx
  • Почтовый сервер
Подробное описание настройки прокси сервера на базе CentOS 7 со связкой squid+AD+sams2, реализован запрет доступа по url и группам пользователей.
Простая и быстрая настройка шлюза на базе CentOS 7 для организации доступа в интернет из локальной сети.
Описание установки и настройки asterisk - популярной современной sip атс. Описан расширенный функционал, покрывающий большинство потребностей стандартного офиса в современной телефонии.
Подробное описание установки voip сервера asterisk и панели управления freepbx на CentOS 7.
Установка и настройка OpenVPN сервера на CentOS для объединения офисов и подключения удаленных пользователей
Настройка web сервера CentOS 7 на базе связки http сервера apache, php и сервера db mysql, или коротко - установка lamp.
Установка и настройка высокопроизводительного web сервера на базе nginx и php fpm. В качестве кэша используется APC.

Описание установки и настройки почтового сервера iRedMail на основе готовой сборки на CentOS 7. Обзор основных возможностей и рекомендации по настройке.

Самостоятельная настройки почтового сервера postfix + dovecot а так же дополнительных полезных модулей для полноценной и удобной работы почты.

Размышления на тему выбора почтового сервера для малых и средних компаний.

Настройка отдельных программ
 
  • Zabbix
  • Phpmyadmin
  • Webmin
  • Ruby
  • Обновление php
  • Vsftpd
  • Bind
  • Unison
  • Observium
  • Syslog-NG
Видео и подробное описание установки и настройки Zabbix 3.2, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание установки и настройки панели управления phpmyadmin на веб сервер apache и nginx под управлением Centos 7.
Подробное описание установки и настройки Webmin на CentOS 7 для удаленного подключения и управления сервером.
Подробное описание установки языка Ruby последней версии на веб сервер под управлением CentOS 7.
Подробное описание установки или обновления php 7 на CentOS 7. Рассмотрен вариант отката обновления и возврата на php 5.6 или 5.4.
Подробное описание с видео установки и настройки ftp сервера vsftpd, примеры с локальными и виртуальные пользователями в mysql.
Настройка DNS сервера BIND (Named) в CentOS 7. Рассмотрены наиболее популярные конфигурации, в том числе подробное логирование.
Установка Unison в CentOS 7 для двухсторонней синхронизации файлов.
Инструкция по установке и настройке сервера мониторинга Observium на CentOS 7. В качестве примера в конце добавлено одно устройство для мониторинга.
Настройка сервера для централизованного сбора логов с удаленных устройств и серверов с помощью программы syslog-ng.
Разное
  • Настройка ssl в Apache
  • Бэкап с помощью rsync
Настройка работы веб сервера apache с виртуальными хостами по протоколу https с использованием бесплатного ssl сертификата.
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows.

52 комментария

  1. Как обезопасить себя от потери доступа к удаленному серверу:
    Используем для этих целей iptables-apply или собираем свой шелл скрип на примере приведенном ниже.
    Суть в том, что «испортив» правила iptables вы теряете доступ к серверу, и не можете указать скрипту, что вы желаете сохранить настройки. Скрипт, не получив ответ на свой вопрос восстанавливает исходные настройки правил.
    Пример для Debian/Ubuntu:

    #!/bin/sh

    safeMode=»y» # y/n
    if [ «$safeMode» = «y» ] ; then
    printf «\n Сохраняем исходные правила в файл /etc/network/iptables.up.run …\n»
    /sbin/iptables-save > /etc/network/iptables.up.run
    fi
    #===============================================================
    export IPT=»iptables»
    # Очищаем все цепочки правил iptables
    $IPT -F
    $IPT -F -t nat
    $IPT -F -t mangle
    $IPT -X
    $IPT -t nat -X
    $IPT -t mangle -X
    # Блокируем весь трафик не соответствующий ни одному из правил
    $IPT -P INPUT ACCEPT
    $IPT -P OUTPUT ACCEPT
    $IPT -P FORWARD ACCEPT
    #===============================================================
    if [ «$safeMode» != «y» ];then exit;fi
    printf «\n Новые правила таблицы filter:\n»
    $IPT -S
    printf «\n Новые правила таблицы nat:\n»
    $IPT -t nat -S
    printf «\n Новые правила таблицы mangle:\n»
    $IPT -t mangle -S
    rc() {
    old=$(stty -g)
    stty raw min 0 time 255 #макс значение = 22.5 sec
    printf ‘%s’ $(dd bs=1 count=1 2>/dev/null)
    stty $old
    }
    printf «\n Восстановить исходные правила? (Y/n) \n 25 сек до восстановления…: »
    answer=$(rc)
    if [ «$answer» = «n» ] || [ «$answer» = «N» ] ; then
    printf «\n Сохраняем правила в файл /etc/network/iptables.up.rules …\n»
    /sbin/iptables-save > /etc/network/iptables.up.rules
    exit
    fi
    printf «\n Восстанавливаем исходные правила …\n»
    /sbin/iptables-restore < /etc/network/iptables.up.run

    printf "\n Исходные правила таблицы filter:\n"
    $IPT -S
    printf "\n Исходные правила таблицы nat:\n"
    $IPT -t nat -S
    printf "\n Исходные правила таблицы mangle:\n"
    $IPT -t mangle -S

  2. короче настроил все как пописано да включил серверную игру samp порт 777 порт в firewalld открыты но проверк кажет что порт закрыт на сайте

  3. Анатолий

    Можете подсказать, настроил все по вашим инструкциям, поставил апач и никак не могу зайти на него с сервера, порты разрешил. В чем может быть проблема?

  4. Отличный конфиг, всё очень подробно разобрано, взял ваш скрипт за основу.

  5. Андрей

    Ну вот ничего не понял, что есть firewalld и что есть iptables.
    Вот на моём CentOS 7 поставил iptables, и он работает! Всё замечательно ни раз терял управление потом исправлял и т.д.
    Но в один прекрасный день осознание работы системы linux демонов снова было разрушено вот таким выводом команд:
    [root@servyak ~]# systemctl | grep fire
    firewalld.service loaded active running firewalld — dynamic firewall daemon
    [root@servyak ~]# systemctl | grep iptables
    [root@servyak ~]#

    • Zerox

      firewalld надстройка над iptables для более удобного управления правилами. Она не заменяет самого iptables.

      • Алексей

        Фактически ваш скрипт это такая же надстройка как и firewalld. Разве нет?
        Ведь скрипт это обвязка над командами, пачка правил. Firewalld тоже самое. Просто более интерактивное чем скрипт.
        Я не фанат firewalld, но имел с ним дело — он очень юзабелен и логика у него относительно простая.

        • Zerox

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

  6. Аноним

    Только проброс портов не работает, что мешает?

  7. Сергей

    Сделал вроде все верно, но теперь я не могу через ssh подключится к серверу

    • Zerox

      Значит что-то не верно 🙂 Надо отключить фаервол и еще раз проверить правила.

      • Сергей

        уже трижды все переписал и раз 20 пересмотрел) Я не очень понимаю в этом, но может проблема в том что мой сервер и комп с которого я управляю находятся в сети одного маршрутизатора. Может нужно какие-то пробросы делать?)

        • Zerox

          Приведи здесь вывод команды:
          iptables -L -v -n

          • Сергей

            Аппетит приходит во время еды)) Кажется проблема была обнаружена и решена.
            Но на всякий случай посмотрите, все правильно настроено?))
            [root@gj ~]# iptables -L -v -n
            Chain INPUT (policy DROP 3 packets, 100 bytes)
            pkts bytes target prot opt in out source destination
            0 0 ACCEPT all — lo * 0.0.0.0/0 0.0.0.0/0
            0 0 ACCEPT all — eth1 * 0.0.0.0/0 0.0.0.0/0
            85 6636 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
            0 0 DROP all — * * 0.0.0.0/0 0.0.0.0/0 state INVALID
            0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00
            0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
            0 0 ACCEPT tcp — enp3s0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
            0 0 ACCEPT udp — enp3s0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
            0 0 ACCEPT udp — enp3s0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:123

            Chain FORWARD (policy DROP 0 packets, 0 bytes)
            pkts bytes target prot opt in out source destination
            0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
            0 0 ACCEPT all — eth1 enp3s0 0.0.0.0/0 0.0.0.0/0
            0 0 REJECT all — enp3s0 eth1 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

            Chain OUTPUT (policy DROP 0 packets, 0 bytes)
            pkts bytes target prot opt in out source destination
            0 0 ACCEPT all — * lo 0.0.0.0/0 0.0.0.0/0
            0 0 ACCEPT all — * eth1 0.0.0.0/0 0.0.0.0/0
            58 6124 ACCEPT all — * enp3s0 0.0.0.0/0 0.0.0.0/0
            0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
            0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
            [root@gj ~]# Chain INPUT (policy DROP 3 packets, 100 bytes)
            pkts bytes target prot opt in out source destination
            0 0 ACCEPT all — lo * 0.0.0.0/0 0.0.0.0/0
            0 0 ACCEPT all — eth1 * 0.0.0.0/0 0.0.0.0/0
            85 6636 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
            0 0 DROP all — * * 0.0.0.0/0 0.0.0.0/0 state INVALID
            0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00
            0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
            0 0 ACCEPT tcp — enp3s0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
            0 0 ACCEPT udp — enp3s0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
            0 0 ACCEPT udp — enp3s0 * 0.0.0.0/0 0.0.0.0/0

            • Zerox

              Очень трудно читать лог с таким форматированием. К тому же тут 2 разных куска смешались. Но порт 22 на вход судя по всему открыт, ssh должен работать.

              • Сергей
                [root@gj ~]# iptables -L -v -n
                Chain INPUT (policy DROP 89 packets, 5755 bytes)
                 pkts bytes target     prot opt in     out     source               destination                                                                                         
                    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0                                                                                           
                    0     0 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0                                                                                           
                  517 47950 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                                                    state RELATED,ESTABLISHED
                    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                                                    state INVALID
                    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                                                    tcp flags:0x3F/0x00
                    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                                                    tcp flags:!0x17/0x02 state NEW
                    2    96 ACCEPT     tcp  --  enp3s0 *       0.0.0.0/0            0.0.0.0/0                                                                                                    tcp dpt:22
                    0     0 ACCEPT     udp  --  enp3s0 *       0.0.0.0/0            0.0.0.0/0                                                                                                    udp dpt:53
                    0     0 ACCEPT     udp  --  enp3s0 *       0.0.0.0/0            0.0.0.0/0                                                                                                    udp dpt:123
                
                Chain FORWARD (policy DROP 0 packets, 0 bytes)
                 pkts bytes target     prot opt in     out     source               destination                                                                                         
                    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                                                    state RELATED,ESTABLISHED
                    0     0 ACCEPT     all  --  eth1   enp3s0  0.0.0.0/0            0.0.0.0/0                                                                                           
                    0     0 REJECT     all  --  enp3s0 eth1    0.0.0.0/0            0.0.0.0/0                                                                                                    reject-with icmp-port-unreachable
                
                Chain OUTPUT (policy DROP 0 packets, 0 bytes)
                 pkts bytes target     prot opt in     out     source               destination                                                                                         
                    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0                                                                                           
                    0     0 ACCEPT     all  --  *      eth1    0.0.0.0/0            0.0.0.0/0                                                                                           
                  478  124K ACCEPT     all  --  *      enp3s0  0.0.0.0/0            0.0.0.0/0                                                                                           
                    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                                                    state RELATED,ESTABLISHED
                    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
  8. Валерий

    А возможно заблокировать сети Vk, Одноклассники и спутники мейл.ру???

    • Zerox

      Обычно это делают средствами прокси серверов, не iptables. Хотя может и можно фаерволом, но я не занимался этим. В любом случае, firewall не то средство, с помощью которого удобно делать фильтрацию пользовательского доступа на уровне доменов. Лучше тогда squid настроить.

    • Прохожий

      «А возможно заблокировать сети Vk, Одноклассники и спутники мейл.ру???»

      На примере Facebook.

      1. Найти все адреса
      host -t a http://www.facebook.com
      # команда определит список адресов Facebook (31.13.65.17 — один из них)

      whois 31.13.65.17 | grep inetnum

      31.13.64.0 — 31.13.127.255

      2. Конвертировать вышеуказанный дипазон адресов в CIDR-notation (www.ipaddressguide.com/cidr) и получаем 31.13.64.0/18

      3. Запрет исходящих запросов к Facebook
      iptables -A OUTPUT -p tcp -i eth0 -o eth1 -d 31.13.64.0/18 -j DROP

  9. Дмитрий

    Здравствуйте, когда пытаюсь запустить скрипт iptables.sh пишет iptables v1.4.21: no command specified
    В чем может быть проблема?

  10. Николай

    Т.е. в iptables можно пробросить порт с eth0, на ip адрес локальной сети, имея на интерфейсе eth0, динамический белый ip ?

  11. Владимир

    Привет, сделал под копирку, при выполнении скрипта выдает

    /etc/iptables.sh: line 1: rt: команда не найдена
    /etc/iptables.sh: line 4: -F: команда не найдена
    /etc/iptables.sh: line 5: -F: команда не найдена
    /etc/iptables.sh: line 6: -F: команда не найдена
    /etc/iptables.sh: line 7: -X: команда не найдена
    /etc/iptables.sh: line 8: -t: команда не найдена
    /etc/iptables.sh: line 9: -t: команда не найдена
    /etc/iptables.sh: line 16: -P: команда не найдена
    /etc/iptables.sh: line 17: -P: команда не найдена
    /etc/iptables.sh: line 18: -P: команда не найдена
    /etc/iptables.sh: line 21: -A: команда не найдена
    /etc/iptables.sh: line 22: -A: команда не найдена
    /etc/iptables.sh: line 23: -A: команда не найдена
    /etc/iptables.sh: line 24: -A: команда не найдена
    /etc/iptables.sh: line 27: -A: команда не найдена
    /etc/iptables.sh: line 28: -A: команда не найдена
    /etc/iptables.sh: line 29: -A: команда не найдена
    /etc/iptables.sh: line 30: -A: команда не найдена
    /etc/iptables.sh: line 33: -A: команда не найдена
    /etc/iptables.sh: line 34: -A: команда не найдена
    /etc/iptables.sh: line 35: -A: команда не найдена
    /etc/iptables.sh: line 38: -A: команда не найдена
    /etc/iptables.sh: line 39: -A: команда не найдена
    /etc/iptables.sh: line 42: -A: команда не найдена
    /etc/iptables.sh: line 45: -A: команда не найдена
    /etc/iptables.sh: line 46: -A: команда не найдена
    /etc/iptables.sh: line 49: -A: команда не найдена
    /etc/iptables.sh: line 55: -N: команда не найдена
    /etc/iptables.sh: line 56: -N: команда не найдена
    /etc/iptables.sh: line 57: -N: команда не найдена
    /etc/iptables.sh: line 59: -A: команда не найдена
    /etc/iptables.sh: line 60: -A: команда не найдена
    /etc/iptables.sh: line 61: -A: команда не найдена
    /etc/iptables.sh: line 63: -A: команда не найдена
    /etc/iptables.sh: line 64: -A: команда не найдена
    /etc/iptables.sh: line 65: -A: команда не найдена
    /etc/iptables.sh: line 66: -A: команда не найдена
    /etc/iptables.sh: line 67: -A: команда не найдена
    /etc/iptables.sh: line 68: -A: команда не найдена

    Поможешь?

  12. Кирилл

    Здравствуйте, уважаемые!
    Ситуация следующая:
    Имеется не большая локальная сеть 10-15 компьютеров + сервер на ЦентОС 7
    Интернет приходит по телефонной линии —> dsl модем —> сервер
    Сервер получает интернет по pppoe соединению к провайдеру и раздает на локальные компьютеры.
    Задача обеспечиль коректное функционирование vpn соединений с локальных компьютеров к серверу головного офиса в соседнем городе!
    Имеется интернет адрес сервера + ключи и пароли для локальных пользователей.
    Подскажите пожалуйста как настроить iptables что бы соединения проходили, сейчас при попытке подключиться с локальных компьютеров выдает ошибку 619.

  13. Возник вопрос почему в настройке указано:

    $iptables -A INPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT

    Гайд старый? Или я что то не понимаю. Вроде state устарел и теперь настройка идет через conntrack.

    $iptables -A INPUT -p all -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT

    • Zerox

      Если честно, я не слышал про то, что state устарел. Я всегда использую его в таком виде, как это приведено тут.

  14. подскажите пожалуйста, я настраивал шлюз на Centos по Вашей статье, eth0 на который приходит инет от провайдера, eth1-локальная сеть и раздает интернет по dhcp через dnsmasq, iptables я тоже взял за основу Ваш, только подставил свои айпи пи название интерфйесов,все работает исправно, теперь мне нужно что бы появилась вторая локальная сеть, настроил я точно так же eth2 как и eth1, такие же сделал конфиги в iptables и dnsmasq, eth1 раздает инет и работает dhcp, а на eth2 не то, не другое, но интерфейс пингуется с другого системника через свитч. что нужно сделать?

    • Zerox

      Нужно аккуратно проверить все конфиги и правила iptables. Убедиться, что все везде корректно настроено, разрешено. Добавить еще один сетевой интерфейс это дело техники, ничего особенного делать не надо, поэтому какого-то конкретного совета я дать не могу. К тому же не понятно, в чем конкретно проблема. Могу предположить, что либо dnsmasq не обслуживает новый интерфейс, либо nat не настроен в iptables.

  15. Сергей

    Подскажите пожалуйста, у вас была, если не ошибаюсь, статья как в Centos 7 можно перейти
    с запуска при старте системы программ с systemd на традиционный systemV init? Спасибо за статьи!

    • Zerox

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

  16. Кто может подробней объяснить

    # Внешний интерфейс
    export WAN=eth0
    export WAN_IP=109.126.13.246

    # Локальная сеть
    export LAN1=eth1
    export LAN1_IP_RANGE=192.168.88.46/24

    Что за адреса?

  17. Сделал все по статье

    из локалки пингую WAN интерфейс шлюза, дальше не идет
    со шлюза пингую ВСЕ и локалку и интернет

    [root@fw ~]# iptables -L -v -n
    Chain INPUT (policy ACCEPT 1 packets, 40 bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT all — lo * 0.0.0.0/0 0.0.0.0/0
    8 681 ACCEPT all — ens224 * 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
    56 4286 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    1 40 DROP all — * * 0.0.0.0/0 0.0.0.0/0 state INVALID
    0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00
    0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
    0 0 ACCEPT tcp — ens192 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    0 0 DROP all — * * 0.0.0.0/0 0.0.0.0/0 state INVALID
    0 0 ACCEPT all — ens224 ens192 0.0.0.0/0 0.0.0.0/0
    0 0 REJECT all — ens192 ens224 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

    Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT all — * lo 0.0.0.0/0 0.0.0.0/0
    3 180 ACCEPT all — * ens224 0.0.0.0/0 0.0.0.0/0
    37 9582 ACCEPT all — * ens192 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW

    Пните плиз в нужном направлении

  18. Дмитрий

    а как прописывать в строчке где айпи адрес, если получаем динамику?
    # Внешний интерфейс
    export WAN=eth0
    export WAN_IP=109.126.13.246???

    • Zerox

      Получается никак 🙂 Не нужно использовать ip адрес, настраивать все через имя интерфейса. Нужно будет немного изменить мой скрипт.

  19. Дмитрий

    Попрошу скрипт под динамику в студию))

    • Владимир

      Не нужно ничего изменять же. Переменная WAN_IP объявлена, но нигде не используется в скрипте, так что либо не трогать, либо закомментировать/удалить ее вовсе.

      За статью спасибо, прочитал с удовольствием.

  20. Алексей

    День добрый. Делал все по Вашему мануалу — базовая настройка работает. Спасибо. В linux новичек, не могу решить оставшиеся пару задач. А именно доступ из локалки наружу для определенного списка ip (остальные блокировать) и блок некоторых хостов. Точнее порядок правил в скрипте. С первым еще поковыряю ipset. А вот со вторым не понятно. Настройка ($IPT -A OUTPUT -d mamba.ru -j DROP) легла, но но шлюз и клиенты по прежнему имеют доступ.

    Chain INPUT (policy DROP 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT all — lo * 0.0.0.0/0 0.0.0.0/0
    613 58797 ACCEPT all — ens192 * 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
    0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
    58 8006 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    0 0 DROP all — * * 0.0.0.0/0 0.0.0.0/0 state INVALID
    0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00
    0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
    0 0 ACCEPT tcp — ens160 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

    Chain FORWARD (policy DROP 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    3416 1419K ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    0 0 DROP all — * * 0.0.0.0/0 0.0.0.0/0 state INVALID
    147 41433 ACCEPT all — ens192 ens160 0.0.0.0/0 0.0.0.0/0
    0 0 REJECT all — ens160 ens192 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

    Chain OUTPUT (policy DROP 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT all — * lo 0.0.0.0/0 0.0.0.0/0
    543 104K ACCEPT all — * ens192 0.0.0.0/0 0.0.0.0/0
    63 4878 ACCEPT all — * ens160 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    0 0 DROP all — * * 0.0.0.0/0 193.0.170.23
    0 0 DROP all — * * 0.0.0.0/0 193.0.170.24
    0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW

    • Алексей

      Разобрался. И для блока сайтов и для блока пользователей использовал ipset. Правило нужно было прописать выше всех ACCEPT в FORWARD. Скрипт не прокатил — выкидывал ошибку, правил ручками iptabels. Все работает спасибо.

  21. Михаил

    Добрый день. Делал все по вашему конфигу. Centos 6.10. iptables работает. Еще у меня несколько провайдеров настроено и соответственно маршрутизация между локалкой и ними, и, соответственно, несколько строчек с натом. Вопрос следующий. Периодически пропадает интернет, и появляется только после того как я с клиентского компа сделают tracert ya.ru. как только проден хоп со шлюзом центоса — пинги появляются, интернет тоже. Помогите с проблемой. В момент пропадания связи, в логах блочится всё и вся:
    kernel: —FW—BLOCKIN=eth0.1 OUT=eth0.201 SRC=192.168.1.178 DST=87.250.250.242 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=50941 PROTO=ICMP TYPE=8 CODE=0 ID=512 SEQ=51475

    kernel: —IN—BLOCKIN=eth0.1 OUT= MAC=00:14:c2:60:cf:49:08:00:27:13:04:a9:08:00 SRC=192.168.1.178 DST=192.168.1.16 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=50940 DF PROTO=TCP SPT=4874 DPT=3128 WINDOW=64240 RES=0x00 SYN URGP=0

    • Zerox

      Интересная ситуация. Я сталкивался с подобным, но не помню, как решал проблему. Было тоже что-то неведомое. Связь появлялась после пинга с какой-то стороны.

  22. Сергей

    Добрый день. У меня вопрос: не могу понять смысл правила блокировки правила «Закрываем доступ снаружи в локалку» ($IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT ), если в по умолчанию все равно все пакеты, не подошедшие под ни одно правило отбрасываются ($IPT -P FORWARD DROP), тем более, что оно и так стоит в конце всех правил в цепочке FORWARD. Я так понял, что оба эти действия имеют смысл «заглушки». Почему они применяются здесь одновременно?

  23. Сергей

    A теперь по-русски:
    Добрый день. У меня вопрос: не могу понять смысл правила «Закрываем доступ снаружи в локалку» ($IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT ), если по умолчанию все равно все пакеты, не подошедшие ни под одно правило отбрасываются ($IPT -P FORWARD DROP), тем более, что оно и так стоит в конце всех правил в цепочке FORWARD. Я так понял, что оба эти действия имеют смысл «заглушки». Почему они применяются здесь одновременно?

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

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.