아치 리눅스 설치에 아파치 서버를 설정하려고 합니다. 기기에는 공용 IP 주소를 사용한 이더넷 연결이 있습니다. 외부 컴퓨터에서 여러 번 연결을 시도했지만 작동하지 않았습니다. 그런 다음 Apache에서 SSL을 설정하고 연결할 수 있었습니다.
테스트를 위해 다음을 사용하여 간단한 http 서버를 시작할 때
$ sudo python3 -m http.server <port_here> --bind <public_ip_here>
다른 컴퓨터에서 정상적으로 모든 포트에 연결할 수 있습니다와는 별개로80. 그건 안 돼요. 포트 443에서도 작동합니다.
포트 80이 차단되는 이유와 이 문제를 해결하는 방법을 알고 싶습니다.
답변1
다음 명령을 실행하여 트래픽이 실제로 시스템에 들어오고 있는지 확인할 수 있습니다.
# iptables -I INPUT -p TCP --dport 80 -j LOG
# iptables -I INPUT -p TCP --dport 80 -j ACCEPT
-j LOG
일치하는 트래픽의 기록은 메시지 로그로 전송되지만 방화벽은 계속해서 규칙을 처리합니다 . 두 번째 규칙은 ACCEPT
모든 포트 80 트래픽에 대해 명시적인 규칙을 설정합니다. 이렇게 하면 방화벽의 병목 현상이 제거됩니다. 패킷 카운터(출력 왼쪽에 있는 두 개의 숫자 열 iptables -nvL
)가 올라가면 규칙이 일치한다는 것을 알 수 있으며 메시지를 보고 트래픽이 들어오는 방식에 비정상적인 것이 있는지 확인할 수 있습니다(예: NAT, 등.).
netstat -tlpn
또는 실행하여 lsof -i tcp:80
데몬이 현재 네트워크에 연결할 수 있는 IP를 수신하고 있는지 확인할 수도 있습니다 . 예를 들어:
[root@xxx01 ~]# lsof -i tcp:42499
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 12659 puppet 10u IPv4 37071710 0t0 TCP localhost:42499 (LISTEN)
포트 42499에서 수신 대기하고 127.0.0.1( )에 바인딩하는 Ruby 스크립트가 있으므로 localhost:42499
공용 IP 주소를 지정하는 모든 항목이 이 데몬에 도달하지 않음을 나타냅니다. 비교:
[root@xxx01 ~]# lsof -Pi tcp:80 | head -3
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2247 root 4u IPv6 12264 0t0 TCP *:80 (LISTEN)
httpd 7376 apache 4u IPv6 12264 0t0 TCP *:80 (LISTEN)
별표는 사용 가능한 모든 IP 주소(네트워크에 연결할 수 있는 IP 주소 포함)를 수신하고 있음을 의미합니다.
답변2
tcpdump
포트 80에 트래픽이 도착하는지 확인하기 위해 컴퓨터에서 다음을 시도해 볼 수 있습니다 .
sudo tcpdump port 80
(없으시면 pacman -S tcpdump
:)
외부 컴퓨터에서 연결을 시도합니다.
이 외에도 로컬 포트 80 연결을 차단하는 iptables 규칙이 있는지 확인할 수 있습니다. 다음 명령이 무엇이든 출력하는 경우 거부 또는 삭제 작업인지 분석합니다.
sudo iptables-save | grep 80
...또는 전체 iptables 규칙을 분석합니다.sudo iptables-save
- 또 다른 시도는 명령이 공용 IP 주소 대신 0.0.0.0 주소를 수신하도록 강제하는 것입니다.
추신: 일부 공급자는 고객이 웹 사이트를 호스팅하거나 공격을 완화하기 위해 "시도"하는 것을 허용하지 않기 위해 포트 80을 차단한다는 점을 명심하십시오.
답변3
라우터의 포트를 차단할 수 있는 방화벽이 있는지 확인하세요. 또한 iptables를 확인해보세요.
iptables -I INPUT -p TCP --dport 80 -j ACCEPT