외부 LAN에서 웹 페이지에 접속할 수 없습니다

외부 LAN에서 웹 페이지에 접속할 수 없습니다

저는 httpd, mysql, php 및 Joomla 2.5를 실행하는 CentOS 6.0 웹 서버를 가지고 있습니다. 고정 공용 IP 주소가 있습니다. LAN 내부에서 IP 주소를 통해 웹페이지(예: Joomla 관리 콘솔)에 완벽하게 액세스할 수 있습니다.

집에 가서 라우터 뒤에서 연결을 시도했지만 웹에 접속할 수 없었습니다. 서버에 ping 및 ssh를 실행할 수 있지만 http를 사용하여 웹 페이지를 가져올 수는 없습니다. 내 브라우저는 크롬입니다.

어떤 아이디어가 있나요?

편집하다:

이것은 다음의 출력입니다 iptables --list.

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere            udp spt:domain
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request
ACCEPT     icmp --  anywhere             anywhere            icmp echo-reply
ACCEPT     tcp  --  anywhere             anywhere            multiport dports ftp,ssh,http,https state NEW,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request
ACCEPT     icmp --  anywhere             anywhere            icmp echo-reply
ACCEPT     tcp  --  anywhere             anywhere            multiport sports ssh,http,https state ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http

답변1

글쎄요, 아파치에서 이런 문제를 겪은 지 수년이 지났지만, 중세 인터넷 시대까지 우리는 이런 상황에서 속임수에 의지해야 했습니다.

우리가 직면하는 기본적인 문제는 동일합니다. 내 네트워크에는 공용 IP가 있고, Apache 서버는 LAN에서 개인 IP를 사용하며, 로드 밸런서는 공용 IP에 대한 요청을 개인 IP가 있는 일련의 서버로 다시 전달합니다.

tcpdump를 사용하면 HTTP 요청이 Apache로 전송되고 있지만 요청이 "공용 IP"로 들어오기 때문에 Apache가 응답하지 않고 Apache는 해당 IP가 해당 IP에 없기 때문에 이러한 요청에 응답해서는 안 된다고 생각하는 것을 볼 수 있습니다. 로컬 인터페이스 테이블.

이 문제를 해결한 방법은 공용 IP 주소를 루프백 인터페이스의 IP 별칭으로 사용하고 /32 넷마스크를 사용하는 것이었습니다. ifconfig lo0:1 <IP/32> up알겠어요. 이는 Apache가 이러한 요청에 응답해야 한다고 믿게 만듭니다.

외부로부터의 요청이 Apache에 도달했는지 확인해야 합니다. 서버에 도달할 수 없는 경우에는 방화벽/라우터/acls를 살펴봐야 합니다. tcpdump다음과 같은 요청이 표시되는 경우 , 그러나아니요Apache에서는 .Apache iptables에서 요청이 표시되지만 Apache가 이에 응답하지 않는 경우 access_log 및 error_log에서 무슨 일이 일어나고 있는지에 대한 단서를 찾아야 합니다.

답변2

먼저 집에서 이 명령의 출력을 보고 싶습니다.

nmap -p 80 <public ip of webserver>

nmap이 나타나면 일부 filtered방화벽에 문제가 있는 것입니다. 이 nmap나타나면 closed웹 서버 구성에 문제가 있는 것입니다.

그 외에는 내가 찾은 결과가 iptables --list그다지 유용하지 않습니다. 주문하다

iptables --list --verbose

더 많은 정보를 제공하세요. 예를 들어 첫 번째 규칙을 살펴보세요. 모든 패킷이 받아들여지는 것처럼 보이지만 --verbose진실은 드러납니다. 규칙 카운터를 사용하여 패킷이 삭제되었는지 확인할 수도 있습니다.

다음으로 웹 서버에서 다음 명령을 시도해 보겠습니다.

tcpdump -i eth0 dst port 80

서버에 패킷이 도착하는지 확인하세요. 여기서는 적절한 장치 이름을 사용하십시오.

답변3

대답은 간단합니다. 방화벽이 막고 있습니다. 우리 대학은 명시적인 허가 없이 TCP/80을 차단합니다. 수신 대기 포트를 TCP/10,000(차단하지 않음) 위로 옮겼더니 제대로 작동했습니다.

관련 정보