imho.ws |
![]() |
![]() |
![]() |
# 1 |
Member
Регистрация: 18.11.2002
Адрес: Россия, Красноярск
Пол: Male
Сообщения: 310
![]() |
firewall на iptables
Посоветуйте стену которая на iptables работает. Тут уже пролетал некий shorewall, ещё вроде SUSE Firewall нефиговая весч говорят.... Короче, посоветуйте чего-нибудь ещё.... чтоб конфигурить полегче было.
![]() |
![]() |
![]() |
# 3 |
Member
Регистрация: 18.11.2002
Адрес: Россия, Красноярск
Пол: Male
Сообщения: 310
![]() |
Межет и так... Но чего-то у меня не пашет... Ручки кривые наверное...
Вот пример: есть сервак (192.168.1.1) и хочу я, чтоб на нём были открыты только 80, 443, 25, 110 порты, пишу такие вот строчки: iptables -F iptables -A INPUT -p TCP -s 0/0 -d 192.168.1.1 --dport 0:65000 -j DROP iptables -A INPUT -p UDP -s 0/0 -d 192.168.1.1 --dport 0:65000 -j DROP iptables -I INPUT -p TCP -s 0/0 -d 192.168.1.1 --dport 53 -j ACCEPT iptables -I INPUT -p UDP -s 0/0 -d 192.168.1.1 --dport 53 -j ACCEPT iptables -I INPUT -p TCP -s 0/0 -d 192.168.1.1 --dport 80 -j ACCEPT iptables -I INPUT -p TCP -s 0/0 -d 192.168.1.1 --dport 443 -j ACCEPT iptables -I INPUT -p TCP -s 0/0 -d 192.168.1.1 --dport 25 -j ACCEPT iptables -I INPUT -p TCP -s 0/0 -d 192.168.1.1 --dport 110 -j ACCEPT Сканирую какой-то штукой (Shadow scaner или чего-то такое) и он показывает, что все порты открыты. В чём мой косяк? Вообще если не лень может напишите пример стенового скрипта для случая: есть сетка (например 80.91.123.0) есть сервак, в нём две сетевухи одна в локальной сетке (80.91.123.1), другая в инете (217.74.156.45), так вот надо, чтоб из инета в локальную сетку и из локалки в инет ходило всё а на серваке были открыты только 80, 443, 110, 25, 53, 22 порты, причём 22 порт был доступен только с 217.74.156.76). НАТ не используется. Вот такая вот задачка. |
![]() |
![]() |
# 5 |
Member
Регистрация: 26.08.2002
Адрес: Germany
Сообщения: 232
![]() ![]() ![]() |
См. выше ....
__________________
Я - root, мне всё разрешено... ... и это тоже echo "I am king" | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see' & Последний раз редактировалось Gennadi; 20.06.2003 в 21:10. |
![]() |
![]() |
# 6 |
Guest
Сообщения: n/a
|
--cat-rc.firewall---
#!/bin/bash IF_INT="eth1" IF_EXT="eth0" IPADDR=`ifconfig $IF_EXT|grep "inet addr"|awk -F" " -- '{print($2)}'|awk -F":" -- '{print($2)}'` IPINT=`ifconfig $IF_INT|grep "inet addr"|awk -F" " -- '{print($2)}'|awk -F":" -- '{print($2)}'` LOCALNET=$IPINT/24 ROUTER=`ifconfig|grep "inet addr"|awk -F" " -- '{print($2)}'|awk -F":" -- '{print($2)}'` LOOPBACK=`ifconfig lo|grep "inet addr"|awk -F" " -- '{print($2)}'|awk -F":" -- '{print($2)}'` IPT="/usr/sbin/iptables" ECHO="/usr/bin/echo" TRUSTED_HOSTS="192.168.x.2 192.168.x.3..." MASQUERADE_HOSTS="192.168.x.4 192.168.x.5..." # Open port for outside IV_PORTS="25 110" IV_ICMP="echo-request" # Open port for external connection PUBLIC_PORTS="22" PUBLIC_ICMP="echo-request" EXCLUDE_HOST="192.168.x.5 192.168.x.6" EXCLUDE_PORT="15515 15516" case "$1" in 'stop') # Clear all chains/tables $IPT -F $IPT -t nat -F $IPT -t mangle -F $IPT -X TCP_FLAGS $IPT -X ACCT $IPT -X $IF_EXT $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT ;; 'start') # Calculating all traffic $IPT -N ACCT $IPT -A ACCT -j RETURN $IPT -A ACCT -j RETURN $IPT -A INPUT -i $IF_EXT -j ACCT $IPT -A OUTPUT -o $IF_EXT -j ACCT $IPT -P INPUT DROP ## Рули по умолчанию $IPT -P FORWARD DROP ## Рули по умолчанию $IPT -P OUTPUT ACCEPT ## Рули по умолчанию # All for himself, but througth loopback for host in $ROUTER do $IPT -A INPUT -s $host -i lo -j ACCEPT done # Trusted hosts allow all for host in $TRUSTED_HOSTS do $IPT -A FORWARD -d $host -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -t nat -A POSTROUTING -s $host -o $IF_EXT -j SNAT --to $IPADDR $IPT -A FORWARD -s $host -j ACCEPT done # Accept only right packets $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT for host in $MASQUERADE_HOSTS do $IPT -t nat -A POSTROUTING -p icmp -s $host -o $IF_EXT -j SNAT --to $IPADDR $IPT -A FORWARD -d $host -m state --state ESTABLISHED,RELATED -j ACCEPT for port in $IV_PORTS do for proto in tcp udp do $IPT -t nat -A POSTROUTING -p $proto -s $host -o $IF_EXT --dport $port -j SNAT --to $IPADDR done done $IPT -A FORWARD -s $host -j ACCEPT done #Exclude hosts: for host in $EXCLUDE_HOST do for port in $EXCLUDE_PORT do for proto in tcp udp do $IPT -t nat -A POSTROUTING -p $proto -s $host -o $IF_EXT --dport $port -j SNAT --to $IPADDR done done done # $IPT -A INPUT -i $IF_EXT -s ! $LOCALNET -p icmp -j REJECT - раскомментировать, если не хотите, чтобы сервер снаружи откликался на пинги # "паранойя" ![]() $IPT -N TCP_FLAGS $IPT -F TCP_FLAGS $IPT -A TCP_FLAGS -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A TCP_FLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A TCP_FLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP $IPT -A TCP_FLAGS -p tcp --tcp-option 64 -j DROP $IPT -A TCP_FLAGS -p tcp --tcp-option 128 -j DROP $IPT -A INPUT -i $IF_EXT -p tcp -j TCP_FLAGS # Rules for outside for port in $PUBLIC_PORTS do for proto in tcp udp do $IPT -A INPUT -p $proto --dport $port -m state --state NEW -j ACCEPT done done for type in $PUBLIC_ICMP do $IPT -A INPUT -p icmp --icmp-type $type -j ACCEPT done # Rules for inside $IPT -A INPUT -s $LOCALNET -j ACCEPT $IPT -N $IF_EXT $IPT -A $IF_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A $IF_EXT -m state --state NEW -i ! $IF_EXT -j ACCEPT # $IPT -A $IF_EXT -i $IF_EXT -m limit -j LOG --log-prefix "Bad packet from $IF_EXT:" # $IPT -A $IF_EXT -i ! $IF_EXT -m limit -j LOG --log-prefix "Bad packet not from $IF_EXT:" $IPT -A INPUT -j $IF_EXT $IPT -A FORWARD -j $IF_EXT ;; 'restart') $0 stop && $0 start ;; *) echo "usage $0 start|stop|restart" ;; esac ---end-of-cat-rc.firewall IF_INT - внутренний интерфейс IF_EXT - внешний TRUSTED_HOSTS - доверенные хосты(которым порты не режутся) MASQ_HOSTS - все остальные, которым можно ходить по портам, опиманным в IV_PORTS PUBLIC_PORTS - порты, которые будут видны снаружи EXCLUDE_HOST - хосты из локалки, которым нужны дополнительные порты(EXCLUDE_PORT - например, какие-нть банковские системы) Последний раз редактировалось Dimez; 27.06.2003 в 22:37. |
![]() |
# 7 |
Member
Регистрация: 26.08.2002
Адрес: Germany
Сообщения: 232
![]() ![]() ![]() |
---- дополнение -----
Этот скрипт будет работать на дистрибутивах (например SuSE...), где ifconfig выглядит так: Link encap:Ethernet HWaddr 00:85:AF:02:F1:7D inet addr :192.168.x.x Bcast:192.168.x.x Mask:255.255.255.x.. .....................и т.д. Если это ( например - Mandrake), где ifconfig выглядит так: Protokoll:Ethernet Hardware Adresse 00:85:AF:02:F1:7D inet Adresse :192.168.x.x Bcast:192.168.x.x Mask:255.255.255.x.. .....................и т.д. то в этом скрипте нужно внести соответствующие изменения: inet addr заменить на inet Adresse PS:На других дистрибутивах посмотрите ifconfig.
__________________
Я - root, мне всё разрешено... ... и это тоже echo "I am king" | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see' & Последний раз редактировалось Gennadi; 01.07.2003 в 01:30. |
![]() |
![]() |
# 9 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Doku po iptables prochitat nado nawernoe ;-))).
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 10 |
Member
Регистрация: 18.11.2002
Адрес: Россия, Красноярск
Пол: Male
Сообщения: 310
![]() |
helldomain А перечитал их уже....
Чего-то всё равно я гоню... Пишу напрмер: iptables -A INPUT -p UDP -d 192.168.1.1 --dport 0:1024 - j REJECT Сканирую на порты, а там нифига не изменилось, т.е. всё открыто... Чего я неправильно делаю? |
![]() |
![]() |
# 11 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
A kto policy prohoda po chainam delat budet ;-))).
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 12 |
Member
Регистрация: 18.11.2002
Адрес: Россия, Красноярск
Пол: Male
Сообщения: 310
![]() |
helldomain
А они все ACCEPT. Т.е. #iptables -P INPUT ACCEPT #iptables -P FORWARD DENY #iptables -P OUTPUT ACCEPT А то чего нельзя я пытался вышеупомянутой строчкой запретить, а оно не канает, почему? |
![]() |
![]() |
# 13 |
Member
Регистрация: 26.08.2002
Адрес: Germany
Сообщения: 232
![]() ![]() ![]() |
MoHaX
Я же тебе давал рабочий скрипт firewall'a, почему ты ещё мучаешься? http://imho.ws/showthread.php?s=&threadid=32071 Если есть вопросы или нужны разъяснения - пиши. Подкорректирую.
__________________
Я - root, мне всё разрешено... ... и это тоже echo "I am king" | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see' & Последний раз редактировалось Gennadi; 31.07.2003 в 23:25. |
![]() |
![]() |
# 14 |
Member
Регистрация: 18.11.2002
Адрес: Россия, Красноярск
Пол: Male
Сообщения: 310
![]() |
Gennadi
Да, норамальный скрипт, спасибо. А мучаюсь я потому сам их делать хочу, а не готовыми пользоваться... Вот конкретный вопрос: есть комп (Линукс РедХат 7.3) на нём два eth (eth1 - внешний (реальный айпи 213.25.34.45), eth0 внутренний (реальный айпи (213.25.34.129 и "серый" айпи 192.168.1.1), есть соответсвенно две сетки 213.25.34.128 (все адреса реальные) и 192.168.1.0 (уходят через нат). Как я его закрыл: iptables - P INPUT ACCEPT iptbales - A INPUT -p TCP -d 213.25.34.45 -j REJECT iptbales - A INPUT -p TCP -d 213.25.34.129 -j REJECT iptbales - I INPUT -p TCP -d 213.25.34.45 --dport 80 -j ACCEPT iptbales - I INPUT -p TCP -d 213.25.34.45 --dport 443 -j ACCEPT iptbales - I INPUT -p TCP -d 213.25.34.45 --dport 22 -j ACCEPT iptbales - I INPUT -p UDP -d 213.25.34.45 --dport 53 -j ACCEPT Сканирую 213.25.34.45 и лицезрею кучу открытых портов, почему? |
![]() |
![]() |
# 15 |
Member
Регистрация: 26.08.2002
Адрес: Germany
Сообщения: 232
![]() ![]() ![]() |
MoHaX
В начале скрипта обычно пишут такие правила: 1. Этим сначала удаляются все правила iptables. iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X 2. Этим закрываются все порты. iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP 3. Потом пишут правила, которыми открывают нужтые порты или NAT и так далее.....
__________________
Я - root, мне всё разрешено... ... и это тоже echo "I am king" | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see' & |
![]() |
![]() |
# 16 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ugu. I eto praalno.
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 17 |
Member
Регистрация: 18.11.2002
Адрес: Россия, Красноярск
Пол: Male
Сообщения: 310
![]() |
Ещё один вопрос. Ситуация такая есть один реальный айпишник, есть серая сетка которая под него маскарадится.
Я пропускаю весь траффик без флага SYN на внешнем интерфейсе вот этаким способом /sbin/iptables -I INPUT -i eth1 -p TCP -d 80.233.120.2 ! --syn -j ACCEPT Всё работает кроме ФТП. В чём проблема? Может я чего не так делаю, но мысля была пропускать всё чего идёт в ответ на запрос из моей сетки и не пропускать то чего хочет соеденится. |
![]() |
![]() |
# 18 |
Junior Member
Регистрация: 19.08.2002
Сообщения: 67
![]() |
Попробуй очень прелестнaя штукаFirewall Builder.
__________________
Don't worry, be happy And Remember: Everyone seems normal until you get to know them. ![]() |
![]() |
![]() |
# 19 |
Newbie
Регистрация: 04.08.2003
Сообщения: 17
![]() |
Если запретить входящие соединения, то фтп работать не будет. В соответсвии с протоколом данные передаются от сервера к клиенту по отдельному соединению которое устанавливается со стороны сервера после того как клиент перед этим передает свои параметры (ип, порт). Можно включить "пассивный" режим (PASV , passive mode) в настройках фтп клиента. По идее у тебя и irc yt будет работать (DCC). Если соединения разрешишь принимать, не забудь посмотреть чтобы был загружен модули ip_conntrack и ip_conntrack_ftp
|
![]() |