Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/bin/sh
  2.  
  3. ####
  4. # 1. Настройка
  5.  
  6. ## 1.1 Интернет
  7.  
  8. ### 1.1.1 DHCP
  9.  
  10. ### 1.1.2. PPPoE
  11.  
  12. ## 1.2 LAN
  13. LAN_IP_RANGE="172.20.16.0/23"
  14. LAN_IFACE="eth0"
  15. LAN_BROADCAST="172.20.255.255"
  16.  
  17. ## 1.3 DMZ
  18.  
  19. ## 1.4 Localhost
  20. LO_IFACE="lo"
  21. LO_IP="127.0.0.1"
  22.  
  23. ## 1.5 IPTables
  24. IPTABLES="/sbin/iptables"
  25.  
  26. ## 1.6 Прочее
  27.  
  28. ################
  29. # 2. Загрузка модулей
  30. #
  31.  
  32. ## Связанные модули
  33. /sbin/depmod -a
  34.  
  35. ## 2.1 Необходимые модули
  36. /sbin/modprobe ip_tables
  37. /sbin/modprobe ip_conntrack
  38. /sbin/modprobe iptable_filter
  39. /sbin/modprobe iptable_mangle
  40. /sbin/modprobe iptable_nat
  41. /sbin/modprobe ipt_LOG
  42. /sbin/modprobe ipt_limit
  43. /sbin/modprobe ipt_state
  44.  
  45. ## 2.2 Необязательные модули
  46.  
  47. #################
  48. # 3. Настройки /proc
  49.  
  50. ## 3.1 Обязательная конфигурация proc
  51. #echo "1" > /proc/sys/net/ipv4/ip_forward
  52.  
  53. ## 3.2 Non-required proc cfg
  54.  
  55. #################
  56. # 4. Rules set up
  57. ## 4.1 Таблица Filter
  58.  
  59. ### 4.1.1 Установка политик по умолчанию
  60. $IPTABLES -P INPUT DROP
  61. $IPTABLES -P OUTPUT DROP
  62. $IPTABLES -P FORWARD DROP
  63.  
  64. ###
  65. ### 4.1.2 Создание пользовательских цепочек
  66. ###
  67.  
  68. ### Не корректные TCP-пакеты
  69. $IPTABLES -N bad_tcp_packets
  70.  
  71. ### Раздельные цепочки для TCP-, UDP- и ICMP- пакетов
  72. $IPTABLES -N tcp_packets
  73. $IPTABLES -N udp_packets
  74. $IPTABLES -N icmp_packets
  75.  
  76. ### Цепочка для разрешенных TCP-пакетов
  77. $IPTABLES -N allowed
  78.  
  79. ###
  80. ### 4.1.3 Заполнение пользовательских цепочек
  81. ###
  82.  
  83. ### Цепочка bad_tcp_packets
  84. $IPTABLES -A bad_tcp_packets -p TCP --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
  85. $IPTABLES -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j LOG --log-prefix "IPT. New not SYN: "
  86. $IPTABLES -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j DROP
  87.  
  88. ### Фильтрация разрешенных TCP-пакетов (цепочка allowed)
  89. $IPTABLES -A allowed -p TCP --syn -j ACCEPT
  90. $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
  91. $IPTABLES -A allowed -p TCP -j DROP
  92.  
  93. ### Правила для TCP-пакетов (цепочка tcp_packets)
  94. #### Разрешаю SSH с компьютеров инженеров
  95. $IPTABLES -A tcp_packets -p TCP -s 172.20.16.2 --dport 22 -j allowed
  96. $IPTABLES -A tcp_packets -p TCP -s 172.20.16.3 --dport 22 -j allowed
  97. $IPTABLES -A tcp_packets -p TCP -s 172.20.17.1 --dport 22 -j allowed
  98. $IPTABLES -A tcp_packets -p TCP -s 172.20.17.2 --dport 22 -j allowed
  99. $IPTABLES -A tcp_packets -p TCP -s 172.20.17.3 --dport 22 -j allowed
  100. $IPTABLES -A tcp_packets -p TCP -s 172.20.17.4 --dport 22 -j allowed
  101. $IPTABLES -A tcp_packets -p TCP -s 172.20.17.5 --dport 22 -j allowed
  102.  
  103. #### Разрешаю FTP (порты 20 и 21)
  104. $IPTABLES -A tcp_packets -p TCP -s $LAN_IP_RANGE --dport 20:21 -j allowed
  105.  
  106. ### Разрешаю HTTP- и HTTPS- пакеты (порты 80 и 443, соответственно)
  107. $IPTABLES -A tcp_packets -p TCP -s $LAN_IP_RANGE --dport 80 -j allowed
  108. $IPTABLES -A tcp_packets -p TCP -s $LAN_IP_RANGE --dport 443 -j allowed
  109.  
  110. #### Блокирую SMB-пакеты
  111. $IPTABLES -A tcp_packets -p TCP -s $LAN_IP_RANGE --dport 137:139 -j DROP
  112. $IPTABLES -A tcp_packets -p TCP -s $LAN_IP_RANGE --dport 445 -j DROP
  113.  
  114. ### Правила для UDP-пакетов (цепочка udp_packets)
  115. #### Блокирую шароковещательные пакеты, характерные для сетей Microsoft
  116. $IPTABLES -A udp_packets -p UDP -i $LAN_IFACE --dport 135:139 -j DROP
  117. $IPTABLES -A udp_packets -p UDP -i $LAN_IFACE -d $LAN_BROADCAST -j DROP
  118.  
  119. #### Блокирую прием DHCP-запросов
  120. $IPTABLES -A udp_packets -p UDP -i $LAN_IFACE -d 255.255.255.255 --dport 67:68 -j DROP
  121.  
  122. #### Блокирую широковещательные пакеты Kaspersky Administracion Kit (порты 13000 и 15000)
  123. $IPTABLES -A udp_packets -p UDP -i $LAN_IFACE --dport 13000 -j DROP
  124. $IPTABLES -A udp_packets -p UDP -i $LAN_IFACE --dport 15000 -j DROP
  125.  
  126. #### Правила ICMP-пакетов (цепочка icmp_packets)
  127. $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
  128. $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
  129.  
  130. ###
  131. ### 4.1.4 Цепочка INPUT
  132. ###
  133.  
  134. ### Фильтрация некорректных TCP-пакетов
  135. $IPTABLES -A INPUT -p TCP -j bad_tcp_packets
  136.  
  137. ### Правила для петлевого интерфейса
  138. $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
  139.  
  140. ### Распределение входящих пакетов по цепочкам на основе протокола
  141. $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
  142. $IPTABLES -A INPUT -p TCP -i $LAN_IFACE -j tcp_packets
  143. $IPTABLES -A INPUT -p UDP -i $LAN_IFACE -j udp_packets
  144. $IPTABLES -A INPUT -p ICMP -i $LAN_IFACE -j icmp_packets
  145.  
  146. ### Отбрасываем multicast-пакеты
  147. $IPTABLES -A INPUT -i $LAN_IFACE -d 224.0.0.0/8 -j DROP
  148.  
  149. ### Записываем в лог все остальные пакеты, для которых нет правил
  150. $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT. INPUT packet died: "
  151.  
  152. ###
  153. ### 4.1.5 Цепочка FORWARD
  154. ###
  155.  
  156. ### Фильтрация некорректных TCP-пакетов
  157. $IPTABLES -A FORWARD -p TCP -j bad_tcp_packets
  158.  
  159. ### Принимаемые к маршрутизации пакеты
  160.  
  161. ### Записываем в лог все остальные пакеты, для которых нет правил
  162. $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT. FORWARD packet died: "
  163.  
  164. ###
  165. ### 4.1.6 Цепочка OUTPUT
  166. ###
  167.  
  168. ### Фильтрация некорректных TCP-пакетов
  169. $IPTABLES -A OUTPUT -p TCP -j bad_tcp_packets
  170.  
  171. ### Пакеты, которым разрешено покидать сервер
  172. $IPTABLES -A OUTPUT -p ALL -o $LAN_IFACE -j ACCEPT
  173. $IPTABLES -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT
  174.  
  175. ### Записываем в лог все остальные пакеты, для которых нет правил
  176. $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT. OUTPUT packet died: "
  177.