LINUX.ORG.RU

Iptables. Нужен совет


0

0

Привет всем!
Есть задача: закрыть на машине все порты снаружи, оставив только pop, smtp и proxy, с локалки доступ всем. Я наваял вот такой конфиг, но что-то мне в нем не нравится... Подскажите, что нужно/можно дописать, чтобы соответствовало задаче?
Мой конфиг:
#!/bin/bash

admin1=192.168.0.212 #Admin1
admin2=192.168.0.11 #Admin2

iface_external=eth0 #External interface - 217.xxx.xxx.xxx
iface_internal=eth2 #Internal interface - 192.168.0.2

ip_internal=192.168.0.2
ip_external=217.xxx.xxx.xxx

local_net=192.168.0.0/24

#Ports
ftp_port=21
ssh_port=22
smtp_port=25
http_port=80
pop3_port=110
https_port=443
proxy_port=3128

#Enable packet forward between interfaces
echo "1" > /proc/sys/net/ipv4/ip_forward

#Clear firewall rules
iptables --flush
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

#Default - all drop
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

#Drop X-win from internet
iptables -t filter -A INPUT -p tcp -m tcp -i eth0 --dport 6000:6063 -j DROP --syn

#Drop rpcbind from internet
iptables -t filter -A INPUT -p tcp -m tcp -i eth0 --dport 111 -j DROP --syn

#Drop ssh port from internet
iptables -t filter -A INPUT -p tcp -m tcp -i eth0 --dport 22 -j DROP --syn

#Drop 885 port from internet ???
iptables -t filter -A INPUT -p tcp -m tcp -i eth0 --dport 885 -j DROP --syn

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

#Enable ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A FORWARD -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

#Enable all on local interface
iptables -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
iptables -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT

# DNS.
iptables -t filter -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

iptables -t filter -A INPUT -i $iface_external -j ACCEPT
iptables -t filter -A OUTPUT -o $iface_external -j ACCEPT


#FTP
iptables -t filter -A INPUT -p tcp -s $admin1 -d $ip_internal --dport $ftp_port -j ACCEPT
iptables -t filter -A INPUT -p tcp -d $admin1 -s $ip_internal --sport $ftp_port -j ACCEPT
iptables -t filter -A INPUT -p tcp -s $admin2 -d $ip_internal --dport $ftp_port -j ACCEPT
iptables -t filter -A INPUT -p tcp -d $admin2 -s $ip_internal --sport $ftp_port -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp -s $admin1 -d $ip_internal --dport $ssh_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d $admin1 -s $ip_internal --sport $ssh_port -j ACCEPT
iptables -t filter -A INPUT -p tcp -s $admin2 -d $ip_internal --dport $ssh_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d $admin2 -s $ip_internal --sport $ssh_port -j ACCEPT

#SQUID (proxy)
iptables -t filter -A INPUT -p tcp --dport $proxy_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport $proxy_port -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport $proxy_port -j ACCEPT


iptables -t nat -A POSTROUTING -d 0.0.0.0/0 -j MASQUERADE


Что конкретно не нравится - вывод nmap (проверял с другой машины, у которой тоже есть выход наружу):
22/tcp filtered ssh
111/tcp filtered rpcbind
443/tcp open https
885/tcp filtered unknown
3128/tcp open squid-http
3306/tcp filtered mysql
5802/tcp filtered vnc-http-2
5902/tcp filtered vnc-2
6000/tcp filtered X11
6001/tcp filtered X11:1
6002/tcp filtered X11:2
6003/tcp filtered X11:3
6004/tcp filtered X11:4
6005/tcp filtered X11:5
6006/tcp filtered X11:6
6007/tcp filtered X11:7
6008/tcp filtered X11:8
6009/tcp filtered X11:9
6017/tcp filtered xmail-ctrl
6050/tcp filtered arcserve
10000/tcp open snet-sensor-mgmt

Хотелось-бы чтобы были видны только открытые порты, а те которые filtered вообще не показывались... И не получается выпустить наружу почту - пробовал по разному открывать порты, но или пользователи не могут приконектится (снаружи и изнутри сети) к серверу, или приходится тушить файрвол... Помогите советом, а то уже совсем замучался.
P.S. Про настройку читал, но видимо не все понял, так что сильно не пинайте :)
Заранее благодарен за ответ.

Sirko
() автор топика

> 1) закрыть на машине все порты снаружи, оставив только pop, smtp и proxy
> 2) с локалки доступ всем

Вопрос по 1-му пункту: +днс?
По 2-му: доступ с локалки только на сервер или и к Миру (имеется в виду не орбитальная станция :) )?

arsi ★★★★★
()

попробуй вдумчиво прочитать доки по iptables, у тебя одно правило противоречит другому.

anonymous
()
Ответ на: комментарий от arsi

> Вопрос по 1-му пункту: +днс?
Само собой :) В правила я вроде дописал, не проверял, работает, или нет...
>По 2-му: доступ с локалки только на сервер или и к Миру (имеется в виду не орбитальная станция :) )?
Ну, на даный момент только к серверу, вопрос по нату или чему-то другому не стоит. Что посоветуете?
>попробуй вдумчиво прочитать доки по iptables, у тебя одно правило противоречит другому.
Дык читал, но видимо не все понял, поетому и прошу совета.

Sirko
() автор топика
Ответ на: комментарий от Sirko

Хотя нат я сделал, вроде работает.

Sirko
() автор топика

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

MiracleMan ★★★★★
()
Ответ на: комментарий от Sirko

>Хотелось-бы чтобы были видны только открытые порты, а те которые filtered вообще не показывались...

а во фре есть net.inet.tcp.blackhole:)

FatBastard ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.