Помогите, пожалуйста, поднять брандмауэр!, 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 #Пусть дальше по цепочкам не путешевствует :-) -------------------------------------------------------------------------------------------------------->
- подправка скрипта!, Димарик, 12:34 , 16-Окт-03 (4)
А что изменить, если кроме squid`а больше нет прокси, т.е. надо чтобы у пользователей работал SMTP и POP протоколы?
|