![]() |
firewall на iptables
Посоветуйте стену которая на iptables работает. Тут уже пролетал некий shorewall, ещё вроде SUSE Firewall нефиговая весч говорят.... Короче, посоветуйте чего-нибудь ещё.... чтоб конфигурить полегче было. :баран:
|
если спросить меня то ничего лучше фаерволла натроенного ручками нет .
хоть знаешь что и где . :) |
Межет и так... Но чего-то у меня не пашет... Ручки кривые наверное...
Вот пример: есть сервак (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). НАТ не используется. Вот такая вот задачка. |
есть "GuardDog" и много других...
|
См. выше ....
|
--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 - например, какие-нть банковские системы) |
---- дополнение -----
Этот скрипт будет работать на дистрибутивах (например 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. |
Это если локаль взведена для рута :)
У меня такого нет... |
Doku po iptables prochitat nado nawernoe ;-))).
|
helldomain А перечитал их уже....
Чего-то всё равно я гоню... Пишу напрмер: iptables -A INPUT -p UDP -d 192.168.1.1 --dport 0:1024 - j REJECT Сканирую на порты, а там нифига не изменилось, т.е. всё открыто... Чего я неправильно делаю? |
A kto policy prohoda po chainam delat budet ;-))).
|
helldomain
А они все ACCEPT. Т.е. #iptables -P INPUT ACCEPT #iptables -P FORWARD DENY #iptables -P OUTPUT ACCEPT А то чего нельзя я пытался вышеупомянутой строчкой запретить, а оно не канает, почему? |
MoHaX
Я же тебе давал рабочий скрипт firewall'a, почему ты ещё мучаешься? http://imho.ws/showthread.php?s=&threadid=32071 Если есть вопросы или нужны разъяснения - пиши. Подкорректирую. |
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 и лицезрею кучу открытых портов, почему? |
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 и так далее..... |
Ugu. I eto praalno.
|
Ещё один вопрос. Ситуация такая есть один реальный айпишник, есть серая сетка которая под него маскарадится.
Я пропускаю весь траффик без флага SYN на внешнем интерфейсе вот этаким способом /sbin/iptables -I INPUT -i eth1 -p TCP -d 80.233.120.2 ! --syn -j ACCEPT Всё работает кроме ФТП. В чём проблема? Может я чего не так делаю, но мысля была пропускать всё чего идёт в ответ на запрос из моей сетки и не пропускать то чего хочет соеденится. |
Попробуй очень прелестнaя штукаFirewall Builder.
|
Если запретить входящие соединения, то фтп работать не будет. В соответсвии с протоколом данные передаются от сервера к клиенту по отдельному соединению которое устанавливается со стороны сервера после того как клиент перед этим передает свои параметры (ип, порт). Можно включить "пассивный" режим (PASV , passive mode) в настройках фтп клиента. По идее у тебя и irc yt будет работать (DCC). Если соединения разрешишь принимать, не забудь посмотреть чтобы был загружен модули ip_conntrack и ip_conntrack_ftp
|
Чтобы правильно работал ftp, надо разрешить related и established коннекты.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT |
Crio
А как это сделать, в смысле посмотреть загружены модули или нет? Centauras Ссылка не рабочая..... |
|
Innocead
Понял спасибо.... V0iD Разрешил я такие соеденения, но нифига не проканало, по в ФТП клиенте не выствил пассивный режим. Total Commander gисал чего-то типа "500 I won't open a connection to 192.168.1.16 (only 80.233.120.2)" А чем активный режим отличается от пассивного? Извиняюсь за оффтопик. |
MoHaX
Активный - это когда на твоя система слушает порт, а фтп коннектит туда и шлет данные. Пассивный - фтп слушает порт, а ты коннектишь на этот порт и получаешь данные. |
MoHaX
.....А чем активный режим отличается от пассивного? ... Non-Passive Mode ( Aclive ) port 21, 20 C port>1024 -----------------> S port 21 C port>1024 <---------------- S port 21 C port >1024 <---------------- S port 20 (server initiates data xfr) C port >1024 ----------------> S port 20 Passive Mode port 21, >1024 C port>1024 -----------------> S port 21 C port>1024 <---------------- S port 21 C port >1024 ----------------> S port > 1024 (client requests data xfr) C port >1024 <--------------- S port > 1024 |
Так чего мне открывать надо?
Я сделал вот этак iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p TCP --sport 20:21 --dport 1024:65535 -j ACCEPT Загрузил модули modprobe ip_conntack и modprobe ip_conntack_ftp И нифига не произошло, как не работало так и не работает! Обясните подробно..... |
| Часовой пояс GMT +4, время: 19:15. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.