Сообщение об ошибке

  • Deprecated function: Function create_function() is deprecated в функции _geshifilter_prepare() (строка 126 в файле /var/www/lsoft/sites/all/modules/geshifilter/geshifilter.pages.inc).
  • Deprecated function: Function create_function() is deprecated в функции _geshifilter_prepare() (строка 131 в файле /var/www/lsoft/sites/all/modules/geshifilter/geshifilter.pages.inc).
  • Deprecated function: Function create_function() is deprecated в функции _geshifilter_process() (строка 231 в файле /var/www/lsoft/sites/all/modules/geshifilter/geshifilter.pages.inc).

Настройка iptables

test

Десктопная и серверная настройка IPTABLES

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

Я опишу две части, одна из них касается серверной настройки, вторая десктопной.

Начнем с десктопной. В отличии от большинства брендмауэров, iptables позволяет задавать правила по состоянию соединения. Таких состояний три: NEW, ESTABLISHED, RELATED.

NEW - установка соединения.

ESTABLISHED - соединение установлено.

RELATED - установка соединения исходя из уже существующего установленного соединения.

Так же в правилах используются три таблицы цепочек, INPUT, OUTPUT, FORWARD.

INPUT - входящие на компьютер пакеты/соединения.

OUTPUT - соответственно исходящие с компьютера пакеты/соединения.

FORWARD - цепочка для пробрасывания пакетов через машину не обрабатываясь ей. Используется зачастую вместе с настройкой подсистемой ядра sysctl forwarding для создания шлюза.

Что мы можем сделать с пакетами/соединениями?

ACCEPT - принять/пропустить.

DROP - сбросить(проигнорировать и забыть о пакетах/соединениях)

REJECT - отказать(при этом часть ресурсов машины используется для отправки ответа на удаленную машину о том что пакет был отброшен.

В общем-то вот как выглядят правила для десктопной машины:

iptables -F
iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP
iptables -A OUTPUT -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
А теперь обясню по строкам:

1) обнуляем все правила фаерволла заданные ранее.

2) Отбрасываем все инициирующие установку соединение входящие пакеты и пакеты с неправильными заголовками на интерфейсе eth0

3) Разрешаем любые исходящие соединения на интерфейсе eth0

Вот и все что нужно для десктопа.

Для сервера все несколько сложнее, нужно учесть какие порты для входящих соединений должны быть открыты.Если к примеру запустить правила и не указать что порт для SSH должен быть доступен извне сервера, а делаете все это на удаленном сервере, будет не приятно. В любом случае во избежании казусов нам стоит позаботиться об основных первых 1024 портах, выбрать нужный порты и явно указать что их открываем. Все остальное закрыть.

iptables -F

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -i lo -o lo -j ACCEPT
iptables -A INPUT -i eth0 -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o eth0 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
#Все выше накосяченные строки касались петли. На удивление без FORWARD локального

#интерфейса машина начинала подтормаживать,

#что сказывалось на производительности сервера и вообще было не нормально


iptables -A INPUT -p ICMP -j ACCEPT
iptables -A OUTPUT -p ICMP -j ACCEPT
#Разрешили входящие и исходящие ICMP пакеты(ping, traceroute, etc)


#SSH
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 22 -j ACCEPT

#DNS
iptables -A INPUT -p tcp -i eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --sport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

#SMTP
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 25 -j ACCEPT

#FTP
iptables -A INPUT -p tcp -i eth0 --dport 21 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 21 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 21 -j ACCEPT
#FTP-Passive
iptables -A INPUT -p tcp -i eth0 --dport 20 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 20 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 1024:60000 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 1024:60000 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 1024:60000 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 1024:60000 -j ACCEPT
#Для передачи данных фтп использует порты свыше 1024(не системные)


#HTTP/HTTPS
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 443 -j ACCEPT

#SVN
iptables -A INPUT -p tcp -i eth0 --dport 3690 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 3690 -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --sport 3690 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --sport 3690 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 3690 -j ACCEPT

#DROP ALL
iptables -A INPUT -j DROP

#Все остальное дропаем.

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

-A - добавить в таблицу.

-p udp, -p tcp, -p icmp - используемый протокол

--dport - порт назначения

--sport - порт с которого инициировано соединение

На этом все.

Категория: 

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!