Установка IPTables

Я пытаюсь удалить маршрутизатор из нашего продукта и заменяю всю его функциональность использованием iptables.

Система требуется, чтобы выполнять данные управления, а также передачи общего трафика к определенным серверам, находящимся позади LAN. Текущая установка -

  • eth0 - Внешний
  • eth1 - Внутренний
  • eth2 - Внутренний
  • eth3 - Внутренний

eth0 получает IP через DHCP.

eth1, eth2 и eth3 являются частью моста (br0), который имеет статический адрес 10.0.1.1.

Существует сервер, находящийся на 10.0.1.2, кому нужны к серверу HTTP и трафик MySQL. Нет никакой гарантии, где этот сервер будет включен в (eth1/2/3), но IP статичен.

Я попытался установить правила iptables, которым, кажется, легко следовать только с единственным eth устройством, но я становлюсь поставленным в затруднительное положение, когда там передает требуемый.

Это - то, что я попробовал до сих пор:

# clear and flush everything
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t security -F
iptables -t security -X

# DROP packets unless covered by rules
iptables -P FORWARD DROP
iptables -P INPUT   DROP
# No intention of filtering any outgoing traffic
iptables -P OUTPUT ACCEPT

# Handle our routing
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80   -j DNAT --to 10.0.1.2:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3306 -j DNAT --to 10.0.1.2:3306

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Input Chain
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0     -p tcp --dport 22   -j ACCEPT   # ssh
iptables -A INPUT -s 10.0.1.2 -p tcp --dport 3306 -j ACCEPT   # ssh

# Forward Chain
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 80   -d 10.0.1.2 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 3306 -d 10.0.1.2 -j ACCEPT

# enable ipv4 forwardning for the system
echo 1 > /proc/sys/net/ipv4/ip_forward

Это дает мне получающуюся установку цепочки/правила -

Chain INPUT (policy DROP 1 packets, 49948 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    1    52 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       10.0.1.2             0.0.0.0/0            tcp dpt:3306

Chain FORWARD (policy DROP 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            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            10.0.1.2             tcp dpt:80
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            10.0.1.2             tcp dpt:3306

Chain OUTPUT (policy ACCEPT 1 packets, 196 bytes)
 pkts bytes target     prot opt in     out     source               destination   

Однако я не могу войти в свой внутренний сервер MySQL через клиент, соединенный через внешний интерфейс (вне поля брандмауэра).

Я считал, что пакеты только проходят через каждую цепочку (любой ВВОДИЛ/ПЕРЕДАВАЛ/ПРОИЗВОДИЛ), но этот все еще имеет место здесь? Мои Передачи пакетов, затем чтобы быть обработанными снова, как ВВЕДЕНО в отдельном интерфейсе?

Есть ли что-нибудь, что выделяется как неправильно в какой-либо конфигурации выше?

Детали конфигурации -

Вывод netstat -rn

От клиента, что я подключение CAN от...

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.139      0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 br0

Telnet соединяется как ожидалось.

От клиента, от которого я не МОГУ соединиться...

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.139      0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.0.0     U         0 0          0 wlan0

Telnet просто отображается Trying 10.0.0.17... и никогда на самом деле успешно выполняется...

Описание (описания) сети -

10.0.0.0 сеть главного управления, и интерфейс eth0 на поле брандмауэра соединен здесь. Его IP-адрес в настоящее время 10.0.0.17...

10.0.1.0 сеть, которая предназначена, чтобы быть позади брандмауэра eth1/2/3.

Я хочу к серверам доступа, которые находятся позади брандмауэра при помощи IP-адреса, данного eth0 (10.0.0.17).

4
задан 6 August 2014 в 11:33
1 ответ

Так как вы перечислили клиента, который может подключаться, нет ничего плохого в настройках iptables. Однако, это еще не вся история: клиенты должны иметь маршрут для достижения переадресованного адреса сервера, а сервер должен иметь маршрут обратно, чтобы пакеты дошли до FORWARDING.

Работающий клиент имеет некоторое физическое присутствие в сети 10.0.1.0/24, и, следовательно, маршрут к ней:

10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 br0

Клиент, который не только не имеет маршрута к 10.0.1. 0/24, но и имеет более общий маршрут к 10.0.0.0/16, посылающий трафик со своей беспроводной карты.

Теперь вы не сказали нам геометрию сети, в которой все это происходит; от путаницы между /24 и /16 сетевыми масками для перекрытия пространства, я предполагаю, что все это немного запутано (это не гарантия; есть законные причины, чтобы сделать это, но их обычно превосходят глупые). Кроме того, подробности вашей сети интересны только вам.

Но итог в том, что любой клиент, который хочет добраться до 10.0.1.2 должен, прежде всего, иметь некоторое представление о том, как добраться до 10.0.1.0/24, и более того, это должна быть правильная идея.

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

.
5
ответ дан 3 December 2019 в 03:17

Теги

Похожие вопросы