Назад | Перейти на главную страницу

Shorewall об устранении неполадок прокси-сервера Debian

Настройка такова: прокси-сервер debian -> маршрутизатор linsys -> внутренний сервер ubuntu

Проблема в следующем: Я могу получить доступ к веб-серверу ubuntu (apache2), введя 192.168.1.128 в браузере на моем прокси-сервере debian. Однако мое правило переадресации shorewall не позволяет использовать одно из следующих правил:

#Web/DNAT        net             loc:192.168.1.128
#DNAT           net             loc:192.168.1.128:80    tcp     80      -       70.90.XXX.XX

Дополнительная информация:

У меня есть внутренний сервер ubuntu, принимающий все соединения прямо сейчас для целей отладки (также установлен shorewall)

вырезан из вывода 'shorewall show log' (на машине debian):

Feb  1 19:37:15 fw2loc:ACCEPT:IN= OUT=eth1 SRC=192.168.1.137 DST=224.0.0.251 LEN=104     TOS=0x00 PREC=0x00 TTL=255 ID=0 DF PROTO=UDP SPT=5353 DPT=5353 LEN=84 
Feb  1 19:40:31 fw2loc:ACCEPT:IN= OUT=eth1 SRC=192.168.1.137 DST=224.0.0.251 LEN=104 TOS=0x00 PREC=0x00 TTL=255 ID=0 DF PROTO=UDP SPT=5353 DPT=5353 LEN=84 

вывод 'shorewall show nat' (на машине debian):

Chain PREROUTING (policy ACCEPT 235 packets, 74689 bytes)
pkts bytes target     prot opt in     out     source               destination         
12   724 net_dnat   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           

Chain POSTROUTING (policy ACCEPT 8 packets, 670 bytes)
pkts bytes target     prot opt in     out     source               destination         
3   242 eth0_masq  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           

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

Chain eth0_masq (1 references)
pkts bytes target     prot opt in     out     source               destination         
1    69 MASQUERADE  all  --  *      *       192.168.1.0/24       0.0.0.0/0           

Chain net_dnat (1 references)
pkts bytes target     prot opt in     out     source               destination         
2   128 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp         dpt:80 to:192.168.1.128 
0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443 to:192.168.1.128 

РЕДАКТИРОВАТЬ:

Я также должен упомянуть, что после проверки журналов apache на машине ubuntu, похоже, ни один из запросов не выполняет его. Когда я делаю запрос из локальной сети, я получаю запись в журнале доступа, но когда я делаю запрос извне через прокси, я ничего не получаю.

Вывод iptables -vnL на прокси:

22  1280 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU 
22  1280 eth0_fwd   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           
22  1280 dynamic    all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID,NEW 
22  1280 smurfs     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID,NEW 
22  1280 tcpflags   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           
22  1280 net2loc    all  --  *      eth1    0.0.0.0/0            0.0.0.0/0           
1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 80,443 
22  1280 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.128       tcp dpt:80 

Не совсем уверен, что с этим делать ...

Я начинаю задаваться вопросом, есть ли фундаментальная проблема с попыткой пройти через маршрутизатор Linksys, и должен ли я просто перейти на debian -> ubuntu с кроссовером ...

РЕДАКТИРОВАТЬ 2

Похоже, пакеты пересылаются правильно (я думаю, именно это и сделал для нас вывод shorewall show nat)

Вывод из 'tcpdump -n -i port 80'

публичный интерфейс:

20:15:40.458118 IP 71.182.212.251.57261 > 70.90.XXX.XXX.80: S 2834662754:2834662754(0) win 65535 <mss 1452,nop,wscale 3,nop,nop,timestamp 25163236 0,sackOK,eol>

частный интерфейс:

20: 15: 45.405347 IP 71.182.212.251.57261> 192.168.1.128.80: S 2834662754: 2834662754 (0) выигрыш 65535

После нескольких из вышеперечисленных пакетов он превращается в:

20:16:17.623882 IP 71.182.212.251.57254 > 70.90.XXX.XXX.80: S 1673429824:1673429824(0) win 65535 <mss 1452,sackOK,eol>

и

20:16:17.623917 IP 71.182.212.251.57254 > 192.168.1.128.80: S 1673429824:1673429824(0) win 65535 <mss 1452,sackOK,eol>

Прежде всего, я предполагаю, что знак # перед тем, как каждое правило отсутствует в файлах конфигурации (комментирует эту строку, что делает ее бесполезной).

Попробуйте отслеживать сетевой трафик на прокси-сервере на обоих интерфейсах, публичном и частном. С публичной стороны:

 # tcpdump -n -i <public interface> port 80

На частной стороне:

 # tcpdump -n -i <private interface> port 80 and host 192.168.1.128

При выполнении запросов из внешнего мира вы не видите трафика на частной стороне, тогда вам следует дважды проверить:

Ядро позволяет пересылать трафик (должно быть одно):

cat /proc/sys/net/ipv4/ip_forward

Если он возвращает 0:

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

Политика по умолчанию для FORWARD цепочка на фильтровальном столе

iptables -nL | grep 'Chain FORWARD'

(согласно предоставленной вами информации, вместо FORWARD вы должны увидеть его в цепочке net2loc)

Если политика по умолчанию - REJECT / DROP, найдите правило в цепочке FORWARD, которое позволяет перенаправлять трафик на HTTP-сервер:

iptables -vnL FORWARD | grep 192.168.1.128

(опять же, если в FORWARD ничего значимого не появляется, проверьте net2loc).

Если это не возвращает строку (и политика REJECT / DROP), значит, вам не хватает правила, которое позволяет вам пересылать трафик ... дважды проверьте конфигурацию shorewall. Установить loc войти в info в файле конфигурации политики установите правило:

iptables -A net2loc -i <public iface> -o <private iface> \
--dst 192.168.1.128 -p tcp --dport 80 -j ACCEPT

И посмотрим, что получится.

В качестве альтернативы, когда вы делаете запросы из внешнего местоположения, и вы видите это на частной стороне, это будет означать, что что-то еще не так (проверьте политику пересылки маршрутизатора Linksys, маршруты и т. Д.).

Я бы не стал делать то, что @Alex рекомендует, поскольку это рискованно. Вы теряете все следы того, кто обращается к вам, и теряете статистику. Если на ваш сайт происходит какая-либо атака, невозможно определить, откуда она взялась, просто взглянув на журналы вашего веб-сервера и по множеству других причин. Обычно SNAT переход от общедоступных сетей к частным назначениям крайне не рекомендуется.

Какой хост установлен в качестве шлюза по умолчанию на вашем сервере Ubuntu? Если это не ваш проксирующий сервер Debian, вам следует добавить еще одно правило в / etc / shorewal / masq:

eth1:192.168.1.128         0.0.0.0/0       192.168.1.137       tcp     80

Я предполагаю, что ваша сетевая карта LAN прокси-сервера Debian - eth1, а IP-адрес вашего сервера Debian - 192.168.1.137. По сути, проблема здесь в том, что правило DNAT не изменяет IP-адрес источника в пересылаемых пакетах, поэтому ваш сервер Ubuntu пытается ответить напрямую отправителю запроса, который находится за пределами вашей локальной сети. Он использует шлюз по умолчанию для связи, поэтому ответ никогда не попадает в ящик Debian. Это дополнительное правило меняет исходный IP-адрес на IP-адрес самого прокси-сервера, поэтому оно должно помочь. В любом случае, вероятно, это не то, что вам нужно, потому что Apache в Ubuntu будет записывать IP-адрес Debian в качестве IP-адреса клиента для доступа к журналам для каждого запроса.

Кажется, теперь все в порядке с немного другой настройкой:

Теперь я просто перехожу Debian proxy -> Ubuntu server (больше нет маршрутизатора Linksys). В любом случае я решил не использовать маршрутизатор, потому что именно он используется в нашей офисной беспроводной сети. В любом случае наличие того, что должно быть безопасным сервером, подключенным к офисному маршрутизатору, кажется не очень умным шагом с моей стороны.

Сводка изменений:

Предоставил частным интерфейсам обеих машин статические локальные IP-адреса со следующими

iface eth0 inet static
     ipaddress 192.168.1.128 #the other one got 192.168.1.137
     netmask 255.255.255.255
     network 192.168.1.0

перезапущенные сетевые устройства

перезапущен Shorewall

Кажется, у Shorewall все хорошо, и мои журналы apache информативны (они не просто говорят, что все запросы поступают с машины debian)

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