LINUX.ORG.RU
ФорумAdmin

Настройка iptables на CentOS

 ,


1

3

Здравствуйте! Проблема такая: к машине под CentOS 6.3 подключены две локалки и два провайдера. Нужно разрулить трафик таким образом: одна локалка ходит по к одному провайдеру, другая к другому.

eth0      Link encap:Ethernet  HWaddr 08:00:27:83:62:D0  
          inet addr:192.168.7.200  Bcast:192.168.7.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe83:62d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2055 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:166219 (162.3 KiB)  TX bytes:19169 (18.7 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:42:C5:6F  
          inet addr:192.168.1.28  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe42:c56f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1947 errors:0 dropped:0 overruns:0 frame:0
          TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:157154 (153.4 KiB)  TX bytes:2274 (2.2 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:D7:40:54  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed7:4054/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:784 errors:0 dropped:0 overruns:0 frame:0
          TX packets:786 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:76310 (74.5 KiB)  TX bytes:86624 (84.5 KiB)

eth3      Link encap:Ethernet  HWaddr 08:00:27:3E:29:60  
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe3e:2960/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:720 (720.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:31 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2644 (2.5 KiB)  TX bytes:2644 (2.5 KiB)

локалка 192.168.0.0 идет на 192.168.7.200 локалка 192.168.2.0 идет на 192.168.1.28

Здесь настройки iproute, которые прописываются при загрузке:

#!/bin/sh
ip r a 192.168.7.0/24 dev eth0  proto kernel  scope link  src 192.168.7.200 t T1
ip r a 192.168.2.0/24 dev eth3  proto kernel  scope link  src 192.168.2.1 t T1
ip r a 192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.28 t T1
ip r a 192.168.0.0/24 dev eth2  proto kernel  scope link  src 192.168.0.1 t T1
ip route add default via 192.168.7.200 table T1
ip rule add from 192.168.0.0/24 table T1
#
ip r a 192.168.7.0/24 dev eth0  proto kernel  scope link  src 192.168.7.200 t T2
ip r a 192.168.2.0/24 dev eth3  proto kernel  scope link  src 192.168.2.1 t T2
ip r a 192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.28 t T2
ip r a 192.168.0.0/24 dev eth2  proto kernel  scope link  src 192.168.0.1 t T2
ip route add default via 192.168.1.28 table T2
ip rule add from 192.168.2.0/24 table T2
#

Вот правила iptables:

# Generated by iptables-save v1.4.7 on Fri Aug 28 12:38:01 2015
*nat
:PREROUTING ACCEPT [84:7398]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE 
-A POSTROUTING -o eth1 -j MASQUERADE 
COMMIT
# Completed on Fri Aug 28 12:38:01 2015
# Generated by iptables-save v1.4.7 on Fri Aug 28 12:38:01 2015
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [3:240]
-A INPUT -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT 
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
-A INPUT -i eth2 -p icmp -j ACCEPT 
-A INPUT -i eth3 -p icmp -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -i eth2 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -i eth2 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i eth3 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i eth3 -p udp -m udp --dport 53 -j ACCEPT 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT 
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 443 -j ACCEPT 
-A OUTPUT -o eth2 -p icmp -j ACCEPT 
-A OUTPUT -o eth3 -p icmp -j ACCEPT 
-A OUTPUT -s 192.168.0.0/24 -o eth2 -p tcp -m tcp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.0.0/24 -o eth2 -p udp -m udp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.2.0/24 -o eth3 -p tcp -m tcp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.2.0/24 -o eth3 -p udp -m udp --sport 53 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT 
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT 
COMMIT
# Completed on Fri Aug 28 12:38:01 2015

Проблема: У клиентских компов не загружаются сайты. Пишет: Unable to connect, хотя я открыл 80 и 443 порт на фаерволе. ПОдскажите пожалуйста, в чем ошибка? P.S. на машине еще подняты DNS и DHCP которые работают нормально. DNS на машине обращается к гугловскому DNS. Заранее спасибо!



Последнее исправление: Rino256 (всего исправлений: 1)

Ты их разрешил в цепочке OUTPUT (это локальный трафик от самого шлюза), а надо было в цепочке FORWARD (это уже «проходящий» трафик).

А у тебя же в FORWARD всё отбрасывается вообще.

Т.е. добавляй правила навроде:

iptables -I FORWARD -i eth2 -s 192.168.0.0/24 -o eth0 -p tcp -m multiport --destination-ports 80,443 -j ACCEPT

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

-I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 

EDIT: Также убедись, что у тебя в sysctl включен ip forward

nstorm
()
Последнее исправление: nstorm (всего исправлений: 1)
Ответ на: комментарий от nstorm

Сделал, как вы сказали: ip forward в sysctl был включен, 1 стоит в /proc/sys/net/ipv4/ip_forward

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

# Generated by iptables-save v1.4.7 on Fri Aug 28 14:19:54 2015
*nat
:PREROUTING ACCEPT [1838:164789]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [56:3734]
-A POSTROUTING -o eth0 -j MASQUERADE 
-A POSTROUTING -o eth1 -j MASQUERADE 
COMMIT
# Completed on Fri Aug 28 14:19:54 2015
# Generated by iptables-save v1.4.7 on Fri Aug 28 14:19:54 2015
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT 
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
-A INPUT -i eth2 -p icmp -j ACCEPT 
-A INPUT -i eth3 -p icmp -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -i eth2 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -i eth2 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i eth3 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i eth3 -p udp -m udp --dport 53 -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.2.0/24 -i eth3 -o eth1 -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A FORWARD -s 192.168.0.0/24 -i eth2 -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT 
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -j ACCEPT 
-A OUTPUT -p icmp -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 443 -j ACCEPT 
-A OUTPUT -o eth2 -p icmp -j ACCEPT 
-A OUTPUT -o eth3 -p icmp -j ACCEPT 
-A OUTPUT -s 192.168.0.0/24 -o eth2 -p tcp -m tcp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.0.0/24 -o eth2 -p udp -m udp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.2.0/24 -o eth3 -p tcp -m tcp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.2.0/24 -o eth3 -p udp -m udp --sport 53 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT 
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT 
COMMIT
# Completed on Fri Aug 28 14:19:54 2015

Но страницы не доступны. Мож какие еще порты открыть надо?

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

Хмм... а что скажет вывод «iptables -L FORWARD -v -n»?

Также стоит попробовать открыть пинги из локалок и проверить ping google.com с какого-нибудь клиента в локалке:

iptables -I FORWARD -p icmp -m icmp --icmp-type echo-request -j ACCEPT

Ну и если не поможет, еще попробовать убрать на время правило:

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

и поставить политику FORWARD в ACCEPT и посмотреть будет вообще работать (чтобы исключить что дело не в настройках iptables):

iptables -P FORWARD ACCEPT

nstorm
()
Последнее исправление: nstorm (всего исправлений: 1)
Ответ на: комментарий от nstorm

ВОт вывод iptables -L FOREARD -v -n

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     tcp  --  eth3   eth1    192.168.2.0/24       0.0.0.0/0           multiport dports 80,443 
    9   540 ACCEPT     tcp  --  eth2   eth0    192.168.0.0/24       0.0.0.0/0           multiport dports 80,443 
   84  7056 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 

вот полностью праавила :

# Generated by iptables-save v1.4.7 on Fri Aug 28 15:16:37 2015
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [1:60]
:OUTPUT DROP [0:0]
-A INPUT -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT 
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
-A INPUT -i eth2 -p icmp -j ACCEPT 
-A INPUT -i eth3 -p icmp -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -i eth2 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -i eth2 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i eth3 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i eth3 -p udp -m udp --dport 53 -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.2.0/24 -i eth3 -o eth1 -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A FORWARD -s 192.168.0.0/24 -i eth2 -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A FORWARD -p icmp -m icmp --icmp-type 8 -j ACCEPT 
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT 
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -j ACCEPT 
-A OUTPUT -p icmp -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 443 -j ACCEPT 
-A OUTPUT -o eth2 -p icmp -j ACCEPT 
-A OUTPUT -o eth3 -p icmp -j ACCEPT 
-A OUTPUT -s 192.168.0.0/24 -o eth2 -p tcp -m tcp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.0.0/24 -o eth2 -p udp -m udp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.2.0/24 -o eth3 -p tcp -m tcp --sport 53 -j ACCEPT 
-A OUTPUT -s 192.168.2.0/24 -o eth3 -p udp -m udp --sport 53 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT 
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT 
COMMIT
# Completed on Fri Aug 28 15:16:37 2015
# Generated by iptables-save v1.4.7 on Fri Aug 28 15:16:37 2015
*nat
:PREROUTING ACCEPT [625:58412]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [13:810]
-A POSTROUTING -o eth0 -j MASQUERADE 
-A POSTROUTING -o eth1 -j MASQUERADE 
COMMIT
# Completed on Fri Aug 28 15:16:37 2015

При пинге идут такие сообщения:

From 192.168.7.200 icmp_seq=1 Destination Host Unreachable

Получается проблема не в iptables?

Rino256
() автор топика
Ответ на: комментарий от Rino256
-A POSTROUTING -o eth0 -j MASQUERADE 
-A POSTROUTING -o eth1 -j MASQUERADE 

а на одну строку заменить нельзя?

-A POSTROUTING -o eth+ -j MASQUERADE 

а транзит из локалок на dns (53) не нуно?

-A FORWARD -s 192.168.2.0/24 -i eth3 -o eth1 -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A FORWARD -s 192.168.0.0/24 -i eth2 -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT 

у тебя политика все разрешает, накой ты для транзита правила пишешь? :FORWARD ACCEPT

axelroot
()
Последнее исправление: axelroot (всего исправлений: 2)
Ответ на: комментарий от Rino256

Чую, как пакеты уходят, но не приходят обратно. Может попробовать отключить rp_filter и включить accept_source_route? sysctl.conf:

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.accept_source_route = 1
net.ipv4.conf.default.accept_source_route = 1

areisp
()
Ответ на: комментарий от axelroot

У меня на этой машине поднят DNS, он работает. ПРи этом обязательно делать транзит на внешние dns?

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

Ээээ, forward без postrouting? У тебя все машины в локалках с public ip штоль?
А, вижу маскарад.
Попробуй почитать это

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 2)
Ответ на: комментарий от axelroot

а на одну строку заменить нельзя?

Не надо! Зачем тогда будут маскардится и все пакеты из вне в локалку и нихрена работать не будет.

а транзит из локалок на dns (53) не нуно?

Не нужно, т.к. у него DNSом этот самый сервак работает.

у тебя политика все разрешает, накой ты для транзита правила пишешь? :FORWARD ACCEPT

Потому что у него раньше в FORWARD стояло правило REJECT, которое он только потом убрал.

Короче не лезь, если не разобрался.

nstorm
()
Ответ на: комментарий от Rino256

У меня на этой машине поднят DNS, он работает. ПРи этом обязательно делать транзит на внешние dns?

Не надо.

При пинге идут такие сообщения:
From 192.168.7.200 icmp_seq=1 Destination Host Unreachable
Получается проблема не в iptables?

Да, не в нем. Увидел в чем проблема теперь у тебя:

ip route add default via 192.168.7.200 table T1

Ты указываешь маршрут через интерфейс самого роутера, а должен указывать next hop. Т.е. допустим чтобы через сеть 192.168.7.0/24 «попасть в Интернет» тебе надо шлюзом прописывать 192.168.7.1 (к примеру), то надо прописать так:

ip route add default via 192.168.7.1 table T1
Ну или подробнее:
ip route add default via 192.168.7.1 dev eth0 src 192.168.7.200 table T1

Если не понятно или не получится, пришли еще вывод основной таблицы маршрутов (ip route ls).

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

Благодарю за помощь! Заработало. Теперь понял свою ошибку, спасибо огромное! Ссори за туп, я тока начал постигать основы. Еще раз спасибо!

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

Да без проблем. Ты хотя бы с большей частью разобрался, только перепутал местами немного. :)

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