The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите, пожалуйста, поднять брандмауэр!"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Информационная безопасность (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите, пожалуйста, поднять брандмауэр!"
Сообщение от SHRDLU Искать по авторуВ закладки on 09-Окт-03, 14:05  (MSK)
Помогите, пожалуйста, поднять брандмауэр!
Вчера на доставшемся мне в наследство шлюзе по моей небрежности  безвременно почил скрипт, настраивающий правила 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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Помогите, пожалуйста, поднять брандмауэр!"
Сообщение от tahion emailИскать по авторуВ закладки on 09-Окт-03, 21:10  (MSK)
<----------------------------------------------------------------------------------
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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Помогите, пожалуйста, поднять брандмауэр!"
Сообщение от SHRDLU Искать по авторуВ закладки on 10-Окт-03, 08:57  (MSK)
>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)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "подправка скрипта! звиняйте немного перестарался"
Сообщение от tahion Искать по авторуВ закладки on 10-Окт-03, 09:42  (MSK)
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                      #Пусть дальше по цепочкам не путешевствует :-)
-------------------------------------------------------------------------------------------------------->


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "подправка скрипта!"
Сообщение от Димарик emailИскать по авторуВ закладки on 16-Окт-03, 12:34  (MSK)
А что изменить, если кроме squid`а больше нет прокси, т.е. надо чтобы у пользователей работал SMTP и POP протоколы?
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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