저는 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(차단하지 않음) 위로 옮겼더니 제대로 작동했습니다.