Ip tables некоторые основы построения таблиц

Рассмотрим пример построения ip таблиц в котором для работы сети необходимо чтобы пакеты из локальных подсетей могли проходить к адресу 192.168.0.1 (к прокси серверу) затем обрабатываться прокси сервером.

Пакеты не должны перемещаться между подсетями и интерфейсом направленным в интернет

Пакеты из подсети используемой для телефонии должны проходить через шлюз 192.168.100.1 затем перенаправляться на внешний интерфейс eth0 (IP 10.0.0.1).

для работы телефонии необходимо чтобы TCP и Udp пакеты на портах 5060, 1024, 443, 40000-60000 проходили, все остальные пакеты уничтожались.

Для всех пакетов из 100-й подсети выходящие в интернет через интерфейс eth0 (IP 10.0.0.1). необходимо выполнить замену (преобразование) ip адреса источника на 10.0.0.1

Прежде чем начать конфигурацию таблиц необходимо очистить все таблицы от настроек по умолчанию.

Для маршрутизации пакетов вносим следующие изменения в файл /etc/sysconfig/iptables :

  1. Создаем правила по умолчанию которые, в случае несоответствие пакета ни одному правилу удаляют пакет.( запрещено все , кроме того что явно разрешено)
    -p input DROP
    -p output DROP -p forward DROP
  2. Разрешаем неограниченный трафик через интерфейс обратной петли (т. к. многие сервисы Линукса использует его для правильной работы сети его нужно разрешить)
  3. -A input -i lo -j ACCEPT -A output -i lo -j ACCEPT
  4. Необходимо явно запретить входящие пакеты из вне на внешний интерфейс у которых в качестве адреса источника указан адрес нашего интерфейса -A input -i eth0 -s 10.0.0.1 -j DROP -! это правило необходимо если адрес нашего внешнего интерфейса НЕ принадлежит к сети класса а принадлежит к пространству «белых IP адресов» например 213.0.1.1 в нашем примере этот запрет будет присутствовать в следующем правиле.
  5. Необходимо явно запретить входящие на внешний интерфейс «из вне» пакеты, которые содержат в качестве адреса источника — адреса диапазона класса А, кроме одного «нашего» адреса 10.0.0.1, так же явно запрещаем прохождение пакетов из вне с адресами для внутреннего пользования класса B и C -A input -i eth0 -s 10.0.0.0/8 -j DROP -A input -i eth0 -s 172.16.0.0/8 -j DROP -A input -i eth0 -s 192.168.0.0/16 -j DROP -A input -i eth0 -d 10.0.0.1 -j ACCEPT # ! пропускаем пакеты только на наш внешний адрес все остальные удаляем -A input -i eth0 -d 10.0.0.0/8 -j DROP -A input -i eth0 -d 172.16.0.0/8 -j DROP -A input -i eth0 -d 192.168.0.0/16 -j DROP
  6. Необходимо явно запретить исходящие с внешнего интерфейса «в интрернет» пакеты, которые содержат в качестве адреса источника — адреса диапазона класса А, кроме одного «нашего» адреса 10.0.0.1, так же явно запрещаем прохождение пакетов из вне с адресами для внутреннего пользования класса B и C -A output -i eth0 -s 10.0.0.1 -j ACCEPT # ! пропускаем во внешнюю сеть пакеты только c нашего внешнего адреса все остальные удаляем -A output -i eth0 -s 10.0.0.0/8 -j DROP -A output -i eth0 -s 172.16.0.0/8 -j DROP -l -A output -i eth0 -s 192.168.0.0/16 -j DROP -l -A output -i eth0 -d 10.0.0.0/8 -j DROP -A output -i eth0 -d 172.16.0.0/8 -j DROP -l -A output -i eth0 -d 192.168.0.0/16 -j DROP -l
  7. Необходимо явно запретить входящие и исходящие пакеты проходящие через внешний интерфейс содержащие в качестве адреса источника адрес 127.0.0.1 -A intput -i eth0 -s 127.0.0.1 -j DROP -A output -i eth0 -s 127.0.0.1 -j DROP
  8. Необходимо явно запретить пакет содержащие широковещательные адреса -A intput -i eth0 -s 255.255.255.255 -j DROP -A intput -i eth0 -d 0.0.0.0 -j DROP # такие пакеты появляются с целью
    идентифицировать операционную систему , на тестовой машине их запрещать не обязательно а на рабочей крайне желательно!
  9. Часть адресов сетевого пространства зарезервировано для использования в будущем и на сегодняшний день не используется в связи с чем любой пакет пришедший с этого диапазона адресов можно считать фальшивым. Диапазон:
    0.*.*.* ; 1.*.*.* ; 2.*.*.* ; 5.*.*.* ; 7.*.*.* ; 23.*.*.* ; 27.*.*.* ; 31.*.*.* ; 37.*.*.* ; 39.*.*.* ; 41.*.*.* ; 42.*.*.* ; 58-60.*.*.* ; 65-79.*.*.* ; 80-95.*.*.* ; 96-111.*.*.* ; 112-126.*.*.* ; 217-129.*.*.* ; все пакеты с потенциально фальшивыми адресами удаляем -A intput -i eth0 -s 0.0.0.0/8 -j DROP -A intput -i eth0 -s 1.0.0.0./8 -j DROP -A intput -i eth0 -s 2.0.0.0./8 -j DROP -A intput -i eth0 -s 5.0.0.0./8 -j DROP -A intput -i eth0 -s 7.0.0.0./8 -j DROP и так далее со всеми группами не используемых на сегодняшний день адресов
  10. Для удобства эксплуатации сети необходимо разрешить прохождение ICMP сообщений


    Код отклика Наименование описание 0 ping отклик 3 destination-unreachable сообщение об ошибке, о невозможности доставить пакет используется прграммой traceroute 4 source-quench сообщение для управлением потоками 5 redirect сообщение возвращается узлу с которого был отправлен пакет . Если маршрутизатор знает о наличии более короткого пути 8 echo-request запрос ping 11 time-exceeded сообщение передается в случае если количество узлов превышает допустимое. 12 parametr-problem сообщение передается в случае обнаружения в заголовке пакета недопустимой записи.

    Необходимо разрешить прохождение только сообщений source-quench, parametr-problem, входящие и исходящие сообщения destination-unreachable
    добавляем правила для обеспечения возможности прохождения ICMP пакетов

    -A intput -i eth0 -p icmp -s any/0 3 -d 10.0.0.1 -j ACCEPT -A intput -i eth0 -p icmp -s any/0 3 -s 10.0.0.1 -j ACCEPT
    -A intput -i eth0 -p icmp -s any/0 4 -d 10.0.0.1 -j ACCEPT
    -A intput -i eth0 -p icmp -s any/0 4 -s 10.0.0.1 -j ACCEPT
    -A intput -i eth0 -p icmp -s any/0 11 -d 10.0.0.1 -j ACCEPT
    -A intput -i eth0 -p icmp -s any/0 11 -s 10.0.0.1 -j ACCEPT
    -A intput -i eth0 -p icmp -s any/0 12 -d 10.0.0.1 -j ACCEPT
    -A intput -i eth0 -p icmp -s any/0 12 -s 10.0.0.1 -j ACCEPT# разрешаем входящие и исходящие icmp пакеты с ответом «3» «4» «11» «12» «»с любого адреса на наш внешний интерфейс так-же разрешаем прием и отправку пакетов ping -A intput -i eth0 -p icmp -s any/0 0 -d 10.0.0.1 -j ACCEPT -A intput -i eth0 -p icmp -s any/0 0 -s 10.0.0.1 -j ACCEPT -A intput -i eth0 -p icmp -s any/0 8 -d 10.0.0.1 -j ACCEPT -A intput -i eth0 -p icmp -s any/0 8 -s 10.0.0.1 -j ACCEPT


  11. Предотвращение попыток smurf-атаки на сервер
    (smurf-атака — атака при которой пакеты ping содержащие сообщение echo-request передаются в широковещательном режиме, исходный Ipадрес подменяется адресом жертвы , в итоге все компьютеры начинают посылать запросы на компьтер жертвы перегружая канал связи) A input -i eth0 -p icmp -d 255.255.255.255 -j DROP A output -i eth0 -p icmp -d 255.255.255.255 -j DROP

  12. Разрешаем пользователям локальных сетей доступ к порту 3128 сетевого адреса 192.168.0.1 на котором работает локальный прокси сервер SQUID-CACHE , дальнейшее управление пакетами из подсетей переходит прокси серверу, для этого пишем цепочку разрешающую прохождение пакетов для всех подсетей.
    A input -i eth1 -s 192.168.1.0/26 -j ACCEPT
    A output -i eth1 -d 192.168.1.0/26 -j ACCEPT С этого момента все пакеты из локальных подсетей переходят в управление прокси серверу дальнейшие разрешающие или запрещающие правила определяются настройками прокси сервера.
    Т.к. Правило по умолчанию удаляет все пакеты которым явно прохождение не разрешено и мы явно не разрешили прохождение пакетов между подсетями то компьтеры из этих подсетей «между подсетями» иметь доступа не будут
  13. Заключительным этапом настройки является настройка цепочек правил для правильной работы 100-й подсети ( IP телефонии) , IP телефония работает с UDP пакетами которые не пропускает прокси сервер, по этому через прокси сервер эти пакеты мы пропускать на будем, а настроим перенаправление пакетов из подсети 100 на интерфейс eth0 и заем все перенаправленным пакетам присвоим адрес источника — адрес внешнего интерфейса eth0 — ip 10.0.0.1 A outpurt -i eth0 -s 192.168.100/24 -j MASQURADE # присваиваем всем пакетам выходящим из подсети 192.168.100.0/24 и проходящим во внешнюю сеть через интерфейс eth0 адрес интерфейса eth0 (маскируем все проходящие пакеты) A forward -i eth0 -s 192.168.100/24 -j ACCEPT # перенаправление между интерфейсами A forward -i eth0 -d 192.168.100/24 -j ACCEPT # перенаправление между интерфейсами