Автор Гілка: Iptables. Допоможіть добудувати правила...  (Прочитано 1822 раз)

Відсутній Sirko

  • Графоман
  • ****
  • дописів: 299
  • Карма: +0/-0
  • Що новенького?
Привіт! Допоможіть розібратись із правилами iptables (туторіал я читав, але видно не все зрозумів... ).
Отже, ситуація яка. Є машина, на якій стоїть сквід. Треба щоб з локальної мережі був доступ до сквіда і ссш (або повністю відкритий доступ), ззовні доступу не було, і щоб сквід міг виконувати свою роль. Що я наваяв:
#!/bin/bash

admin1=192.168.0.212    #Адмін 1
admin2=192.168.0.11     #Адмін 2

iface_external=eth0     #External interface - 217.25.199.160
iface_internal=eth2     #Internal interface - 192.168.0.213

ip_internal=192.168.0.213
ip_external=217.25.199.160

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

#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
# 21
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 --dport $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
От, але коли я запускаю ці правила, то в мене немає сквіда... Що і куди треба дописати?
Наперед вдячний за відповідь.
[Kubuntu User]

Відсутній Sirko

  • Графоман
  • ****
  • дописів: 299
  • Карма: +0/-0
  • Що новенького?
От, знайшов чому не пускає до сквіда:
замінив
iptables -t filter -A OUTPUT -p tcp --dport $proxy_port -j ACCEPT
на
iptables -t filter -A OUTPUT -p tcp --sport $proxy_port -j ACCEPT
Але при скануванні зовнішнього інтерфейсу показує багато відкритих портів. Що треба дописати, щоб такого не було? І взагалі, може специ підкажуть, що ще треба/можна вдосконалити?
[Kubuntu User]

Відсутній Sirko

  • Графоман
  • ****
  • дописів: 299
  • Карма: +0/-0
  • Що новенького?
Такс, ще цікава інфа (для мене точно :) )
при скані зовнішнього ІР даної машини (з іншої) видаються наступні відкриті порти:
PORT      STATE    SERVICE
22/tcp    open     ssh
111/tcp   open     rpcbind
443/tcp   open     https
885/tcp   open     unknown
3128/tcp  open     squid-http
3306/tcp  open     mysql
5802/tcp  open     vnc-http-2
5902/tcp  open     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
MAC Address: 00:15:60:0E:B4:A2 (Unknown)

Nmap run completed -- 1 IP address (1 host up) scanned in 1.812 seconds
а при скані локального ІР - відкритий тільки порт сквіда....
PORT     STATE SERVICE
3128/tcp open  squid-http
MAC Address: 00:14:38:B9:80:3E (Unknown)
От така петрушка... Що треба написати, щоб ззовні зовсім не було видно ніяких відкритих портів і працював нормально сквід?
[Kubuntu User]

Praporshic

  • Гість
Взагалі, зручніше (НМД) заборонити "незамовлені" з'єднання зовні  окрім де-яких вийнятків (SSH, proxy, pop3/imap/smtp, http, ftp.....) залежно від Ваших потреб, а OUTPUT взагалі не фільтрувати (хоча я можу й помилятись).
тобто, у Вашомі випадку буде десь таке (шматок мого /etc/sysconfig/iptables):
Цитата
# Generated by iptables-save v1.3.3 on Tue Mar  7 16:07:50 2006
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 127.0.0.0/255.0.0.0 -i lo -j ACCEPT
-A INPUT -s 192.168.0.1 -i lo -j ACCEPT
-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -p tcp -m tcp -m state ! --tcp-flags SYN,RST,ACK SYN --state NEW -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -d 224.0.0.0/255.0.0.0 -j DROP
-A INPUT -s 192.168.0.212 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.0.11 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp -i eth0 --icmp-type any -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
COMMIT
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
« Змінено: 2006-04-11 11:27:15 від Praporshic »

Відсутній hse

  • Графоман
  • ****
  • дописів: 473
  • Карма: +0/-0
  • Gentoo Linux
Файервол паскудний... я би за такий погнав на перездачу ;)

Ти доступ відкрив правилом
iptables -t filter -A INPUT -i $iface_external -j ACCEPTзроби як мінімум
iptables -A INPUT -p ALL -i eth0 -s 0/0 -d 217.25.???.??? -m state --state ESTABLISHED,RELATED -j ACCEPT
А ще краще дивись як зроблено у прикладах І на базі цього прикладу перепиши свій.
Там наприклад "аналог" твого правела є такий:
# Rules for incoming packets from Internet
$iptables -A INPUT -p ALL -m conntrack -i ${ExternalDevice} -s 0/0 -d ${ExternalHostIP} --ctstate ESTABLISHED,RELATED -j ACCEPT

То що є локально форвардити не треба
iptables -t filter -A FORWARD -p tcp --dport $proxy_port -j ACCEPTзайвий

А нащо взагалі форвардінг хай всі через сквід ходять коли мможна...

А взагалі сучасні фаєрволи потужні тим, що дозволяють відслідковувати пакети по приналежності їх до сеансів звязку, працювати з всіма даними заголовка ТСР і навіть аналізувати конкретні протоколи котрі працюють поверху ТСР/ІР та поле даних... Так, що вдосконалити можна дуже багато почніть з того, що включить логи пакетів що відкидаються і пробуйте набрати вище вказаний приклад...
« Змінено: 2006-04-11 15:03:46 від hse »
бушократія - цинічний помаранчевий геноцид, витравлювання Української Нації, плюс мікрософтизація всієї країни.

Відсутній Sirko

  • Графоман
  • ****
  • дописів: 299
  • Карма: +0/-0
  • Що новенького?
А можна конфіги на мило? Щоб у шматках не ковирятись :)
[Kubuntu User]

Відсутній Sirko

  • Графоман
  • ****
  • дописів: 299
  • Карма: +0/-0
  • Що новенького?
Файервол паскудний... я би за такий погнав на перездачу ;)
Знаю, обіцяю виправитись :)
А нащо взагалі форвардінг хай всі через сквід ходять коли мможна...
Ну, наприклад начальник не хоче щоб в логах сквіда було записано, куди він ходе ;) Тому доводиться натити його...
За поради дякую, буду курити мани далі (хоча незабаром вже очі на лоба полізуть)
[Kubuntu User]

hse(Guest)

  • Гість
Вам би десь про мережі прочитати... без знань ТСР/ІР розібратись в цьому ділі буде важкувато.

1. щоб ТСР встановило з'єднання повинен пройти сианс відкриття зєднання (сокету) обмін між вузлами спец пакетами syn/asck коли ці пакети дропати то сеанс ТСР не встановиться (порт закритий) тому екран повинен локальним користувачам дозволяти ініціювати з'єднання, а зовнішнім ні, далі екран повинен аналізувати пакети і пропускати тільки ті котрі відповідають встановленим сеансам. У правилах це виглядатиме приблизно так:
для дозволу з'єднання в кінці
-m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
для заборони ініціалізації з'єднання в кінці
-m state --state ESTABLISHED,RELATED -j ACCEPT

для пінгу не треба всі icmp пропускати достатньо
--icmp-type 3 -j ACCEPT
це мінімум, а потім по мірі необхідності можна розвивати...