Настройка linux-файрвола iptables: руководство для начинающих

Настройка хранения истории в bash_history

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

  1. По-умолчанию, сохраняются только последние 1000 команд. Если их будет больше, то более старые будут удаляться и заменяться новыми.
  2. Не указаны даты выполнения команд, только их список в порядке выполнения.
  3. Файл со списком команд обновляется после завершения сессии. При параллельных сессиях часть команд может быть утеряна.
  4. Сохраняются абсолютно все команды, хотя в хранении некоторых нет никакого смысла.

Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть. Для более удобного вывода списка, можно в консоли ввести команду:

# history

и увидеть пронумерованный список. Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:

# history | grep yum

Так мы увидим все варианты запуска команды yum, которые хранятся в истории. Исправим перечисленные недостатки стандартных настроек хранения истории команд в CentOS 7. Для этого нужно отредактировать файл .bashrc, который находится в том же каталоге, что и файл с историей. Добавляем в него следующие строки:

export HISTSIZE=10000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w:htop"

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

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

# source ~/.bashrc

Перечисление правил в виде таблицы

Перечисление правил Iptables в виде таблицы может быть полезным при сопоставлении разных правил друг с другом.

Чтобы вывести все действующие правила Iptables в виде таблицы, запустите команду с опцией :

Эта команда будет выводить все действующие правила, отсортированные по цепочкам.

Если вы хотите ограничить вывод конкретной цепочкой (, , и т. д.), вы можете указать название цепочки сразу после опции .

Давайте рассмотрим пример цепочки INPUT:

Первая строка вывода указывает имя цепочки (в данном случае ), за которым следует используемая по умолчанию политика (). Следующая строка состоит из заголовков каждого столбца таблицы, после чего идут правила цепочки. Давайте посмотрим, что означает каждый заголовок:

  • : если пакет отвечает правилу, заголовок target указывает, что с ним нужно сделать. Например, пакет можно принять, отклонить, записать или отправить другой цепочке для сопоставления с другими правилами.
  • : протокол, например , , или
  • : данный параметр используется редко и отображает опции IP
  • : исходный IP-адрес или подсеть трафика, либо (отовсюду)
  • : IP-адрес назначения или подсеть трафика, либо (везде)

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

Отображение счетчиков пакетов и общего размера

При выводе списка правил Iptables также можно отобразить количество пакетов и общий размер пакетов (в байтах), которые отвечают каждому конкретному правилу. Это часто может быть полезно, когда вы пытаетесь получить приблизительное представление о том, какие правила используются для различных пакетов. Чтобы сделать это, воспользуйтесь опциями и в одной команде.

Например, давайте снова рассмотрим цепочку с опцией :

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

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

Примеры настройки Iptables

Чтобы закрепить навыки настройки Iptables, рекомендуется протестировать утилиту в разных режимах. Например, отобразить список правил, очистить его, установить параметры по умолчанию или удалить их.

Список правил

Просмотр правил Iptables осуществляется командой:

$ iptables –L

Также есть возможность указать нужную цепочку, например:

$ iptables -L INPUT

Очистка правил

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

$ sudo iptables –F

Если речь идет об определенной цепочке, то она будет выглядеть иначе:

$ sudo iptables -F Input

Перечисленные действия выполняются для таблицы filter, которая подключена изначально.

Правила «по умолчанию»

Задаются правила «по умолчанию» вручную. Пример команд:

$ sudo iptables -p INPUT ACCEPT

$ sudo iptables -p OUTPUT ACCEPT

$ sudo iptables -p FORWARD DROP

Здесь мы разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.

Блокировка пакетов

Заблокировать пакеты можно действием DROP. Оно позволяет включать фильтрацию по разным признакам вроде IP-адреса, маске сети, порту и пр.

Пример:

$ sudo iptables -A INPUT -s 20.20.20.20 -j DROP

Блокируются входящие пакеты на IP 20.20.20.20.

$ sudo iptables -A OUTPUT -s 20.20.20.20 -j DROP

Теперь мы заблокировали пакеты, исходящие на IP 20.20.20.20.

Есть возможность указать маску сети, например, 20.20.20.0/255. Тогда правила будут применяться ко всем IP, входящим в указанный диапазон. Если же требуется заблокировать подключение строго по определенному протоколу, вводится команда:

$ sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Она блокирует все входящие соединения по SSH.

Удаление правил

При удалении правил в Iptables вводится команда с опцией -D. Но перед этим может понадобиться просмотреть перечень правил:

$ sudo iptables -L

Пример удаления правила:

$ sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Если требуется полное удаление правил, применяется команда:

$ sudo iptables –F

Сохранение правила Iptables

Теперь остается опробовать режим сохранения правил

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

В Ubuntu процесс требует ввода команды:

$ sudo /sbin/iptables-save

Для операционных систем на ядре Red Hat и CentOS она выглядит иначе:

$ sudo /sbin/service iptables save

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

Начальная настройка CentOS 7

Итак, у нас имеется:
# uname -a 
Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Первым делом обновим базовую систему:

# yum update

Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:

# yum install mc

И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntaxсинтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл unknown.syntax. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса.

# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax

Дальше нам пригодятся сетевые утилиты. В минимальной настройке вы будете удивлены, когда наберете команду:

# ifconfig

И увидите ответ:

-bash: ifconfig: command not found

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

Вместо ifconfig в CentOS 7 теперь утилита ip. Я не понимаю, зачем пилить отдельные программы для управления сетевыми настройками, если ifconfig и так отлично справляется с задачей. К тому же мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это неудобно. Так что предлагаю установить привычный ifconfig.

Сделаем это:

# yum install net-tools

Теперь, чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет bind-utils. Если этого не сделать, то на команду:

# nslookup

Будет вывод:

-bash: nslookup: command not found

Так что устанавливаем bind-utils:

# yum install bind-utils

Отключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:

# mcedit /etc/sysconfig/selinux

меняем значение SELINUX=disabled Чтобы изменения вступили в силу, перезагружаемся:

# reboot

Можно без перезагрузки применить отключение SElinux:

# setenforce 

Управление зонами

Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если мы захотим для разных сетевых адаптеров сделать разные по строгости правила.

Посмотреть список всех имеющихся зон:

firewall-cmd —list-all-zones

Посмотреть список используемых зон:

firewall-cmd —get-active-zones

Информация о конкретной зоне:

firewall-cmd —list-all —zone=public

Создать правило для зоны public:

firewall-cmd —permanent —zone=public —add-port=80/tcp

Добавить сетевой интерфейс в зону:

firewall-cmd —permanent —zone=public —remove-interface=ens34

firewall-cmd —permanent —zone=internal —add-interface=ens34

* сначала нужно удалить адаптер из текущей зоны. 

Задать действие по умолчанию для зоны:

firewall-cmd —permanent —zone=public —set-target=DROP

Создать новую зону:

firewall-cmd —permanent —new-zone=custom_zone

firewall-cmd —reload

* чтобы система увидела новую зону custom_zone, команда reload обязательная.

Установка и базовая настройка

Устанавливаем прокси-сервер следующей командой:

apt-get install squid

Открываем на редактирование конфигурационный файл:

vi /etc/squid/squid.conf

Если сеть клиентских компьютеров отличается от стандартной (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необходимо ее добавить в acl, например:

#  TAG: acl

acl localnet src 217.66.157.0/24

или через файл:

#  TAG: acl

acl localnet src «/etc/squid/acl_localnet»

* кавычки обязательны
** после необходимо создать файл /etc/squid/acl_localnet и с каждой строчки перечислить разрешенные IP-адреса.

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

#  TAG: acl

#acl localnet src 0.0.0.1-0.255.255.255
#acl localnet src 10.0.0.0/8
#acl localnet src 100.64.0.0/10
#acl localnet src 169.254.0.0/16
#acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
#acl localnet src fc00::/7
#acl localnet src fe80::/10

* в данном примере мы оставили только подсеть 192.168.0.0/16.

Разрешаем доступ для локальных сетей, которые заданы опцией acl localnet:

#  TAG: http_access

http_access allow localnet

* данную опцию нужно либо раскомментировать, либо вставить выше опции http_access deny all.

Настраиваем директорию для кэша:

#  TAG: cache_dir

cache_dir ufs /var/spool/squid 4096 32 256

* где ufs — файловая система (ufs для SQUID является самой подходящей); /var/spool/squid — директория хранения кэша; 4096 — объем пространства в мегабайтах, которое будет выделено под кэш; 32 — количество каталогов первого уровня, которое будет создано для размещение кэша; 256 — количество каталогов второго уровня, которое будет создано для размещение кэша.

Останавливаем squid:

systemctl stop squid

Создаем структуру папок под кэш следующей командой:

squid -z

Запускаем squid и разрешаем его автозапуск:

systemctl enable squid —now

Добавление репозиториев

Для инсталляции различного софта необходимо подключить репозитории в CentOS. Наиболее популярные это EPEL и rpmforge, поэтому добавим их. Сначала ставим EPEL. С ним все просто, он добавляется из стандартного репозитория:

# yum install epel-release

Устанавливаем rpmforge:

# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
# yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

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

# yum install http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

По последним данным, репозиторий rpmforge закрыт и больше не поддерживается https://github.com/repoforge/rpms/issues/375 https://wiki.centos.org/AdditionalResources/Repositories/RPMForge

Сброс счетчиков пакетов и общего размера

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

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

Чтобы очистить счетчики для всех правил конкретной цепочки, используйте опцию и укажите название цепочки. Например, для очистки счетчиков цепочки INPUT воспользуйтесь следующей командой:

Если вы хотите очистить счетчики для конкретного правила, укажите имя цепочки и номер правила. Например, для обнуления счетчиков первого правила в цепочке INPUT запустите следующую команду:

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

Selecting Zones for your Interfaces

Unless you have configured your network interfaces otherwise, each interface will be put in the default zone when the firewall is booted.

Changing the Zone of an Interface

You can transition an interface between zones during a session by using the parameter in combination with the parameter. As with all commands that modify the firewall, you will need to use .

For instance, we can transition our interface to the “home” zone by typing this:

Note: Whenever you are transitioning an interface to a new zone, be aware that you are probably modifying the services that will be operational. For instance, here we are moving to the “home” zone, which has SSH available. This means that our connection shouldn’t drop. Some other zones do not have SSH enabled by default and if your connection is dropped while using one of these zones, you could find yourself unable to log back in.

We can verify that this was successful by asking for the active zones again:

Adjusting the Default Zone

If all of your interfaces can best be handled by a single zone, it’s probably easier to select the best default zone and then use that for your configuration.

You can change the default zone with the parameter. This will immediately change any interface that had fallen back on the default to the new zone:

Подключитесь к компьютеру с помощью подключения к удаленному рабочему столу

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

Подключение из Windows

Чтобы подключиться к серверу из Microsoft Windows, просто найдите и запустите приложение Remote Desktop Connection (mstsc.exe) и введите свое имя хоста или IP:


Скриншот №4. Remote Desktop Connection

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


Скриншот №5. Предупреждения безопасности

191028
Санкт-Петербург
Литейный пр., д. 26, Лит. А

+7 (812) 403-06-99

700
300

ООО «ИТГЛОБАЛКОМ ЛАБС»

700
300

Активные правила брандмауэра

Прежде чем вносить изменения, разберемся с тем, какие правила и какую среду предоставляет служба по-умолчанию.

Правила брандмауэра по умолчанию

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

firewall-cmd --get-default-zone

Ответ:

public

Так как на данный момент FirewallD не получал никаких инструкций относительно других зон, кроме того, к другим зонам не привязан ни один интерфейс, то сейчас зона public является зоной по умолчанию, а также единственной «активной» зоной (той зоной, которая контролирует трафик интерфейсов). Проверим это:

firewall-cmd --get-active-zones

Ответ:

public
  interfaces: eth0 eth1

Мы видим, что наш сервер имеет два сетевых интерфейса: и . Они оба управляются в соответствии с правилами, заданными для зоны public.

Чтобы узнать правила этой зоны, введите:

sudo firewall-cmd --list-all

Ответ:

public (default, active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Теперь нам известно, что зона public является зоной по умолчанию и к ней привязаны интерфейсы и . Можно видеть, что в этой зоне предусмотрены обычные операции, связанные с DHCP-клиентом (для назначения IP-адресов) и SSH (для удаленного администрирования).

12. Как заблокировать Firewalld в Linux CentOS и Ubuntu

Шаг 1 Это отключено по умолчанию, но мы можем управлять им с помощью следующих команд:

 sudo firewall-cmd - блокировка-вкл (включить) sudo firewall-cmd - блокировка-выкл (отключить) 

Шаг 2 Другой способ управлять этой опцией более безопасным способом — это сделать это из базового файла конфигурации, потому что firewall-cmd не всегда существует. Поэтому мы выполняем следующее:

 sudo nano /etc/firewalld/firewalld.conf 

Шаг 3 Здесь мы должны найти строку Lockdown = no и передать ее статус в Lockdown = yes.

Шаг 4 Теперь вам просто нужно сохранить изменения и выйти с этими ключами: Мы сохраняем изменения, используя следующую комбинацию клавиш:

Ctrl + O

Мы покидаем редактор, используя:

Ctrl + X

Проброс портов (Port Forwarding)

Необходим для перенаправление сетевых запросов на сервер, стоящий за NAT и не имеющий прямого выхода во внешнюю сеть. Настройки отличаются в зависимости от способа управления брандмауэром netfilter.

Firewalld

firewall-cmd —zone=external —permanent —add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15

* где 25 — прослушиваемый внешний порт, для которого сработает перенаправление; tcp — используемый транспортный протокол; 8025 — на какой порт перенаправить запрос; 192.168.0.15 — IP-адрес сервера, на который отправляем запросы.
* также обратите внимание, что в команде мы используем зону external, но в вашей среде она может и не использоваться. Посмотреть список активных зон можно командой firewall-cmd —get-active-zones

Разрешаем сам порт:

firewall-cmd —permanent —zone=external —add-port=25/tcp

Чтобы правило вступило в силу:

firewall-cmd —reload

Iptables

Настройка выполняется двумя командами и двумя спомобами.

а) Способ 1:

iptables -t nat -I PREROUTING -p tcp -m tcp -d 10.8.232.111 —dport 25 -j DNAT —to-destination 192.168.0.15:8025

iptables -t nat -I POSTROUTING -p tcp -m tcp -s 192.168.0.15 —sport 8025 -j SNAT —to-source 10.8.232.111:25

б) Способ 2:

iptables -t nat -I PREROUTING -p tcp -i eth0 —dport 25 -j DNAT —to-destination 192.168.0.15:8025

iptables -I FORWARD -p tcp -d 192.168.0.15 —dport 8025 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth0 — внешний сетевой интерфейс.

Разрешаем порт:

iptables -I INPUT 1 -p tcp —dport 8025 -j ACCEPT

* обратите внимание, что мы разрешаем порт, на который переводим запрос, так как цепочки POSTROUTING и PREROUTING работают до цепочки FILTER, а потому открывать нужно не входящий порт (25), а тот, на который назначается пакет (8025). Не забываем сохранить правила:

Не забываем сохранить правила:

service iptables save

Зоны Firewalld

Если вы не изменили его, зона по умолчанию будет , и все сетевые интерфейсы назначены этой зоне.

Зона по умолчанию — это зона, которая используется для всего, что явно не назначено другой зоне.

Вы можете увидеть зону по умолчанию, набрав:

Чтобы получить список всех доступных зон, введите:

Чтобы увидеть активные зоны и назначенные им сетевые интерфейсы:

Выходные данные ниже показывают, что интерфейсы и назначены зоне:

Вы можете распечатать настройки конфигурации зоны с помощью:

Из выходных данных выше мы видим, что публичная зона активна и использует цель по умолчанию — . Выходные данные также показывают, что зона используется интерфейсами и и разрешает DHCP-клиент и трафик SSH.

Если вы хотите проверить конфигурации всех доступных типов зон:

Команда выводит на печать огромный список с настройками всех доступных зон.

Изменение цели зоны

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

Чтобы установить цель зоны, укажите зону с параметром и цель с параметром .

Например, чтобы изменить цель зоны на вы должны запустить:

Назначение интерфейса другой зоне

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

Чтобы назначить интерфейс другой зоне, укажите зону с параметром и интерфейс с параметром .

Например, следующая команда назначает интерфейс зоне:

Проверьте изменения, набрав:

Изменение зоны по умолчанию

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

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

Проверьте изменения с помощью:

Создание новых зон

Firewalld также позволяет создавать свои собственные зоны. Это удобно, когда вы хотите создать правила для каждого приложения.

В следующем примере мы создадим новую зону с именем , откроем порт и разрешим доступ только с IP-адреса :

  1. Создайте зону:

  2. Добавьте правила в зону:

  3. Перезагрузите демон firewalld, чтобы изменения вступили в силу:

Примеры команд

Рассмотрим отдельно примеры работы с FreeIPA посредством командной строки.

Работа с группами

1. Создание группы безопасности:

ipa group-add —desc=’Group for managers departmen’ managers

* создаем группу безопасности managers.

2. Добавить пользователя в группу:

ipa group-add-member managers —users=user1,user2,user3

* добавим в группу managers пользователей user1, user2 и user3.

3. Переименовать группу:

ipa group-mod —rename=<новое имя> <старое имя>

Например:

ipa group-mod —rename=admins users

* в данном примере мы переименуем группу users в группу admins.

Работа с сертификатами

1. Выпустить сертификат для компьютера (выполняется на компьютере, который присоединен к freeipa):

ipa-getcert request -k /etc/pki/tls/certs/freeipa.key -f /etc/pki/tls/certs/freeipa.crt -r

* в данном примере будет сформирован запрос на получение сертификата и сохранен в каталог /etc/pki/tls/certs.

2. Посмотреть список запросов на сертификат с узла можно командой:

ipa-getcert list

3. Удалить запрос можно командой:

ipa-getcert stop-tracking -i <идентификатор>

Например:

ipa-getcert stop-tracking -i openvpn

4. Обновить сертификат:

ipa-getcert resubmit —id=»20210923072007″

* где 20210923072007 — идентификатор запроса, который можно посмотреть командой ipa-getcert list.

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

Для защиты сервера от внешних угроз нужно настроить разрешения для входящего и исходящего трафика. Используем для этого iptables. Он запущен по умолчанию. Проверим текущие правила командой

iptables -L -v -n

В CentOS 7 для управления межсетевым экраном появилась новая утилита —  firewalld. По сути, это надстройка над iptables. Ее можно отключить и воспользоваться файлом с правилами. 

Отключаем firewalld:

systemctl stop firewalld

systemctl disable firewalld

Ставим утилиты для iptables:

yum install iptables-services

Включаем автозапуск:

systemctl enable iptables

Создаем новый файл /etc/iptables.sh и добавляем в него следующие правила:

#!/bin/bash

#

export IPT="iptables"

export WAN=eth0

export WAN_IP=147.15.218.72


$IPT -F

$IPT -F -t nat

$IPT -F -t mangle

$IPT -X

$IPT -t nat -X

$IPT -t mangle -X


$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD DROP


$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT


$IPT -A OUTPUT -o $WAN -j ACCEPT


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

$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT


$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


$IPT -A INPUT -m state --state INVALID -j DROP

$IPT -A FORWARD -m state --state INVALID -j DROP


$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP


$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT


$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT

$IPT -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT

$IPT -N undef_in

$IPT -N undef_out

$IPT -N undef_fw

$IPT -A INPUT -j undef_in

$IPT -A OUTPUT -j undef_out

$IPT -A FORWARD -j undef_fw

$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "

$IPT -A undef_in -j DROP

$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "

$IPT -A undef_out -j DROP

$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "

$IPT -A undef_fw -j DROP

/sbin/iptables-save  > /etc/sysconfig/iptables

Это один из вариантов самописного скрипта для файрвола CentOS, который сделает использование системы на сервере более безопасным.

Затем делаем файл со скриптом исполняемым:

 chmod 0740 /etc/iptables.sh

/etc/iptables.sh

Проверяем, что правила теперь применяются:

iptables -L -v -n
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: