Базовая настройка iptables, для начинающих
Что такое iptables, как работает и много других полезных вещей можно узнать из шикарной статьи из Wikipedia http://ru.wikipedia.org/wiki/Iptables.
Рассмотрим базовые правила настройки iptables применимо к любому дистрибутиву Linux.
Далее под катом
Удаляем все правила(rule) в цепочках
iptables -F
Удаляем пользователи цепочки(chain).
iptables -X
Сбрасывает счетчики
iptables -Z
Политики по умолчанию.
Блокируем весь трафик.(будьте осторожны если вы работаете удалено на сервере, нужно убедиться что есть разрешающее правило для вашего удаленного клиента.)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Пользовательские правила.
Разрешаем локальный трафик.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Разрешаем трафик для соединений со статусом ESTABLISHED(установленные соединения) и RELATED(связанные с уже с установленными соединениями)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Уничтожаем все пакеты со статусом INVALID
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
Правила для входящих соединений
Разрешаем входящие соединения по ssh с любого ip адреса.
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Для ограничения по ip адресам после INPUT необходимо добавить опцию -s адрес источника.
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Для ограничения по интерфейсу добавим опцию -i интерфейс
iptables -A INPUT -i eht1 192.168.1.0/24 -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Правило читается - разрешить входящие соединения с интерфейса(сетевой карты) eth1 с ip адресов 192.168.1.1-192.168.1.255 по протоколу tcp на 22 порт со статусом NEW(т.е данное правило будет срабатывать только для новых соединений).
Правила для исходящих соединений.
iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
Журнал
В журнале будут фиксироваться пакеты которые были заблокированы.
iptables -A INPUT -j LOG --log-level DEBUG --log-prefix '[FW INPUT]: '
iptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]: '
Итоговый скрипт
Далее читаем
iptables добавить правила в автозагрузку.
iptables как узнать какой порт заблокирован debug log
iptables NAT
logcheck держим руку на пульсе. Установка в Debian. Аудит журналов Linux.
Рассмотрим базовые правила настройки iptables применимо к любому дистрибутиву Linux.
Далее под катом
Удаляем все правила(rule) в цепочках
iptables -F
Удаляем пользователи цепочки(chain).
iptables -X
Сбрасывает счетчики
iptables -Z
Политики по умолчанию.
Блокируем весь трафик.(будьте осторожны если вы работаете удалено на сервере, нужно убедиться что есть разрешающее правило для вашего удаленного клиента.)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Пользовательские правила.
Разрешаем локальный трафик.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Разрешаем трафик для соединений со статусом ESTABLISHED(установленные соединения) и RELATED(связанные с уже с установленными соединениями)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Уничтожаем все пакеты со статусом INVALID
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
Правила для входящих соединений
Разрешаем входящие соединения по ssh с любого ip адреса.
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Для ограничения по ip адресам после INPUT необходимо добавить опцию -s адрес источника.
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Для ограничения по интерфейсу добавим опцию -i интерфейс
iptables -A INPUT -i eht1 192.168.1.0/24 -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Правило читается - разрешить входящие соединения с интерфейса(сетевой карты) eth1 с ip адресов 192.168.1.1-192.168.1.255 по протоколу tcp на 22 порт со статусом NEW(т.е данное правило будет срабатывать только для новых соединений).
Правила для исходящих соединений.
iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
Журнал
В журнале будут фиксироваться пакеты которые были заблокированы.
iptables -A INPUT -j LOG --log-level DEBUG --log-prefix '[FW INPUT]: '
iptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]: '
Итоговый скрипт
#!/bin/sh PATH='/sbin' ## INIT # Flush previous rules, delete chains and reset counters iptables -F iptables -X iptables -Z # Default policies iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Enable loopback traffic iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Enable statefull rules (after that, only need to allow NEW conections) iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Drop invalid state packets iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP ## INPUT # Incoming ssh from the iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT ## OUTPUT # Enable al outgoing traffic to internet #ptables -A OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT ## FORWARD ## LOGGING iptables -A INPUT -j LOG --log-level DEBUG --log-prefix '[FW INPUT]: ' iptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]: '
Далее читаем
iptables добавить правила в автозагрузку.
iptables как узнать какой порт заблокирован debug log
iptables NAT
logcheck держим руку на пульсе. Установка в Debian. Аудит журналов Linux.
Разрешаем локальный трафик.
ОтветитьУдалитьiptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEP
-----------------------------------
эти правила разрешают траффик хоста, для локалки нужно указать адрес подсети
Для "локалки" нужно применять другой алгоритм фильтрации.
ОтветитьУдалитьДанные правила относятся именно к локальному траффику.
У меня есть некоторые замечания по исппользованию -m conntrack.
ОтветитьУдалить-m conntrack" в iptables используется для проверки состояния соединения (connection tracking)
Использование "conntrack" модуля для проверки невалидных пакетов не имеет смысла. В iptables, состояние "INVALID" относится к пакетам, которые не могут быть корректно отслежены или идентифицированы относительно текущего состояния соединения.