Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

지석이의 일기

어느날 갑자기 nginx 에 트래픽이 전송되지 않는다. 본문

IT 에러경험

어느날 갑자기 nginx 에 트래픽이 전송되지 않는다.

91년도에 철산에서 태어난 최지석 2024. 3. 11. 18:11

어느날 갑자기 홈페이지에서 타임 오버 에러가 났다.

부랴부랴 서버에 가서 nginx와 tomcat 을 재기동 해봤지만 여전히 에러가 났다.

혹시나 싶어 클라우드 방화벽까지 전부다 off를 시켜봤지만 여전히 되지 않는다.

 

지금부터 모든 과정을 다 정독했고, 풀이로 가보겠다.

트래픽이 1번째로 만나는 방화벽은 클라우드 방화벽이다.

통상 클라우드 서버를 호스팅하면 클라우드 방화벽이라 하여, 인바운드(inbound) 아웃바운드( outbound)를 설정하게 된다.

여기서 http(80) https(443) 22(sftp)등등을 오픈한다.

 

1번이 정상적으로 통과 됬는지(클라우드 서버를 못믿어서),  확인하려면 tcpdump를 사용해보면 된다.

sudo tcpdump -i eth0 tcp port 80

를 하게 되면 실시간으로 80 포트가 들어오는 트래픽을 확인하게 된다.

 

홈페이지나 포스트맨으로 요청시 바로 저기에 로그가 실시간으로 찍힌다면 최소한 클라우드 방화벽은 통과한 것이다.

 

트래픽이 2번째로 만나는 방화벽은 리눅스 내부 방화벽이다.

일단 나의 nginx 가 진짜로, 실제로 80포트를 리슨(바라보고있는, 연결되어있는)하고 있는지 확인해보자.

 

sudo ss -tulpn 을 타이핑하면, 현재 구동중인 프로그램중에 어떤 것들이 어떤것을 리슨하고 있는지 확인이 가능하다.

 

nginx 의 work 때문에 개행이 되서 안이뻐보이지만,  중요한 내용을 보면, *:80 을 nginx 유저가 리슨하고 있다는 것이다.

 

만일 tcpdump를 통과 했는데, web서버는 정상적으로 포트를 리슨하는데, 80이 타임아웃이 난다면?

==> 높은 확률로 내부서버에서 해당 트래픽을 거부했기 때문이다....

 

내부 서버 방화벽에는 여러가지가 있다.

iptables , nftables , firewalld , ufw , shorewall

이것들을 다 해제해 주자.

 

모든 iptables 규칙을 임시로 해제 

1. 모든 iptables 규칙을 임시로 해제 
   sudo iptables -F
 
2. 모든 사용자 정의 체인을 삭제 
   sudo iptables -X
  
3. 모든 네트워크 트래픽을 허용하는 규칙을 설정
   sudo iptables -P INPUT ACCEPT
   sudo iptables -P FORWARD ACCEPT
   sudo iptables -P OUTPUT ACCEPT

 

4. 지금 삭제한 정책을 저장 (안하면 나중에 갑자기 되돌아감)

sudo service  iptables save

 

nftables 해제

1. 모든 nftables 규칙을 임시로 해제
   sudo nft flush ruleset

firewalld 해제하기

1. firewalld를 임시로 정지
   sudo systemctl stop firewalld

2. firewalld가 부팅 시 자동으로 시작되지 않도록 비활성화
   sudo systemctl disable firewalld

 

ufw 해제하기

1. ufw를 비활성화
   sudo ufw disable

shorewall 해제하기
1. shorewall을 정지합니다:
   sudo shorewall stop

 

커맨더가 없다면 해당 방화벽으로 막힌게 아니니 패스

 

필자는 기본적으로 내부 방화벽은 해제하고 클라우드 방화벽을 사용하고 있었다.

클라우드 사이트에서 무슨 점검을 한다고 했더니..... 내부 방화벽이 갑자기 살아나더니 홈페이지 접속 오류가 뜬것!...

 

차근차근히 트래픽 따라 가면서 원인을 파악하고 해결 한 경험이다...

 

요약.

1. 외부에서 클라우드 방화벽을 통과하는지 체크.(tcpdump로 들어오는지)

2. 해당 트래픽이 nginx에 접근이 되는지 체크 (nginx의 access.log에 찍히는지)

3. 1번은 통과햇는데 2번이 안된다면 높은확률로 서버의 내부 방화벽이 문제일수있다.