Максуд

Помогите допилить iptables для безопасности

Рекомендуемые сообщения

Форумчане, кто знает ли достаточно Iptables, что бы подсказать мне? Хочу вас попросить покритиковать правила для iptables, которые я применяю на одном из серверов под управлением Debian.

Спойлер

iptables -F

#Запрещено всё, что не разрешено ниже

iptables -P INPUT DROP

#Разрешаем с интернета в сеть

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.1/24 -j MASQUERADE iptables -t nat -P POSTROUTING ACCEPT

#Не будем принимать всё подряд на внешнюю сетевую карту

iptables -A FORWARD -o eth0 -p tcp -j DROP

#Блокирование нулевых и "разведовательных" пакетов

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

#А на внутреннюю что дойдёт

iptables -A INPUT -i lo -j ACCEPT

#Открываем порты

iptables -t filter -A INPUT -i eth1 -d 192.168.0.1 -p tcp -m tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -m multiport --destination-ports 80,443 -j ACCEPT

#исходящие подключения

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

М?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня было много серверов на Дебиане, которые стояли в инете с белым IP прямо на сетевой карте eth0.

Зачем заморачиваться ?

INPUT, OUTPIT, FORWARD, POSTROUTING (а ещё есть PREROUTING) - и в кажой цепочке

городить один и тот же набор правил, зачем ?

 

Вот есть у меня сервис, который должен быть недоступен снаружи,

а только для внутренних VPN-пользователей, например прокси polipo на порту 8123,

вот я его закрываю конкретным правилом:

 

iptables -A INPUT -p tcp --dport 8123 -i eth0 -j DROP

 

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

по разным типам VPN, но все входят в один пул внутренних VPN-адресов,

вот я им делаю раздачу через NAT:

 

iptables -t nat -A POSTROUTING -s 172.16.0.0/12 -o eth0 -j SNAT --to-source $MY_SERVER_IP

 

Всё.

 

Что ещё ?

 

Боишься что будут перебирать пароли на SSH ? Ставь denyhosts

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, ░▒▓▒░ сказал:

Вот есть у меня сервис, который должен быть недоступен снаружи,

а только для внутренних VPN-пользователей, например прокси polipo на порту 8123,

вот я его закрываю конкретным правилом:

 

iptables -A INPUT -p tcp --dport 8123 -i eth0 -j DROP

 

А не лучше запретить все и разрешать только то что нужно?

Изменено пользователем tolstyk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пусть тебе так твой провайдер сделает.

А разрешать общаться с каждым конкретным внешним хостом/портом - только по письменному заявлению.

 

:fu:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 07.06.2017 в 11:23, Максуд сказал:

Форумчане, кто знает ли достаточно Iptables, что бы подсказать мне? Хочу вас попросить покритиковать правила для iptables, которые я применяю на одном из серверов под управлением Debian.

М?

 

Вот еще несколько интересных правил для файрвола:

 

Спойлер

-N FIREWALL0
-N FIREWALL
# Ограничение подключений с одного клиента

-A FIREWALL -p tcp --syn -m connlimit --connlimit-above 32
#
Минус ошибочные пакеты
-A FIREWALL0 -m state --state INVALID -j DROP
# Минус входящие по TCP не через SYN
-A FIREWALL -m state --state NEW -p tcp ! --syn -j DROP
#
Защита от спуфинга
-A FIREWALL -m state --state NEW -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
#
Защита от флуда
-A FIREWALL -p tcp --syn -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL -p udp -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL -p icmp -m limit --limit 10/s --limit-burst 50 -j ACCEPT

-A FIREWALL -j DROP
# Защита от сканирования портов

-A FIREWALL0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
Защита от Ping of death
-A FIREWALL0 -p icmp --icmp-type echo-request -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL0 -p icmp --icmp-type echo-request -j DROP
#
Черный список по IP
-A FIREWALL0 -s 10.10.10.10 -p tcp --dport 80 -j DROP

-A INPUT -j FIREWALL0
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j FIREWALL

 

И эту сточку я бы для ускорения поставил как у меня в примере:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

А открытие портов вот так, соответственно должно быть ниже предыдущего:

iptables -t filter -A INPUT -i eth1 -d 192.168.0.1 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp -m multiport --destination-ports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT

 

Я так понимаю это веб-сервер на который заходят и извне и из сети?

Изменено пользователем tolstyk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правила очень интересные.

Только в них чёрт ногу сломит.

Не просто ведь так по дефолту во всех политиках всех цепочек стоит разрешение.

Ну есть у вас ssh, есть web, но зачем запрещать порты, на которых у вас никто ничего не слушает ?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Форвард из сети в инет у ТС-а же полностью разрешен. Да и обратно в сеть тоже. И исходящие с сервака разрешены (вот насчет всех исходящих с сервака и сети я согласен, что должны быть открыто всё, а потом резать по необходимости). А про входящие на сервер это уже зависит от загруженности сервера, доверия к внешней сети и паранои админа. :) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ух ты, ни как не ожидал продолжения, что то из комментариев для себя пояснил. Особенно про нечего закрывать чего и так нет. Я не могу понять как играет роль очерёдность правил. Команда --list мне выдаёт, что:

Спойлер

root@Shluz1:/etc/network# iptables --list
Chain INPUT (policy DROP)
target     prot opt source          destination
DROP       tcp  --  anywhere        anywhere         tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere        anywhere         tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
ACCEPT     all  --  anywhere        anywhere
ACCEPT     tcp  --  anywhere        192.168.0.1      tcp dpt:ssh
ACCEPT     tcp  --  anywhere        anywhere         multiport dports http,https
ACCEPT     all  --  anywhere        anywhere         state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

после drop сначала идёт ACCEPT всего -- anywhere anywhere, а только потом разрешение явно указывающего правила. Не могу понять где это у меня в правилах ACCEPT всего?

 

Цитата

Я так понимаю это веб-сервер на который заходят и извне и из сети?

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

И эта строка с правилом

Цитата

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

у меня присутствует.

Изменено пользователем Максуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
45 минут назад, Максуд сказал:

Особенно про нечего закрывать чего и так нет.

Принято закрывать потому что может появиться. Или активно по пятницам, после двух.

https://habrahabr.ru/post/213973/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
55 минут назад, Максуд сказал:

 

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

FW-IDS-iptables-Flowchart-2014-09-25.png

 

 

 

Позже еще гляну, может какие-нибудь идеи будут.

Изменено пользователем tolstyk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
54 минуты назад, Максуд сказал:

после drop сначала идёт ACCEPT всего -- anywhere anywhere, а только потом разрешение явно указывающего правила. Не могу понять где это у меня в правилах ACCEPT всего?

Видимо это

#А на внутреннюю что дойдёт

iptables -A INPUT -i lo -j ACCEPT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Цитата

По умолчанию все разрешено.

Хотя всё запрещено

iptables -P INPUT DROP

во всех цепочках и это правило я ставлю в конец.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Максуд сказал:

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

Хотя всё запрещено


iptables -P INPUT DROP

во всех цепочках и это правило я ставлю в конец.

Как видим iptables --list не выводит названий интерфейсов к которому правило применяется, отсюда и путаница.

 

iptables -P INPUT DROP это только для цепочки INPUT, т.е. для всех входящих только на этот сервер на все интерфейсы, и выполняется после всех остальных в INPUT.

 

Еще форвард запрещен, если в файле /proc/sys/net/ipv4/ip_forward ноль стоит, а стоит он там по умолчанию.

 

Ну и цепочка OUTPUT разрешена по умолчанию на всё.

 

Т.е. работаем только INPUT и POSTROUTING.

 

Кстати, чтобы извне никто не заходил на веб-сервер в iptables -A INPUT -p tcp -m multiport --destination-ports 80,443 -j ACCEPT  нужно внутренний интерфейс добавить. Я же правильно понял eth0 смотрит в интернет, eth1 в локалку.

 

Могу в чем-то ошибаться, я просто любитель. :)

Изменено пользователем tolstyk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 15.06.2017 в 19:51, tolstyk сказал:

 

  Показать контент

-N FIREWALL0
-N FIREWALL
# Ограничение подключений с одного клиента

-A FIREWALL -p tcp --syn -m connlimit --connlimit-above 32
#
Минус ошибочные пакеты
-A FIREWALL0 -m state --state INVALID -j DROP
# Минус входящие по TCP не через SYN
-A FIREWALL -m state --state NEW -p tcp ! --syn -j DROP
#
Защита от спуфинга
-A FIREWALL -m state --state NEW -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
#
Защита от флуда
-A FIREWALL -p tcp --syn -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL -p udp -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL -p icmp -m limit --limit 10/s --limit-burst 50 -j ACCEPT

-A FIREWALL -j DROP
# Защита от сканирования портов

-A FIREWALL0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
Защита от Ping of death
-A FIREWALL0 -p icmp --icmp-type echo-request -m limit --limit 10/s --limit-burst 50 -j ACCEPT
-A FIREWALL0 -p icmp --icmp-type echo-request -j DROP
#
Черный список по IP
-A FIREWALL0 -s 10.10.10.10 -p tcp --dport 80 -j DROP

-A INPUT -j FIREWALL0
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j FIREWALL

 

 

     Решил тут Юникс вспомнить, оказалось, что приведенный мной ранее фаер дырявый. Лечиться заменой всех ACCEPT в цепочках FIREWALL0 и FIREWALL  на RETURN.

 

Изменено пользователем tolstyk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть новые тенденции.

В новом Centos7 старый iptables

заменен на новый firewalld.

Это впрочем не мешает опять установить 

iptables.

Но тут появилась некая политика ,

которая для рядового юзвера вполне себе хороша по дефолту и проста в настройке.

Это сродни виндовому брендмауеру.

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

А ещё для раздачи инета есть что-то уж не помню точно вроде зоны wan в которую надо отнести интерфейсы, дающие инет и тогда велючится раздача его через NAT для внутренних сетей.

Всё стало просто почти как настройка домашнего роутера.

Погуглите: настройка firewalld в centos.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сейчас в Cubian-е копаюсь, это Debian для одноплатника Cubieboard. Там iptables еще используется, по крайней мере был предустановлен. И нужен он будет мне в первую очередь под домашний Web-сервер, ну может потом с инета дам доступ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тада вся защита лежит на роутере, какие порты пробросишь - только такие и будут входящие.

соответственно сами хосты внутренней сети, на винде они или на дебиане не нуждаются

ни в каком своём собственном файрволе или iptables.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединиться к общению

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

Гость
Ответить в этой теме...

×   Вы вставили контент с форматированием.   Удалить форматирование

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...