Advertisement
Guest User

Untitled

a guest
Mar 8th, 2012
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 12.42 KB | None | 0 0
  1. sudo cat /etc/iptables.up.rules
  2. #!/bin/sh
  3. #Внешний интерфейс
  4.  EXTIF="ppp0"
  5. # Внутренний интерфейс, eth0 - локалка билайна (10.*.*.*), eth1 - местная локалка (192.168.*.*)
  6.  INTIF0='eth0'
  7.  INTIF1='eth1'
  8. # Loop-устройство/localhost
  9.  LPDIF='lo'
  10.  LPDIP='127.0.0.1'
  11.  LPDMSK='255.0.0.0'
  12.  LPDNET="$LPDIP/$LPDMSK"
  13. # Переменные текстовых инструментов
  14.  IPT='/sbin/iptables'
  15.  IFC='/sbin/ifconfig'
  16.  G='/bin/grep'
  17.  SED='/bin/sed'
  18. # Deny вместо accept: предотвращает открытие дыр
  19. # в то время, как мы закрываем порты и все такое
  20.  $IPT        -P INPUT       DROP
  21.  $IPT        -P OUTPUT      DROP
  22.  $IPT        -P FORWARD     DROP
  23. # Сброс всех существующих цепочек и стирание персональных цепочек
  24.  CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
  25.  for i in $CHAINS
  26.  do
  27.   $IPT -t $i -F
  28.   $IPT -t $i -X
  29.  done
  30.  echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  31.  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  32. # Проверка адреса источника
  33.  for f in /proc/sys/net/ipv4/conf/*/rp_filter;
  34.  do
  35.   echo 1 > $f
  36.  done
  37. # Запрет маршрутизации IP от источника и редиректов ICMP
  38.  for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
  39.  do
  40.   echo 0 > $f
  41.  done
  42.  for f in /proc/sys/net/ipv4/conf/*/accept_redirects;
  43.  do
  44.   echo 0 > $f
  45.  done
  46.  echo 1 > /proc/sys/net/ipv4/ip_forward
  47. # Установка переменных среды для внешнего интерфейса
  48.  EXTIP="`$IFC $EXTIF|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
  49.  EXTBC="`$IFC $EXTIF|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
  50.  EXTBC="255.255.255.255"
  51.  EXTMSK="`$IFC $EXTIF|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
  52.  EXTNET="$EXTIP/$EXTMSK"
  53.  echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
  54.  echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
  55. # Так как EXTBC отсутствует, я устанавливаю ее вручную как it to 255.255.255.255
  56. # Это (надеюсь) послужит тем же целям
  57. # Устанвка переменных среды для первого внутреннего интерфейса
  58.  INTIP0="`$IFC $INTIF0|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
  59.  INTBC0="`$IFC $INTIF0|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
  60.  INTMSK0="`$IFC $INTIF0|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
  61.  INTNET0="$INTIP0/$INTMSK0"
  62.  echo "INTIP0=$INTIP0 INTBC0=$INTBC0 INTMSK0=$INTMSK0 INTNET0=$INTNET0"
  63. # Установка переменных среды для второго внутреннего интерфейса
  64.  INTIP1="`$IFC $INTIF1|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
  65.  INTBC1="`$IFC $INTIF1|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
  66.  INTMSK1="`$IFC $INTIF1|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
  67.  INTNET1="$INTIP1/$INTMSK1"
  68.  echo "INTIP1=$INTIP1 INTBC1=$INTBC1 INTMSK1=$INTMSK1 INTNET1=$INTNET1"
  69. # Сейчас мы собираемся создать несколько собственных цепочек, результатом работы
  70. # которых будет логгинг отброшенных пакетов. Это поможет нам избежать необходимости
  71. # вводить команду log перед каждым отбрасыванием пакета, что мы хотим запротоколировать.
  72. # Первыми идут лог отброшенных пакетов и собственно отброс, затем лог пакетов с отказами
  73. # и собственно отказы.
  74. # Отключаем сообщения о том, что цепочки уже существуют (чтобы перезапуск был без мусора)
  75.  $IPT -N DROPl   2> /dev/null
  76.  $IPT -A DROPl   -j LOG --log-prefix 'DROPl:'
  77.  $IPT -A DROPl   -j DROP
  78.  $IPT -N REJECTl 2> /dev/null
  79.  $IPT -A REJECTl -j LOG --log-prefix 'REJECTl:'
  80.  $IPT -A REJECTl -j REJECT
  81.  
  82. #
  83. $IPT -t nat -I PREROUTING -i $EXTIF -s 10.0.0.1/32 -j ACCEPT
  84. # Весь траффик от устройства loopback принимается
  85. # если IP совпадает с любым из наших интерфейсов.
  86.  $IPT -A INPUT   -i $LPDIF -s   $LPDIP  -j ACCEPT
  87.  $IPT -A INPUT   -i $LPDIF -s   $EXTIP  -j ACCEPT
  88.  $IPT -A INPUT   -i $LPDIF -s   $INTIP0  -j ACCEPT
  89.  $IPT -A INPUT   -i $LPDIF -s   $INTIP1  -j ACCEPT
  90. # Широковещательные пакеты блокируем
  91.  $IPT -A INPUT   -i $EXTIF -d   $EXTBC  -j DROPl
  92.  $IPT -A INPUT   -i $INTIF0 -d   $INTBC0  -j DROPl
  93.  $IPT -A INPUT   -i $INTIF1 -d   $INTBC1  -j DROPl
  94.  $IPT -A OUTPUT  -o $EXTIF -d   $EXTBC  -j DROPl
  95.  $IPT -A OUTPUT  -o $INTIF0 -d   $INTBC0  -j DROPl
  96.  $IPT -A OUTPUT  -o $INTIF1 -d   $INTBC1  -j DROPl
  97.  $IPT -A FORWARD -o $EXTIF -d   $EXTBC  -j DROPl
  98.  $IPT -A FORWARD -o $INTIF0 -d   $INTBC0  -j DROPl
  99.  $IPT -A FORWARD -o $INTIF1 -d   $INTBC1  -j DROPl
  100. # Блокируем доступ к внутренней сети из WAN
  101. # Это также призвано не дать нечестивым крякерам использовать нашу сетку
  102. # в качестве отправной точки для атак на других людей
  103. # Перевод с языка iptables:
  104. # "если пришедшие на наружный интерфейс пакеты были отправлены не с выданного
  105. # nefarious адреса, выкинуть их как горячую картошку"
  106.  $IPT -A INPUT   -i $EXTIF -d ! $EXTIP  -j DROPl
  107. # А сейчас мы блокируем внутренние адреса, кроме двух, присвоенных нашим двум
  108. # внутренним интерфейсам.....только помните, что если вы воткнете свой лэптоп или
  109. # какой другой pc в напрямую в одну из этих сетевых карт, то нужно удостовериться,
  110. # что они имеют именно эти IP-адреса или добавить соответствующий адрес отдельно
  111. # Первый интерфейс/первая внутренняя сеть
  112.  $IPT -A INPUT   -i $INTIF0 -s ! $INTNET0 -j DROPl
  113.  $IPT -A OUTPUT  -o $INTIF0 -d ! $INTNET0 -j DROPl
  114.  $IPT -A FORWARD -i $INTIF0 -s ! $INTNET0 -j DROPl
  115.  $IPT -A FORWARD -o $INTIF0 -d ! $INTNET0 -j DROPl
  116. # Второй интерфейс/вторая внутренняя сеть
  117.  $IPT -A INPUT   -i $INTIF1 -s ! $INTNET1 -j DROPl
  118.  $IPT -A OUTPUT  -o $INTIF1 -d ! $INTNET1 -j DROPl
  119.  $IPT -A FORWARD -i $INTIF1 -s ! $INTNET1 -j DROPl
  120.  $IPT -A FORWARD -o $INTIF1 -d ! $INTNET1 -j DROPl
  121. # Дополнительная Egress-проверка
  122.  $IPT -A OUTPUT  -o $EXTIF -s ! $EXTNET -j DROPl
  123. # Блокируем исходящиие пакеты ICMP (за исключением PING)
  124.  $IPT -A OUTPUT  -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
  125.  $IPT -A FORWARD -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
  126.  
  127. $IPT -A INPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 1701 -j ACCEPT
  128. $IPT -A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 1701 -j ACCEPT
  129. # печально известные порты:
  130. # 0 - tcpmux; у SGI есть уязвимость, через которую можно атаковать
  131. # 13 - daytime
  132. # 98 - Linuxconf
  133. # 111 - sunrpc (portmap)
  134. # 137:139, 445 - Microsoft
  135. # SNMP: 161,162
  136. # Флотилия Squid: 3128, 8000, 8008, 8080
  137. # 1214 - Morpheus или KaZaA
  138. # 2049 - NFS
  139. # 3049 - очень заразный троян для Linux, часто путаемый с NFS
  140. # Часто атакуемые: 1999, 4329, 6346
  141. # Частые трояны 12345 65535
  142. # COMBLOCK="0:1 13 98 111 161:162 1214 1999 2049 3049 4329 6346 3128 8000 8008 8080 12345 65535"
  143. # Порты TCP:
  144. # 98 - Linuxconf
  145. # 512-515 - rexec, rlogin, rsh, printer(lpd)
  146. #   [очень серьезеные уязвимости; продолжаются ежедневные атаки]
  147. # 1080 - прокси-серверы Socks
  148. # 6000 - X (ЗАМЕЧАНИЕ. X через SSH - безопасен, и работает на порту TCP 22)
  149. # Блокировка 6112 (CDE у Sun и HP)
  150. # TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"
  151. # Порты UDP:
  152. # 161:162 - SNMP
  153. # 520=RIP, 9000 - Sangoma
  154. # 517:518 - talk и ntalk (самые надоедливые)
  155. # UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000"
  156. #echo -n "FW: Blocking attacks to TCP port"
  157. #for i in $TCPBLOCK;
  158. #do
  159. # echo -n "$i "
  160. #  $IPT -A INPUT   -p tcp --dport $i  -j DROPl
  161. #  $IPT -A OUTPUT  -p tcp --dport $i  -j DROPl
  162. #  $IPT -A FORWARD -p tcp --dport $i  -j DROPl
  163. #done
  164. echo ""
  165. #echo -n "FW: Blocking attacks to UDP port "
  166. #for i in $UDPBLOCK;
  167. #do
  168. # echo -n "$i "
  169. #  $IPT -A INPUT   -p udp --dport $i  -j DROPl
  170. #  $IPT -A OUTPUT  -p udp --dport $i  -j DROPl
  171. #  $IPT -A FORWARD -p udp --dport $i  -j DROPl
  172. #done
  173. #echo ""
  174. # Открываем отлеживание соединений по ftp
  175.  MODULES="ip_nat_ftp ip_conntrack_ftp"
  176.  for i in $MODULES;
  177.  do
  178.   echo "Inserting module $i"
  179.   modprobe $i
  180.  done
  181. # Защищаем некоторые распространенные клиенты для чата.
  182. # Уберите из списка допустимых для пущей безопасности.
  183.  IRC='ircd'
  184.  MSN=1863
  185.  ICQ=5190
  186.  NFS='sunrpc'
  187. # Нам нужно синхронизировать данные!!
  188.  PORTAGE='rsync'
  189.  OpenPGP_HTTP_Keyserver=11371
  190. # Все порты сервисов читаются из /etc/services
  191.  TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $IRC $MSN $ICQ  $OpenPGP_HTTP_Keyserver" UDPSERV="domain time"
  192. echo -n "FW: Allowing inside systems to use service:"
  193. for i in $TCPSERV;
  194. do
  195.  echo -n "$i "
  196.   $IPT -A OUTPUT  -o $EXTIF -p tcp -s $EXTIP --dport $i --syn -m state --state NEW -j ACCEPT
  197.   $IPT -A FORWARD -i $INTIF0 -p tcp -s $INTNET0 --dport $i --syn -m state --state NEW -j ACCEPT
  198.   $IPT -A FORWARD -i $INTIF1 -p tcp -s $INTNET1 --dport $i --syn -m state --state NEW -j ACCEPT
  199. done
  200. echo ""
  201. echo -n "FW: Allowing inside systems to use service:"
  202. for i in $UDPSERV;
  203. do
  204.  echo -n "$i "
  205.   $IPT -A OUTPUT  -o $EXTIF -p udp -s $EXTIP --dport $i -m state --state NEW -j ACCEPT
  206.   $IPT -A FORWARD -i $INTIF0 -p udp -s $INTNET0 --dport $i -m state --state NEW -j ACCEPT
  207.   $IPT -A FORWARD -i $INTIF1 -p udp -s $INTNET1 --dport $i -m state --state NEW -j ACCEPT
  208. done
  209. echo ""
  210. # Разрешается ping наружу
  211. $IPT -A OUTPUT  -o $EXTIF -p icmp -s $EXTIP --icmp-type 8 -m state --state NEW -j ACCEPT
  212. $IPT -A FORWARD -i $INTIF0 -p icmp -s $INTNET0 --icmp-type 8 -m state --state NEW -j ACCEPT
  213. $IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
  214. # Файерволу разрешается ping внутренних систем
  215. $IPT -A OUTPUT  -o $INTIF0 -p icmp -s $INTNET0 --icmp-type 8 -m state --state NEW -j ACCEPT
  216. $IPT -A OUTPUT  -o $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
  217. $IPT -A INPUT   -i $INTIF1 -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
  218. $IPT -t nat -A PREROUTING -j ACCEPT
  219. $IPT -t nat -A POSTROUTING -j ACCEPT
  220. $IPT -t nat -A OUTPUT -j ACCEPT
  221. $IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
  222. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  223. $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  224. $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  225.  
  226. #Samba
  227. $IPT -A OUTPUT -o eth1 -p TCP --sport 137:139 -j ACCEPT
  228. $IPT -A OUTPUT -o eth1 -p UDP --sport 137:139 -j ACCEPT
  229.  
  230. #
  231. $IPT -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
  232. $IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  233. $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  234.  
  235.  
  236. $IPT -N ssh_filter
  237. $IPT -A INPUT -p tcp --sport 2222 -j ssh_filter
  238. $IPT -A ssh_filter -s 192.168.0.2 -j ACCEPT
  239. $IPT -A ssh_filter -s 192.168.1.2 -j ACCEPT
  240. $IPT -A ssh_filter -j DROP
  241. # Заблокировать и запротоколировать все, что мы могли забыть.
  242. #$IPT -A INPUT -j DROPl
  243. #$IPT -A OUTPUT -j REJECTl
  244. #$IPT -A FORWARD -j DROPl
  245.  
  246. # Блокируем все прочие попытки доступа на $EXTIF
  247. $IPT -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP
  248. $IPT -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement