IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Пингвинятник (ОС *NIX) (http://www.imho.ws/forumdisplay.php?f=76)
-   -   firewall на iptables (http://www.imho.ws/showthread.php?t=30719)

MoHaX 28.05.2003 21:39

firewall на iptables
 
Посоветуйте стену которая на iptables работает. Тут уже пролетал некий shorewall, ещё вроде SUSE Firewall нефиговая весч говорят.... Короче, посоветуйте чего-нибудь ещё.... чтоб конфигурить полегче было. :баран:

noname 28.05.2003 22:54

если спросить меня то ничего лучше фаерволла натроенного ручками нет .
хоть знаешь что и где . :)

MoHaX 02.06.2003 20:31

Межет и так... Но чего-то у меня не пашет... Ручки кривые наверное...
Вот пример: есть сервак (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). НАТ не используется. Вот такая вот задачка.

Drakosha 04.06.2003 09:46

есть "GuardDog" и много других...

Gennadi 12.06.2003 23:21

См. выше ....

Dimez 27.06.2003 22:26

--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 - например, какие-нть банковские системы)

Gennadi 28.06.2003 23:58

---- дополнение -----
Этот скрипт будет работать на дистрибутивах (например 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.

Dimez 30.06.2003 19:25

Это если локаль взведена для рута :)
У меня такого нет...

helldomain 28.07.2003 05:29

Doku po iptables prochitat nado nawernoe ;-))).

MoHaX 28.07.2003 08:25

helldomain А перечитал их уже....
Чего-то всё равно я гоню... Пишу напрмер:
iptables -A INPUT -p UDP -d 192.168.1.1 --dport 0:1024 - j REJECT
Сканирую на порты, а там нифига не изменилось, т.е. всё открыто... Чего я неправильно делаю?

helldomain 29.07.2003 18:40

A kto policy prohoda po chainam delat budet ;-))).

MoHaX 30.07.2003 08:35

helldomain
А они все ACCEPT. Т.е. #iptables -P INPUT ACCEPT
#iptables -P FORWARD DENY
#iptables -P OUTPUT ACCEPT

А то чего нельзя я пытался вышеупомянутой строчкой запретить, а оно не канает, почему?

Gennadi 31.07.2003 20:41

MoHaX

Я же тебе давал рабочий скрипт firewall'a, почему ты ещё мучаешься?

http://imho.ws/showthread.php?s=&threadid=32071


Если есть вопросы или нужны разъяснения - пиши.

Подкорректирую.

MoHaX 01.08.2003 09:17

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 и лицезрею кучу открытых портов, почему?

Gennadi 01.08.2003 15:35

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 и так далее.....

helldomain 01.08.2003 16:38

Ugu. I eto praalno.

MoHaX 03.11.2003 10:05

Ещё один вопрос. Ситуация такая есть один реальный айпишник, есть серая сетка которая под него маскарадится.
Я пропускаю весь траффик без флага SYN на внешнем интерфейсе вот этаким способом /sbin/iptables -I INPUT -i eth1 -p TCP -d 80.233.120.2 ! --syn -j ACCEPT
Всё работает кроме ФТП. В чём проблема?

Может я чего не так делаю, но мысля была пропускать всё чего идёт в ответ на запрос из моей сетки и не пропускать то чего хочет соеденится.

Centauras 03.11.2003 18:54

Попробуй очень прелестнaя штукаFirewall Builder.

Crio 03.11.2003 20:06

Если запретить входящие соединения, то фтп работать не будет. В соответсвии с протоколом данные передаются от сервера к клиенту по отдельному соединению которое устанавливается со стороны сервера после того как клиент перед этим передает свои параметры (ип, порт). Можно включить "пассивный" режим (PASV , passive mode) в настройках фтп клиента. По идее у тебя и irc yt будет работать (DCC). Если соединения разрешишь принимать, не забудь посмотреть чтобы был загружен модули ip_conntrack и ip_conntrack_ftp

V0iD 03.11.2003 23:50

Чтобы правильно работал ftp, надо разрешить related и established коннекты.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

MoHaX 04.11.2003 12:22

Crio
А как это сделать, в смысле посмотреть загружены модули или нет?

Centauras
Ссылка не рабочая.....

Innocead 04.11.2003 20:14

MoHaX
1. А ты еще раз кликни сюда
2. сюда

MoHaX 05.11.2003 09:47

Innocead
Понял спасибо....

V0iD
Разрешил я такие соеденения, но нифига не проканало, по в ФТП клиенте не выствил пассивный режим. Total Commander gисал чего-то типа "500 I won't open a connection to 192.168.1.16 (only 80.233.120.2)"

А чем активный режим отличается от пассивного?
Извиняюсь за оффтопик.

V0iD 05.11.2003 10:33

MoHaX
Активный - это когда на твоя система слушает порт, а фтп коннектит туда и шлет данные. Пассивный - фтп слушает порт, а ты коннектишь на этот порт и получаешь данные.

Gennadi 05.11.2003 13:04

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

MoHaX 27.11.2003 13:34

Так чего мне открывать надо?
Я сделал вот этак
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.