# Не закрывает порт в iptables [Решено]

## ntsite

Всем доброе время суток!

Начну с информации о самой ОС

Стоит на сервере gentoo, версия ядра - 2.6.26-gentoo-r3 (SMP).

Поднят net-firewall/iptables-1.4.0-r1

Вот правила самого iptables

```
#!/bin/sh                                                            

# Generic IPTables script, accept all by default                     

# path to your iptables executable                                   

IPT=/sbin/iptables                                                   

                                                                     

$IPT -F                                                              

$IPT -t nat -F                                                       

                                                                     

$IPT -P INPUT ACCEPT                                                 

$IPT -P OUTPUT ACCEPT                                                

$IPT -P FORWARD DROP                                                 

                                                                     

export LAN=eth0                                                      

export LAN2=eth1                                                     

export WAN=ppp0                                                      

export WAN2=ppp1                                                     

COMBLOCK="0:1 13 98 111 161:162 1214 1999 2049 3049 4329 6346 8000 8008 8080 12345 65535"

TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"   

UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000"

# Адреса все присать не буду, потому что их достаточно много

KAB20="192.168.100.1 192.168.100.2 192.168.100.3 192.168.100.4 192"

KAB21="192.168.100.11 192.168.100.12 192.168.100.13 192.168.100.14"

KAB22="192.168.100.90 192.168.100.21 192.168.100.22 192.168.100.23"

KAB23="192.168.100.31 192.168.100.32 192.168.100.33 192.168.100.34"

KAB30="192.168.100.41 192.168.100.42 192.168.100.43 192.168.100.44"

KAB31="192.168.100.51 192.168.100.52 192.168.100.53 192.168.100.54"

ADM="192.168.100.72 192.168.100.73 192.168.100.74 192.168.100.75"

$IPT -I INPUT 1 -i ${LAN} -j ACCEPT                      

$IPT -I INPUT 1 -i ${LAN2} -j ACCEPT                     

$IPT -I INPUT 1 -i lo -j ACCEPT                          

$IPT -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT

$IPT -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

echo -n "FW: Blocking attacks to TCP port"  

for i in $TCPBLOCK;                         

do                                          

 echo -n "$i "                              

  $IPT -A INPUT   -p tcp --dport $i  -j DROP

  $IPT -A OUTPUT  -p tcp --dport $i  -j DROP

  $IPT -A FORWARD -p tcp --dport $i  -j DROP

done                                        

echo ""                                     

echo -n "FW: Blocking attacks to UDP port " 

for i in $UDPBLOCK;                         

do                                          

 echo -n "$i "                              

  $IPT -A INPUT   -p udp --dport $i  -j DROP

  $IPT -A OUTPUT  -p udp --dport $i  -j DROP

  $IPT -A FORWARD -p udp --dport $i  -j DROP

done                                        

echo ""                                     

$IPT -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

$IPT -A INPUT -p TCP --dport 80 -i ${WAN} -j ACCEPT 

$IPT -A INPUT -p TCP --dport 21 -i ${WAN} -j ACCEPT 

$IPT -A INPUT -p TCP --dport 21 -i ${LAN2} -j ACCEPT

$IPT -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

$IPT -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

$IPT -I FORWARD -i ${LAN} -d 192.168.100.0/255.255.0.0 -j DROP  

$IPT -A FORWARD -i ${LAN} -s 192.168.100.0/255.255.0.0 -j ACCEPT

$IPT -A FORWARD -i ${WAN} -d 192.168.100.0/255.255.0.0 -j ACCEPT

echo -n "FW: accept connection MASQUERADE internet ADM: "

for i in $ADM;                                           

do                                                       

 echo -n "$i "                                           

$IPT -t nat -A POSTROUTING -o ${WAN} -s $i -j MASQUERADE 

done                                                     

echo ""                                                  

$IPT -P FORWARD ACCEPT                                           

$IPT -A FORWARD -i ${WAN2} -d 192.168.100.0/255.255.0.0 -j ACCEPT

$IPT -t nat -A POSTROUTING -o ${WAN2} -j MASQUERADE              

echo -n "FW: accept connection squid internet ADM: "                            

for i in $ADM;                                                                  

do                                                                              

 echo -n "$i "                                                                  

    $IPT -t nat -A PREROUTING -p tcp --dport 80 -s $i -j REDIRECT --to-port 3128

done                                                                            

echo ""                                                                         

echo -n "FW: accept connection squid internet Kab-20: "                         

for i in $KAB20;                                                                

do                                                                              

 echo -n "$i "                                                                  

    $IPT -t nat -A PREROUTING -p tcp --dport 80 -s $i -j REDIRECT --to-port 3128

done                                                                            

echo ""                                                                         

echo -n "FW: deny connection squid internet Kab-22: "                           

for i in $KAB22;                                                                

do                                                                              

 echo -n "$i "                                                                  

    $IPT -A INPUT -i ${LAN} -p TCP --dport 3128 -s $i -d 192.168.100.254 -j DROP

done                                                                            

echo ""                                                                         

echo 1 > /proc/sys/net/ipv4/ip_forward                              

for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
```

Стоит прозрачный прокси (squid). Если в браузере пользователя не указывать настройки прокси, то все блокирует как и надо. Нет прямого доступа в интернет и само собой не перекидывает пакетики на прокси. Но если явно указать в браузере прокси, то как я не пробовал, какие бы правила не писал, клиент все равно ходит в игнтернет и порт 3128 - не блокируется.

Вот хотел поинтересоваться, где зарыта собака... скорей всего в правилах ошибся, но не сам не вижу причины  :Sad: 

P.S. Если какой то информации не хватает, то выложу без проблем  :Smile: Last edited by ntsite on Tue Jan 20, 2009 11:58 pm; edited 1 time in total

----------

## ntsite

Нашел причину...

Сперва изменил правило для закрытия порта

```
echo -n "FW: deny connection squid internet Kab-22: "        

for i in $KAB22;                                             

do                                                           

 echo -n "$i "                                               

    $IPT -A INPUT -i ${LAN} -p TCP --dport 3128 -s $i -j DROP

done                                                         

echo ""                                                      
```

А после, убрал правило, которое разрешает ходить всем пакетикам на интерфейс лан

```
$IPT -I INPUT 1 -i ${LAN} -j ACCEPT
```

Можно ли это правило изменить так, чтобы было все, кроме 3128 используя "!".

Если кто знает, подскажите пожалуйста с синтаксисом...

Например что то типа того, не знаю прав ли я

```
$IPT -I INPUT 1 -i ${LAN} -p tcp --dport ! 3128 -j ACCEPT
```

Но не уверен, будет ли работоспособно мое творение  :Smile:  Просто если использовать первоначальное правило без указания порта, то никакие другие правила на закрытие портов на интерфейс Lan не работали...

----------

## ba

 *ntsite wrote:*   

> Например что то типа того, не знаю прав ли я
> 
> ```
> $IPT -I INPUT 1 -i ${LAN} -p tcp --dport ! 3128 -j ACCEPT
> ```
> ...

 

работать будет

----------

## ntsite

Все, спасибо, вопрос решили  :Smile: 

----------

## ntsite

Попробовал правило

```
$IPT -I INPUT 1 -i ${LAN} -p tcp --dport ! 3128 -j ACCEPT
```

И получилось так, что левый адрес (который у меня нигде не был зарегестрирован) смог выйти в интернет.

Думаю проще убрать правило типа открыть все порты, лучше будет окрывать порты по надобности, тем более безопаснее для системы.

----------

