LINUX.ORG.RU

Запуск пользовательских цепочек iptables


0

2

Суть этих правил - организовать МАС + ИП фильтер и фильтер доступности рабочих портов для ресурсов:

## политика по умолчанию
-P INPUT ACCEPT
-P FORWARD DROP

## цепочка проверки портов
-N check_ports
-A check_ports FORWARD -i eth1 -o ppp0 -p tcp -s 192.168.1.0/255.255.255.0 --dport 80 -j RETURN
-A check_ports FORWARD -i eth1 -o ppp0 -p tcp -s 192.168.1.0/255.255.255.0 --dport 8080 -j RETURN
-A check_ports FORWARD -i eth1 -o ppp0 -p tcp -s 192.168.1.0/255.255.255.0 --dport 22 -j DROP

## цепочка проверки аккаунта
-N check_account
-A check_account FORWARD -i eth1 -o ppp0 -s 192.168.1.229 -m mac --mac-source 20:CG:52:9F:BB:N5 -j RETURN
-A check_account FORWARD -i eth1 -o ppp0 -s 192.168.1.230 -m mac --mac-source 50:CF:30:TF:BB:E2 -j RETURN
-A check_account FORWARD -i eth1 -o ppp0 -s 192.168.1.231 -m mac --mac-source 20:CD:40:9F:BB:E5 -j DROP

## разрешить входящие пакеты всем
-I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j ACCEPT

## Здесь нужно дальше запустить цепочки и придумать логику
## Я так подозреваю, что в конце всех правил нужно ставить 
## -A FORWARD -i eth1 -o ppp0 -j ACCEPT
## для пакетов которые остались живы после проверки в двух цепочках
## Но, не уверен - прошу у вас помощи.


ИМХО, лучше сначала сделать проверку на "-i eth1 -o ppp0" и в цепочки check_ports и check_account
писать правила без этого условия.
И неплохо использовать состояние соедиения (ACCEPT для ESTABLISHED, RELATED),
чтобы пакеты уже разрешённых соедиений не прогонялись по куче правил.

-N local2inet
-A local2inet -j check_ports
-A local2inet -j check_account
-A local2inet -j ACCEPT

-A FORWARD -i eth1 -o ppp0 -j local2inet

mky ★★★★★ ()
Ответ на: комментарий от mky

сейчас меня хватило на такое

-P INPUT ACCEPT
-P FORWARD DROP
-I FORWARD -i eth1 -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

##Global input accept
-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j ACCEPT

##Global port accept
-N CHECKPORTS
-A CHECKPORTS -i eth1 -o ppp0 -s 192.168.1.0/255.255.255.0 -p tcp --dport 80 -j ACCEPT
-A CHECKPORTS -i eth1 -o ppp0 -s 192.168.1.0/255.255.255.0 -p tcp --dport 8080 -j ACCEPT
-A CHECKPORTS -i eth1 -o ppp0 -s 192.168.1.0/255.255.255.0 -p tcp --dport 443 -j ACCEPT
-A CHECKPORTS -i eth1 -o ppp0 -s 192.168.1.0/255.255.255.0 -p tcp --dport 5190 -j ACCEPT

##Rafic
-A FORWARD -i eth1 -o ppp0 -s 192.168.1.229 -m mac --mac-source 20:CF:30:9F:BB:E5 -j CHECKPORTS
Но оно не работает... расскажите почему?

Rafic ()
Ответ на: комментарий от mky

Выходит должно быть примерно вот так:

## политика по умолчанию
-P INPUT ACCEPT
-P FORWARD DROP

## Цепочка проверки портов
-N CHECKPORTS
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 80 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 8080 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 22 -j RETURN  ## Здесь DROP или RETURN?

## Цепочка проверки аккаунта
-N CHECKACCOUNTS
-A CHECKACCOUNTS -s 192.168.1.229 -m mac --mac-source 20:CG:52:9F:BB:N5 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.230 -m mac --mac-source 50:CF:30:TF:BB:E2 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.231 -m mac --mac-source 20:CD:40:9F:BB:E5 -j RETURN  ## Здесь DROP или RETURN?

## Установка коректировки TCPMSS 
-I FORWARD -i eth1 -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

## Разрешить для установленных соединений
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

## Разрешить принимать пакеты всей сети
-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j ACCEPT

## Цепочка объединения правил и проверки на -i eth1 -o ppp0
-N local2inet
-A local2inet -j CHECKPORTS
-A local2inet -j CHECKACCOUNTS
-A local2inet -j ACCEPT

-A FORWARD -i eth1 -o ppp0 -j local2inet
Все ли верно написано? Для важно даже синтаксис. Некоторые вещи мне до сих пор не понятны... например:
-N CHECKPORTS
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 80 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 8080 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 22 -j DROP
В последнем правиле DROP (сейчас там вопрос, прошу ответить). Правильно ли это? если у меня пакет идет по порту 22 то правило выполняется и пакет умирает... а ведь он должен идти дальше. Скажите, пожалуйста, как правильно записать то, что у меня вышло. Я просто потом скопирую к себе и запущу. Логику я понял, а вот с синтаксисом и оформление - траблы=(

Rafic ()
Ответ на: комментарий от Rafic

DROP или RETURN зависит от того, что вы хотите получить.
Если дать выход в Инет только на порты 80, 8080 и 22, а все остальные порты запретить,
то должно быть так:

-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 80 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 8080 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 22 -j RETURN
-A CHECKPORTS -j DROP

Аналогично для CHECKACCOUNTS.

Возможно, что лучше сделать сначала CHECKACCOUNTS, а потом CHECKPORTS.
В этом случае заменяя RETURN на ACCEPT для отдельных правил в CHECKACCOUNTS,
можно будет для этих компьютеров локальной сети давать выход и Инет на все порты.

mky ★★★★★ ()
Ответ на: комментарий от mky

Отлично! mky Спасибо огромное за разъяснения. Именно так я все и представлял=) И, если я все правильно понял, то вот полностью рабочая версия iptables

## политика по умолчанию
-P INPUT ACCEPT
-P FORWARD DROP

## Цепочка проверки портов
-N CHECKPORTS
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 80 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 8080 -j RETURN
-A CHECKPORTS -p tcp -s 192.168.1.0/255.255.255.0 --dport 22 -j RETURN
-A CHECKPORTS -j DROP

## Цепочка проверки аккаунта
-N CHECKACCOUNTS
-A CHECKACCOUNTS -s 192.168.1.229 -m mac --mac-source 20:CG:52:9F:BB:N5 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.230 -m mac --mac-source 50:CF:30:TF:BB:E2 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.231 -m mac --mac-source 20:CD:40:9F:BB:E5 -j RETURN
-A CHECKACCOUNTS -j DROP

## Установка коректировки TCPMSS 
-I FORWARD -i eth1 -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

## Разрешить для установленных соединений
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

## Разрешить принимать пакеты всей сети по определенным портам
-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j CHECKPORTS
-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j ACCEPT

## Цепочка объединения правил и проверки на -i eth1 -o ppp0
-N CHECKING
-A CHECKING -j CHECKACCOUNTS
-A CHECKING -j CHECKPORTS
-A CHECKING -j ACCEPT

## Запуск проверки
-A FORWARD -i eth1 -o ppp0 -j CHECKING
в которой рализованы следующие задачи:

  • Установлена политика по умолчанию для форвардинга между интерфейсами - ЗАПРЕТ
  • По умолчанию все пользователи сети могут получать все пакеты из интернета по РАЗРЕШЕННЫМ портам
  • Для доступа в интернет из локальной сети пользователь проходит фильтрацию по МАК + IP-адресу
  • И фильтрацию портов на которые можно отправлять пакеты из локальной сети в интернет
  • Установлена коррекция TCPMSS для PPPoE соединения
  • Соединения, которые прошли проверку больше не попадают под фильтр и не грузят систему

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

Rafic ()
Ответ на: комментарий от Rafic

Вот это правило:

-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j ACCEPT

лишнее, а это правило не имеет смысла:

-A FORWARD -d 192.168.1.0/255.255.255.0 -i ppp0 -o eth1 -j CHECKPORTS

В случае локальной сети, которая выходит в Инет через SNAT (MASQRADE), достаточно разрешить прохождение первого пакета (от компьютера в локальной сети к сервер в Инет). Ответный пакет уже пройдёт по правилу "--state RELATED,ESTABLISHED -j ACCEPT".

При этом для пакетов, идущих из Инета в локальную сеть dst-адрес, а не src-адрес будет 192.168.1.0/255.255.255.0, и dst-порт будет 80, поэтому в CHECKPORTS не будте сработок правил "-j RETURN".

Вот этого пункта я не понял:

По умолчанию все пользователи сети могут получать все пакеты из интернета по РАЗРЕШЕННЫМ портам

А что касается:

Я считаю, что эти таблицы пригодятся многим...

ИМХО, ничего особо ценного в этих правилах нет и каждый, кто хочет админить сервер/маршрутизатор должен научится писать их сам, чтобы понимать что в них написано, а не использовать готовые рецепты.

mky ★★★★★ ()
Ответ на: комментарий от mky
## политика по умолчанию
-P INPUT ACCEPT
-P FORWARD DROP

## Цепочка проверки портов
-N CHECKPORTS
-A CHECKPORTS -p tcp --dport 80 -j RETURN
-A CHECKPORTS -p tcp --dport 8080 -j RETURN
-A CHECKPORTS -p tcp --dport 22 -j RETURN
-A CHECKPORTS -p tcp --dport 443 -j RETURN
-A CHECKPORTS -p tcp --dport 5190 -j RETURN
-A CHECKPORTS -j DROP

## Цепочка проверки аккаунта
-N CHECKACCOUNTS
##	Rafic
-A CHECKACCOUNTS -s 192.168.1.229 -m mac --mac-source 20:CF:30:9F:BB:E5 -j RETURN
##	Lesha
-A CHECKACCOUNTS -s 192.168.1.230 -m mac --mac-source 00:16:D3:58:6D:87 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.240 -m mac --mac-source 00:19:7E:51:DF:9A -j RETURN
-A CHECKACCOUNTS -s 192.168.1.242 -m mac --mac-source C0:F8:DA:58:0B:FA -j RETURN
##	Denis
-A CHECKACCOUNTS -s 192.168.1.231 -m mac --mac-source F4:6D:04:A7:04:2F -j RETURN
##	Andrey
-A CHECKACCOUNTS -s 192.168.1.232 -m mac --mac-source 00:15:58:66:48:0B -j RETURN
##	Lena
-A CHECKACCOUNTS -s 192.168.1.233 -m mac --mac-source 60:EB:69:4C:56:B3 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.239 -m mac --mac-source 70:F3:95:AF:83:98 -j RETURN
##	Katya
-A CHECKACCOUNTS -s 192.168.1.234 -m mac --mac-source C8:0A:A9:DC:6F:83 -j RETURN
-A CHECKACCOUNTS -s 192.168.1.238 -m mac --mac-source C4:46:19:5A:BE:5E -j RETURN
##	Ksysha
-A CHECKACCOUNTS -s 192.168.1.235 -m mac --mac-source B8:70:F4:27:0C:B9 -j RETURN
##	Anya
-A CHECKACCOUNTS -s 192.168.1.236 -m mac --mac-source 00:16:D4:D2:24:B8 -j RETURN
##	WIFIPoint
-A CHECKACCOUNTS -s 192.168.1.237 -m mac --mac-source 20:cf:30:99:3c:b9 -j RETURN
##	MihnewAndrey
-A CHECKACCOUNTS -s 192.168.1.241 -m mac --mac-source 74:2f:68:31:b2:8d -j RETURN
##	Default
-A CHECKACCOUNTS -j DROP

## Установка коректировки TCPMSS
-I FORWARD -i eth1 -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

## Разрешить для установленных соединений
-A FORWARD -d 192.168.1.0/255.255.255.0 -m state --state RELATED,ESTABLISHED -j ACCEPT

## Разрешить прием первого пакета из ethernet
-A FORWARD -d 192.168.1.0/255.255.255.0 -m state --state NEW -i ppp0 -o eth1 -j ACCEPT

## Цепочка объединения правил и проверки на -i eth1 -o ppp0
-N CHECKING
-A CHECKING -j CHECKACCOUNTS
-A CHECKING -j CHECKPORTS
-A CHECKING -j ACCEPT

## Запуск проверки
-A FORWARD -i eth1 -o ppp0 -j CHECKING

Вот я переписал следуя вашим замечаниям и советам. Все ли правильно?
При запуске в таком виде, как оно изложено выше, не устанавливаются новые соединения (старые сайты грузятся, я новые нет). Но если комментировавть строку

-A CHECKING -j CHECKPORTS
то все работает. В чем может быть причина?

Rafic ()
Ответ на: комментарий от Rafic

Возможно, что у компьютеров локальной сети в качестве DNS-сервера указан DNS-сервер провайдера или какой-либо ещё сервер с «белым» ip-адресом. Тогда нужно открыть udp 53 порт. Если это не поможет, замените "-j DROP" в цепочке CHECKPORTS на "-j LOG" и смотрите в логах какие пакеты (порты) попадают в это правило.

mky ★★★★★ ()
Ответ на: комментарий от mky

Открыл порт udp 53 и все заработало. Премного Вам благодарен. Жаль, что здесь нету кнопки «спасибо»=(

Rafic ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.