Организация шлюза iptables

Материал из Ай да Linux Wiki
Перейти к навигации Перейти к поиску

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


 IF_OUT
 IF_LAN
 MASK_LAN


Установленные правила разрешают все исходящие соединения из локальной сети. Все соединения исходящие с самого сервера. Все входящие соединения из локальной сети к серверу. Из интернета к серверу разрешено подключаться по ssh и пигновать сервер.

Листинг

 #!/bin/bash
 IPTABLES="/sbin/iptables"
 
 #######################################################################################################
 # Настройки
 #######################################################################################################
 #                            !!! НЕОБХОДИМО ИЗМЕНИТЬ НА СОБСТВЕННЫЕ !!!
  
 IF_OUT="eth0"                 # Имя интерфейса подключенного к интернет
 IF_LAN="eth1"                 # Имя интерфейса подключенного к локальной сети
 MASK_LAN="192.168.0.0/24"     # Указание локальной сети (адрес сети и маска)
  
 #######################################################################################################
 IF_LO="lo"
 ADDR_LO="127.0.0.1"
 LOOPBACK="127.0.0.0/8"
  
 sysctl -w net.ipv4.ip_forward=1    # Настройка ядра, для разрешения на продвижение пакетов
 sysctl -w net.ipv4.ip_dynaddr=1    # Позволяет выполнять корректно MASQUERADE при динамическом изменении ip адреса
  
 modprobe ip_nat_ftp                # Для правильной работы активного режима FTP
 
 #######################################################################################################
 # Сброс и установка правил по умолчанию
 #######################################################################################################
 $IPTABLES -t nat -P PREROUTING ACCEPT
 $IPTABLES -t nat -P POSTROUTING ACCEPT
 $IPTABLES -t nat -P OUTPUT ACCEPT
 $IPTABLES -t mangle -P PREROUTING ACCEPT
 $IPTABLES -t mangle -P OUTPUT ACCEPT
 $IPTABLES -F
 $IPTABLES -t nat -F
 $IPTABLES -t mangle -F
 $IPTABLES -X
 $IPTABLES -t nat -X
 $IPTABLES -t mangle -X
  
 $IPTABLES -P INPUT      DROP    # По умолчанию блокирует входящий трафик
 $IPTABLES -P FORWARD    DROP    # По умолчанию блокирует проходящий трафик
 $IPTABLES -P OUTPUT     ACCEPT  # По умолчанию разрешает исходящий трафик
  
 #######################################################################################################
 # Создание цепочек правил
 #######################################################################################################
 # Базовая проверка пакетов - невалидные пакты (common-check)
         $IPTABLES -N common-check
         $IPTABLES -F common-check
         $IPTABLES -A common-check -m state --state INVALID -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
         $IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
         $IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
 # Обработка входящих icmp запросов (icmp-in)
         $IPTABLES -N icmp-in
         $IPTABLES -F icmp-in
         $IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
         $IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
         $IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
 # Разрешает уже установленные соединения (statefull)
         $IPTABLES -N statefull
         $IPTABLES -F statefull
         $IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
   
 #################################################################################################
 # Задание правил для входящего трафика
 #################################################################################################
         ## Проверяем пакеты (!первое правило в цепочке)
 $IPTABLES -A INPUT -j common-check
         ## Разрешаем icmp запросы к серверу (ping)
 $IPTABLES -A INPUT -j icmp-in
         ## Разрешаем SSH (!из интернета)
 $IPTABLES -A INPUT -p tcp --dport 22 -i $IF_OUT -j ACCEPT
         ## Разрешаем входящий трафик с локальной сети
 $IPTABLES -A INPUT -i $IF_LAN -j ACCEPT
         ## Разрешаем локальный интрефейс
 $IPTABLES -A INPUT -i $IF_LO -d $LOOPBACK -j ACCEPT
         ## Разрешаем установленные соединения (!последнее правило в цепочке)
 $IPTABLES -A INPUT -j statefull
  
 #################################################################################################
 # Задание правил для исходящего трафика
 #################################################################################################
 # По умолчанию исходящий трафик разрешен
         ## Проверяем пакеты (!первое правило в цепочке)
 $IPTABLES -A OUTPUT -j common-check
  
 #################################################################################################
 # Задание правил для продвижения пакетов
 #################################################################################################
         ## Проверяем пакеты (!первое правило в цепочке)
 $IPTABLES -A FORWARD -j common-check
         ## Организация NAT
 $IPTABLES -t nat -A POSTROUTING -s $MASK_LAN -o $IF_OUT -j MASQUERADE
   
        ## Разрешаем !весь! проходящий трафик с локальной сети (контроль маска и интерфейс!)
 $IPTABLES -A FORWARD -i $IF_LAN -s $MASK_LAN -j ACCEPT
  
         ## Разрешаем установленные соединения (!последнее правило в цепочке)
 $IPTABLES -A FORWARD -j statefull
 ##################################################################################################
  
 echo done!



Информация взята с wiki.enchtex.info