Iptables в CentOS 7 (Linux). Что это. Настройка

Iptables  — это фаервол в ОС семейства Linux.

Управление фаерволом iptables

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

yum -y install iptables-services

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

systemctl start iptables.service
systemctl enable iptables.service

Редактирование iptables. Внесение правил

Для внесения правил можно либо изменять непосредственно сам оригинальный файл iptables, либо создать для него отдельный новый файл — скрипт, который будет ДОПИСЫВАТЬ в него нужные правила. Таким образом удобно переносить свои настройки с сервера на сервер.

Способ 1. Редактирование самого файла (не рекомендую)

В CentOS 7 конфиг фаервола iptables находится в папке /etc/sysconfig/

Отредактировать его можно командой:

vi /etc/sysconfig/iptables

И добавляем правила, которые нам нужны.

Например, для nginx, который работает на 80 порту, можно добавить правило:

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Сохраняем файл.

Перезапускаем фаервол:

systemctl restart iptables

Способ 2. Создание доп. скрипта (рекомендую)

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

Создаем его прямо в папке /etc/ с названием iptables_my выполнив команду:

mcedit /etc/iptables_my.sh

где .sh — это расширение файла, указывающее на то, что это скрипт.

Важно! После каждого редактирования этого скрипта, его нужно запускать каждый раз, чтобы он выполнился и ПЕРЕЗАПИСАЛ изменения.

Вносим нужные правила (о них чуть ниже).

Сохраняем.

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

chmod 0740 /etc/iptables_my.sh

Запускаем скрипт:

/etc/iptables_my.sh

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

iptables -L -v -n

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

Содержание файла-скрипта для iptables

#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=99.99.99.99(ip адрес своего сервера)

# Очистка всех цепочек iptables
$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

# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$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

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$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

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем порт для DNS
#$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Открываем порт для NTP
#$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT
#Открываем порт для NGINX
$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT
#Открываем порт для Apache(httpd)
$IPT -A INPUT -i $WAN -p tcp --dport 8080 -j ACCEPT

# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef

$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

# Логируем все из undef

$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

Взято с сайта https://serveradmin.ru/centos-7-nastroyka-servera/

Открываем порт для NGINX (как пример)

В нашем скрипте находим такую строку:

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

И по аналогии вставляем ниже нее нужную нам строчку:

# Открываем порт для nginx
$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT

После этого снова запускаем скрипт, чтобы он перезаписал правила!

/etc/iptables_my.sh

 

2840cookie-checkIptables в CentOS 7 (Linux). Что это. Настройка
Оцените статью
Техдокументация вебмастера
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
5 лет назад

export WAN_IP=149.154.71.205
Что это за IP адрес? Я же не должен копировать именно его? У меня должен быть свой. Это IP сайта что ли?