The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите, пожалуйста, поднять брандмауэр!, !*! SHRDLU, 09-Окт-03, 14:05  [смотреть все]
Помогите, пожалуйста, поднять брандмауэр!
Вчера на доставшемся мне в наследство шлюзе по моей небрежности  безвременно почил скрипт, настраивающий правила ipchains для доступа в инет из локальной сетки :(( Поскольку Линухом начал заниматься по необходимости всего месяц назад, сами понимаете - ситуация аховая...

Шлюз на RH Linux 7.2 Имеется локальная сеть 10.0.0.*/255.255.255.0 (eth1), внешний статический IP a.b.c.d (eth0) (подключение по выделенке). На шлюзе стоят SQUID в качестве http прокси на порту 3128, Delegated в качестве прокси для FTP, SMTP и POP3 на портах, соответственно, 8021, 8025 и 8110. Еще стоит Apache - исключительно для использования внутри локалки, на нем юзеры смотрят статистику сквида - кто сколько накачал и не пора ли остановиться.
Требуется закрыть доступ изнутри/снаружи ко всему, кроме вышеперечисленного.
Помогите пожалуйста, уважаемые знатоки Linux! Роюсь в доках, ничего не получается - либо все открыто, либо ни хрена не работает. Желателен готовый скрипт с комментариями, чтобы можно было разобраться.

Вот что я наваял сам, читая различные маны, но это не работает (по этой же причини за настройки ftp и прочего пока не брался) :(

firewall.sh

ANY="0/0"
MY_ISP="my_internet_provaider_network"
EXTIP="my_ext_ip"
GATEIP="10.0.0.4"
LOCALNET="10.0.0.0/24"
DNS1="dns_server_1"
DNS2="dns_server_2"
#
echo 1 > /proc/sys/net/ipv4/ip_forward
ipchains -F
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# Enable all loopback traffic
ipchains -A input -i lo -j ACCEPT
ipchains -A forward -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
# ICMP
ipchains -A input -i eth0 -p icmp -s $ANY 0 -d $EXTIP -j ACCEPT
ipchains -A input -i eth0 -p icmp -s $ANY 3 -d $EXTIP -j ACCEPT
ipchains -A input -i eth0 -p icmp -s $ANY 4 -d $EXTIP -j ACCEPT
ipchains -A input -i eth0 -p icmp -s $ANY 11 -d $EXTIP -j ACCEPT
ipchains -A input -i eth0 -p icmp -s $ANY 12 -d $EXTIP -j ACCEPT
ipchains -A input -i eth0 -p icmp -s $MY_ISP 8 -d $EXTIP -j ACCEPT
ipchains -A output -i eth0 -p icmp -s $EXTIP 0 -d $MY_ISP -j ACCEPT
ipchains -A output -i eth0 -p icmp -s $EXTIP 3 -d $MY_ISP -j ACCEPT
ipchains -A output -i eth0 -p icmp -s $EXTIP 4 -d $ANY -j ACCEPT
ipchains -A output -i eth0 -p icmp -s $EXTIP 8 -d $ANY -j ACCEPT
ipchains -A output -i eth0 -p icmp -s $EXTIP 12 -d $ANY -j ACCEPT
ipchains -A output -i eth0 -p icmp -s $EXTIP 11 -d $MY_ISP -j ACCEPT
# DNS
# 1. DNS Full Server
ipchains -A input -s $ANY -d $EXTIP 53 -p udp -i eth0 -j ACCEPT
ipchains -A output -s $EXTIP 53 -d $ANY -p udp -i eth0 -j ACCEPT
# 2. DNS Client
ipchains -A input -s $DNS1 53 -d $EXTIP -p udp -i eth0 -j ACCEPT
ipchains -A input -s $DNS2 53 -d $EXTIP -p udp -i eth0 -j ACCEPT
ipchains -A output -s $EXTIP -d $DNS1 53 -p udp -i eth0 -j ACCEPT
ipchains -A output -s $EXTIP -d $DNS2 53 -p udp -i eth0 -j ACCEPT
# 3. DNS by TCP
ipchains -A input -s $DNS1 53 -d $EXTIP -p tcp ! -y -i eth0 -j ACCEPT
ipchains -A input -s $DNS2 53 -d $EXTIP -p tcp ! -y -i eth0 -j ACCEPT
ipchains -A output -s $EXTIP -d $DNS1 53 -p tcp -i eth0 -j ACCEPT
ipchains -A output -s $EXTIP -d $DNS2 53 -p tcp -i eth0 -j ACCEPT
# SQUID
# Request from localnet to web
ipchains -A input -s $LOCALNET -d $GATEIP 3128 -p tcp -i eth1 -j ACCEPT -l
# Output request to internet
ipchains -A output -s $EXTIP -d $ANY 80 -p tcp -i eth0 -j ACCEPT -l
# Reply from web
ipchains -A input -s $ANY 80 -d $EXTIP -p tcp -i eth0 -j ACCEPT -l
# Return web reply to localnet
ipchains -A output -s $GATEIP 3128 -d $LOCALNET -p tcp -i eth1 -j ACCEPT -l

  • Помогите, пожалуйста, поднять брандмауэр!, !*! tahion, 21:10 , 09-Окт-03 (1)
    <----------------------------------------------------------------------------------
    any = "0/0"
    eth_i = "eth0"
    eth_l = "eth1"
    ip_i = "a.b.c.d"
    ip_l = "10.0.0.4"
    ip_l_mask ="24"
    p_apache = "80"
    p_squid = "3128"
    p_ftp = "8021
    p_pop = "8110"
    p_smtp = "8025"
    p_dns = "53"
    p_big = "1025:65535"
    dns1 =  "dns1"
    dns2 =  "dns2"


    echo 1 > /proc/sys/net/ipv4/ip_forward
    sbin/ipchains -F
    sbin/ipchains -P input DENY
    sbin/ipchains -P output DENY
    sbin/ipchains -P forward DENY
    #############################################
    # Input
    #############################################
    sbin/ipchains -A input  -p UDP -i $eth_i -s $dns1 53 -d $any $p_big -j ACCEPT # Ну это К ДНС. Она будет отвечать с 53 порта на хр@н знает какой
    sbin/ipchains -A input  -p UDP -i $eth_i -s $dns2 53 -d $any $p_big -j ACCEPT # с 1024 и выше
    ipchains -A input -p icmp -j icmp-acc # Это дополнительная цепочка для пингов, Админы разрешают : ping, tracert(traceroute)
    sbin/ipchains -A input         -i lo ACCEPT                                         #Думаю и ежу понятно :-)
    sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_apache -j ACCEPT
    sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_squid -j ACCEPT
    sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_ftp -j ACCEPT
    sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_smtp -j ACCEPT
    sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_pop -j ACCEPT # Ну это типа твои Порты для открывания, здеся моно добавлять или удалять!
    sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l 22 -j ACCEPT # Это типа для SSH, поставь 23 для телнета :-) но SSH лучше! рано или поздно тебе надоест сидеть в консоли!
    #для инета
    sbin/ipchains -A input  -p TCP -i $eth_i -s $any -d $ip_i  -y -j REJECT -l # [l] это параметр для логирования отброшеного пакета, а вдруг ломают а я и не узнаю!
    sbin/ipchains -A input  -p UDP -i $eth_i -s $any -d $ip_i     -j REJECT -l # Вместо REJECT можно поставить DENY тогда удаленный хост просто подумает что его посылают на ...
    sbin/ipchains -A input  -p UDP -i $eth_i -s $any -d $ip_i     -j ACCEPT    # Теперь про все 3 строки Первая запрещает на машину ПО протоколу ТСП запросы на соединение
                                                                               # вторая отбрасывает протокол UDP
                                           # А третья разрешает открытые нами соединение!!!!!!! без этой строки пакеты по ТСП ходить не будут с нас на инет.
    # Для локалки
    sbin/ipchains -A input  -p TCP -i $eth_l -s $any -d $ip_l  -y -j REJECT  # смотри выше!
    sbin/ipchains -A input  -p UDP -i $eth_l -s $any -d $ip_l     -j REJECT
    sbin/ipchains -A input  -p UDP -i $eth_l -s $any -d $ip_l     -j ACCEPT

    ##########################################
    #  Forward
    ##########################################
    sbin/ipchains -A forward -i $eth_i -p icmp -s $ip_l/$ip_l_mask -d ! $ip_l/$ip_l_mask -j MASQ #Если не хош чтобы юзеры пинговали инет то убери эту строку
    ##########################################
    #  Output
    ##########################################


    ##########################################
    #  icmp_acc
    ##########################################
    ## Это посмотри в документации, я оттудова это скатал и пока не глючило :-)
    sbin/ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
    sbin/ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
    sbin/ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
    sbin/ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT
    sbin/ipchains -A icmp-acc -p icmp -j DENY                      #Пусть дальше по цепочкам не путешевствует :-)
    -------------------------------------------------------------------------------------------------------->
    Если че пиши на асю! только представся 173905789

    • Помогите, пожалуйста, поднять брандмауэр!, !*! SHRDLU, 08:57 , 10-Окт-03 (2)
      >sbin/ipchains -A input  -p TCP -i $eth_i -s $any -d $ip_i -y -j REJECT -l # [l] это параметр для логирования отброшеного пакета, а вдруг ломают а я  не узнаю!
      >sbin/ipchains -A input  -p UDP -i $eth_i -s $any -d $ip_i -j REJECT -l # Вместо REJECT можно поставить DENY тогда удаленный хост просто подумает что его посылают на ..
      >sbin/ipchains -A input  -p UDP -i $eth_i -s $any -d $ip_i -j ACCEPT    
      ># Теперь про все 3 строки Первая запрещает на машину ПО протоколу ТСП
      >запросы на соединение вторая отбрасывает протокол UDP А третья разрешает >открытые нами соединение!!!!!!! без этой строки пакеты
      >по ТСП ходить не будут с нас на инет.

      А разве в этом случае в третьей строке не должен указываться протокол tcp?


      >-j MASQ #Если не хош чтобы юзеры пинговали инет то убери
      >эту строку

      Так или иначе, но сетка у нас без маскарадинга работает.

      >##########################################
      >#  Output
      >##########################################
      Вот тут опять стоп - разве при таких настройках эта цепочка ДОЛЖНА быть пустой? А как тогда быть с возвратом наших пакетов? Скажем, юзер из IE запрашивает у сквида страничку, тот отфутболивает запрос в инет - а обратно как?

      К сожалению, приведенный тобой скрипт НЕ работает, причем после загрузки этих правил шлюз вообще перестает пинговаться из локалки :( Смотрел логи кернела - там почти полная тишина, только появляются такие вот строчки:

      Oct 10 08:58:53 proxyuit kernel: Packet log: input REJECT eth0 PROTO=6 69.132.82.161:4665 195.239.235.78:135 L=48 S=0x60 I=10691 F=0x4000 T=103 SYN (#10)
      Oct 10 09:02:49 proxyuit kernel: Packet log: input REJECT eth0 PROTO=17 200.203.120.200:1649 195.239.235.78:1434 L=404 S=0x60 I=33496 F=0x0000 T=104 (#11)
      Oct 10 09:23:01 proxyuit kernel: Packet log: icmp-acc DENY eth1 PROTO=1 10.0.0.70:8 10.0.0.16:0 L=60 S=0x00 I=947 F=0x0000 T=128 (#5)
      Oct 10 09:23:06 proxyuit kernel: Packet log: icmp-acc DENY eth0 PROTO=1 10.0.0.70:8 10.0.0.16:0 L=60 S=0x00 I=948 F=0x0000 T=128 (#5)
      Oct 10 09:23:14 proxyuit kernel: Packet log: icmp-acc DENY eth0 PROTO=1 195.241.31.22:8 195.239.235.78:0 L=92 S=0x60 I=34487 F=0x0000 T=111 (#5)
      Oct 10 09:29:12 proxyuit kernel: Packet log: input REJECT eth0 PROTO=6 195.239.218.129:4793 195.239.235.78:135 L=48 S=0x00 I=9415 F=0x0000 T=117 SYN (#11)
      Oct 10 09:34:19 proxyuit kernel: Packet log: icmp-acc DENY eth1 PROTO=1 195.241.46.153:8 195.239.235.78:0 L=92 S=0x60 I=7689 F=0x0000 T=112 (#5)
      Oct 10 09:35:56 proxyuit kernel: Packet log: icmp-acc DENY eth1 PROTO=1 10.0.0.70:8 10.0.0.16:0 L=60 S=0x00 I=978 F=0x0000 T=128 (#5)
      Oct 10 09:36:01 proxyuit kernel: Packet log: icmp-acc DENY eth0 PROTO=1 10.0.0.70:8 10.0.0.16:0 L=60 S=0x00 I=979 F=0x0000 T=128 (#5)
      Oct 10 09:38:14 proxyuit kernel: Packet log: icmp-acc DENY eth0 PROTO=1 195.237.18.122:8 195.239.235.78:0 L=92 S=0x60 I=28602 F=0x0000 T=113 (#5)
      Oct 10 09:38:41 proxyuit kernel: Packet log: icmp-acc DENY eth0 PROTO=1 195.239.40.98:8 195.239.235.78:0 L=92 S=0x00 I=27956 F=0x0000 T=120 (#5)

    • подправка скрипта! звиняйте немного перестарался, !*! tahion, 09:42 , 10-Окт-03 (3)
      any = "0/0"
      eth_i = "eth0"
      eth_l = "eth1"
      ip_i = "a.b.c.d"
      ip_l = "10.0.0.4"
      ip_l_mask ="24"
      p_apache = "80"
      p_squid = "3128"
      p_ftp = "8021
      p_pop = "8110"
      p_smtp = "8025"
      p_dns = "53"
      p_big = "1025:65535"
      dns1 =  "dns1"
      dns2 =  "dns2"

      echo 1 > /proc/sys/net/ipv4/ip_forward
      sbin/ipchains -F
      sbin/ipchains -N icmp-acc
      sbin/ipchains -P input DENY
      sbin/ipchains -P output DENY
      sbin/ipchains -P forward ACCEPT
      #############################################
      # Input
      #############################################
      sbin/ipchains -A input  -p UDP -i $eth_i -s $dns1 53 -d $any $p_big -j ACCEPT # Ну это К ДНС. Она будет отвечать с 53 порта на хр@н знает какой
      sbin/ipchains -A input  -p UDP -i $eth_i -s $dns2 53 -d $any $p_big -j ACCEPT # с 1024 и выше
      ipchains -A input -p icmp -j icmp-acc # Это дополнительная цепочка для пингов, Админы разрешают : ping, tracert(traceroute)
      sbin/ipchains -A input         -i lo ACCEPT                                         #Думаю и ежу понятно :-)
      sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_apache -j ACCEPT
      sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_squid -j ACCEPT
      sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_ftp -j ACCEPT
      sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_smtp -j ACCEPT
      sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l $p_pop -j ACCEPT # Ну это типа твои Порты для открывания, здеся моно добавлять или удалять!
      sbin/ipchains -A input         -i $eth_l -s $ip_l/$ip_l_mask  -d $ip_l 22 -j ACCEPT # Это типа для SSH, поставь 23 для телнета :-) но SSH лучше! рано или поздно тебе надоест сидеть в консоли!
      #для инета
      sbin/ipchains -A input  -p TCP -i $eth_i -s $any -d $ip_i  -y -j REJECT -l # [l] это параметр для логирования отброшеного пакета, а вдруг ломают а я и не узнаю!
      sbin/ipchains -A input  -p UDP -i $eth_i -s $any -d $ip_i     -j REJECT -l # Вместо REJECT можно поставить DENY тогда удаленный хост просто подумает что его посылают на ...
      sbin/ipchains -A input  -p TCP -i $eth_i -s $any -d $ip_i     -j ACCEPT    # Теперь про все 3 строки Первая запрещает на машину ПО протоколу ТСП запросы на соединение
                                                                                 # вторая отбрасывает протокол UDP
         # А третья разрешает открытые нами соединение!!!!!!! без этой строки пакеты по ТСП ходить не будут с нас на инет.
      # Для локалки
      sbin/ipchains -A input  -p TCP -i $eth_l -s $any -d $ip_l  -y -j REJECT  # смотри выше!
      sbin/ipchains -A input  -p UDP -i $eth_l -s $any -d $ip_l     -j REJECT
      sbin/ipchains -A input  -p TCP -i $eth_l -s $any -d $ip_l     -j ACCEPT

      ##########################################
      #  Forward
      ##########################################
      sbin/ipchains -A forward -i $eth_i -p icmp -s $ip_l/$ip_l_mask -d ! $ip_l/$ip_l_mask -j MASQ #Если не хош чтобы юзеры пинговали инет то убери эту строку
      ##########################################
      #  Output
      ##########################################


      ##########################################
      #  icmp_acc
      ##########################################
      ## Это посмотри в документации, я оттудова это скатал и пока не глючило :-)
      sbin/ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
      sbin/ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
      sbin/ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
      sbin/ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT
      sbin/ipchains -A icmp-acc -p icmp -j DENY                      #Пусть дальше по цепочкам не путешевствует :-)
      -------------------------------------------------------------------------------------------------------->




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру