반응형

Linux 18

iptables 기본 룰 짜기 - INPUT/OUTPUT/FORWARD 체인 이해

신입 때 방화벽 룰을 짜라는 얘기를 처음 들었을 때 손이 덜덜 떨렸습니다. iptables 매뉴얼은 옵션이 100개가 넘어 보였고, 잘못 건드리면 SSH가 끊겨서 서버가 통째로 격리된다는 얘기를 여기저기서 들었거든요. 실제로 그 뒤에 몇 번 원격 서버에서 SSH가 끊겨 콜을 부른 적도 있고요. 알고 보면 기본 구조는 단순합니다. 어떤 체인에 어떤 조건을 만나면 어떻게 처리할지를 규칙 목록에 넣는 것뿐이에요. 오늘은 INPUT/OUTPUT/FORWARD가 뭐고, 최소한 방어 룰을 어떻게 짜는지 정리해볼게요.개념 / 원리iptables는 커널의 netfilter 위에 얹힌 유저 도구예요. 패킷이 커널 네트워크 스택을 지날 때 정해진 "체인"에 걸린 규칙을 위에서 아래로 검사합니다. 매칭되면 -j 뒤에 지정한..

리눅스 메모리 - RSS, VSZ, Shared 실제로 얼마를 쓰는 걸까

운영 서버에서 ps aux의 RSS 컬럼을 다 더해봤더니 실제 물리 메모리보다 큰 숫자가 나와서 한참 멘붕한 적이 있어요. "이게 어떻게 가능하지, 프로세스들이 총 메모리를 초과했으면 죽었어야 하잖아?" 알고 보니 이 착시는 아주 정상적인 현상이었습니다. 원인은 공유 메모리(shared page)를 각 프로세스가 중복 카운트하기 때문이에요. 오늘은 VSZ·RSS·Shared·PSS·USS가 각각 뭐고, 진짜 프로세스가 얼마의 메모리를 쓰는지 어떻게 보는지 정리해볼게요.개념 / 원리리눅스 프로세스 메모리 지표는 사실 여러 종류가 있고, 각각 다른 질문에 답합니다.지표의미언제 보나VSZ가상 주소 공간 크기프로세스가 "예약"한 총 크기. 실제 사용량 아님RSS지금 물리 메모리에 올라와 있는 페이지개별 프로세스..

tmux 입문 - SSH 연결이 끊겨도 작업 살리는 법

서버에서 6시간짜리 백업 스크립트를 돌려놓고 퇴근하려는데 SSH 연결이 갑자기 끊긴 적, 한 번쯤 있으실 거예요. 저는 신입 때 그것 때문에 토요일 새벽에 다시 출근한 적이 있습니다. 결국 사수가 "tmux 한 번 써봐"라고 한 마디 하셔서 정착했는데, 이게 진짜 신세계더라고요. 오늘은 tmux를 처음 쓰는 분도 바로 따라할 수 있게 핵심만 골라서 정리해볼게요.개념 / 원리tmux는 터미널 멀티플렉서(Terminal Multiplexer) 입니다. 이름이 어렵지만 풀어쓰면 간단해요.터미널 세션을 서버 백그라운드에 띄워두고 계속 실행시킨다.SSH가 끊겨도 세션은 살아 있다.다시 접속해서 tmux attach 한 줄이면 끊겼던 화면으로 그대로 돌아간다.비유하자면 tmux는 항상 켜져 있는 가상의 모니터입니다..

프로세스 vs 스레드 - 리눅스의 PID, TID, PPID 한 번에 정리

운영 중에 "왜 ps에는 프로세스 하나로 보이는데 top에서는 스레드가 100개 떠 있죠?"라는 질문을 받은 적이 있습니다. 사실 저도 처음엔 PID, TID, PPID, LWP가 뭐가 다른지 헷갈렸어요. Java 애플리케이션 CPU 100% 잡다가 결국 스레드 단위로 봐야 한다는 걸 알게 됐죠. 오늘은 리눅스에서 프로세스와 스레드가 실제로 어떻게 구분되고, 명령어로 어떻게 들여다보는지 정리해볼게요.개념 / 원리운영체제 책에서는 보통 이렇게 설명합니다.프로세스(Process): 실행 중인 프로그램. 독립된 메모리 공간(텍스트, 데이터, 힙, 스택)을 가진다.스레드(Thread): 프로세스 내부의 실행 흐름 단위. 같은 프로세스의 스레드들은 메모리를 공유한다.근데 리눅스는 조금 특이합니다. 커널 입장에서 ..

find 명령어 실전 활용 - 운영에서 진짜 쓰는 10가지 패턴

Linux 서버 운영하다 보면 find 만한 효자 명령어가 없습니다. 사실 저도 처음엔 ls -la | grep으로 다 때우려고 했는데요, 디스크가 가득 차서 새벽에 호출당하고, 30일 지난 로그 정리해야 하고, 권한이 잘못 들어간 파일을 찾아야 할 때 find 한 줄이면 끝나는 걸 보고 정착하게 됐습니다. 오늘은 매뉴얼 한 페이지를 다 외울 필요 없이, 실제로 자주 쓰는 10가지 패턴만 골라서 정리해볼게요.개념 / 원리find는 디렉토리 트리를 재귀적으로 훑으면서 조건에 맞는 파일을 찾는 명령어입니다. 기본 문법은 단순합니다.find [경로] [조건] [동작]경로: 어디서부터 찾을지. 보통 . 또는 /var/log 같은 절대 경로.조건: 이름, 크기, 시간, 권한 등 필터.동작: 찾은 파일에 뭘 할지...

디스크 I/O 모니터링 - iostat과 iotop으로 병목 잡기

서버 CPU도 멀쩡한데 응답이 갑자기 느려질 때가 있습니다. 저는 그때 처음으로 디스크 I/O를 의심해보게 됐어요. 알고 보니 야간 백업 작업이 같은 디스크에 몰리면서 운영 DB 응답시간이 평소의 5배로 튄 거였죠. CPU나 메모리는 익숙해도 디스크 I/O는 뭘 봐야 할지 막막한 경우가 많은데요, 오늘은 iostat과 iotop 이 두 명령어로 병목을 잡는 법을 정리해보겠습니다.개념 / 원리디스크 I/O 성능에서 봐야 하는 지표는 크게 네 가지입니다.IOPS: 초당 I/O 요청 수. HDD는 보통 100~200, SSD는 수만 단위.처리량(Throughput): 초당 읽고 쓴 바이트 수 (MB/s).응답 시간(await): I/O 요청이 완료되기까지 걸린 평균 시간 (ms).사용률(util): 디스크가 ..

/proc 파일시스템 탐험 - 리눅스 내부 상태 들여다보기

top이나 ps가 보여주는 정보가 대체 어디서 오는 걸까 궁금하지 않으셨나요? 답은 /proc 파일시스템입니다. 거의 모든 모니터링 도구가 결국 여기서 정보를 긁어다 보여주는 거예요. 그래서 도구가 막혔거나 정보가 부족할 때, /proc을 직접 cat하면 가장 원시적이고 가장 정확한 정보가 나옵니다. 오늘은 이 가상 파일시스템을 한번 탐험해 보겠습니다.개념 / 원리/proc는 가상 파일시스템(virtual filesystem) 입니다. 디스크 어딘가에 실제 파일로 존재하는 게 아니라, 커널이 메모리에서 실시간으로 만들어서 보여주는 인터페이스예요. mount로 보면 마운트는 되어 있지만 디스크 용량은 차지하지 않습니다.mount | grep ^proc# proc on /proc type proc (rw,n..

SSH 키 인증과 ssh-agent - 비밀번호 없이 안전하게 접속하기

서버 십수 대를 매일 들락거리다 보면 비밀번호를 매번 치는 것도 일이고, 사실 보안 측면에서도 좋은 선택이 아닙니다. 무차별 대입 공격은 비밀번호 인증을 노리거든요. 키 기반 인증으로 바꾸고 ssh-agent까지 켜놓으면 비밀번호도 안 치고 더 안전해집니다. 오늘은 그 셋업을 한 번에 정리해 보겠습니다.개념 / 원리SSH 키 인증은 비대칭키 암호를 씁니다. 두 개의 키가 한 쌍이에요.공개키(public key): 서버에 등록하는 키. 외부에 노출돼도 됩니다.개인키(private key): 내 PC에만 두는 키. 절대 유출되면 안 됩니다.접속할 때 흐름은 대충 이렇습니다.클라이언트가 서버에 "이 공개키로 접속할게" 신호.서버는 무작위 데이터를 공개키로 암호화해서 보냄.클라이언트는 개인키로 풀어서 응답.응답..

top, htop, ps - 리눅스 모니터링 세 가지 도구 제대로 쓰기

서버 응답이 느려졌다는 알림이 오면, SSH로 들어가서 가장 먼저 두드리는 명령어가 보통 top, htop, ps 중 하나입니다. 신입 때 저는 어디서 본 대로 top을 쳐놓고 화면만 멍하니 보다가, 뭐가 어떤 의미인지 몰라서 결국 선배한테 전화를 걸었던 기억이 있어요. 세 도구가 비슷해 보이지만 쓰는 상황과 보여주는 정보가 조금씩 다른데, 오늘은 이 셋을 제대로 한 번 정리해 보겠습니다.개념 / 원리세 도구는 한 줄로 요약하면 이렇습니다.top: 실시간 프로세스 모니터, 기본 탑재. 화면이 자동 갱신됩니다.htop: top의 개선판. 컬러, 트리 뷰, 마우스 조작 지원. 별도 설치 필요.ps: 특정 시점의 스냅샷. 갱신 안 됨. 스크립트나 파이프 친화적.비유하자면 top/htop은 CCTV 화면을 띄워..

cron vs systemd timer - 정기 작업, 어느 쪽을 써야 하나

새 서버 셋업하다가 "매일 새벽 3시에 백업 스크립트 한 번 돌려놔 주세요" 같은 요청을 받으면, 대부분 반사적으로 crontab -e를 칩니다. 빠르고 익숙하니까요. 그런데 막상 돌려보면 stdout 로그가 어디로 갔는지도 모르겠고, 실패하면 알림도 못 받고, 환경 변수가 안 먹어서 또 한참 헤맵니다. 요즘 대부분의 리눅스 배포판에는 systemd timer라는 대안이 같이 들어 있어요. 오늘은 두 방식의 차이를 정리하고, 같은 작업을 양쪽으로 어떻게 짜는지, 그리고 언제 어느 쪽을 쓰는 게 합리적인지 풀어 볼게요.개념 / 원리cron은 유닉스 초창기부터 있던 전통적인 스케줄러입니다. cron 데몬이 1분마다 깨어나서 /etc/crontab, /etc/cron.d/*, 각 유저의 crontab -e 항..