Загружаем каталог…
Загружаем каталог…
NTP 서버 관리와 방화벽 관리 Part 1. 시간과 로그 관리 (NTP) 1. 시간이 중요한 이유 로그는 보안과 관리 양쪽에서 매우 중요하다. 로그를 분석하려면 기록된 시간이 정확해야 한다. 시간이 틀리면 사건의 선후 관계를 파악할 수 없다. 시간과 관련된 서비스가 NTP(Network Time Protocol)이다. 2. 시간대(Time zone) 확인과 변경 timedatectl 로 현재 시간 설정을 확인한다. nobreak@rocky-node2:~$ timedatectl Local time: Tue 2026-10-06 00:22:19 UTC Universal time: Tue 2026-10-06 00:22:19 UTC RTC time: Tue 2026-10-06 00:22:20 Time zone: UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: yes 시간대가 UTC로 되어 있어서 한국 시간과 9시간 차이가 난다. RTC in local TZ: yes 경고는 RTC(하드웨어 시계)를 로컬 시간대로 읽는 설정이라 시간대 변경이나 일광절약시간 처리에서 문제가 생길 수 있다는 뜻이다. 가능하면 timedatectl set-local-rtc 0 으로 RTC를 UTC로 사용하는 것이 권장된다. 시간대를 서울로 변경한다. nobreak@rocky-node2:~$ sudo timedatectl set-timezone Asia/Seoul nobreak@rocky-node2:~$ timedatectl Local time: Tue 2026-10-06 09:25:32 KST Universal time: Tue 2026-10-06 00:25:32 UTC Time zone: Asia/Seoul (KST, +0900) 사용할 수 있는 모든 시간대 목록은 timedatectl list-timezones 로 확인한다. nobreak@rocky-node2:~$ timedatectl list-timezones Africa/Abidjan Africa/Accra ... 3. 로그의 종류와 위치 리눅스의 로그는 두 가지 형태로 저장된다. 구분 위치 설명 원본(날것) 로그 journalctl systemd 저널에 저장되는 가공되지 않은 로그이다. 부팅 시점의 커널 메시지부터 기록된다. 가공된 로그 /var/log rsyslog가 분류해서 파일별로 저장한 로그이다. nobreak@rocky-node2:~$ journalctl Oct 05 16:52:36 nobreak kernel: Booting Linux on physical CPU 0x0000000000 [0x610f0000] Oct 05 16:52:36 nobreak kernel: Linux version 6.12.0-211.16.1.el10_2.0.1.aarch64 ... ... nobreak@rocky-node2:~$ ls /var/log anaconda audit btmp chrony cron dnf.log firewalld lastlog maillog messages secure wtmp ... 주요 로그 파일은 다음과 같다. 파일 내용 /var/log/secure 인증, 보안 관련 로그(SSH 접속, sudo 사용 등) /var/log/messages 시스템 전반의 일반 메시지 /var/log/cron 크론 작업 로그 /var/log/maillog 메일 관련 로그 /var/log/audit 감사(audit) 로그. SELinux 관련 기록도 여기에 남는다. 4. 로그 설정 파일 : /etc/rsyslog.conf 시스템 어딘가에는 반드시 설정 파일이 존재한다는 점을 기억해야 한다. 로그와 관련된 설정 파일은 /etc/rsyslog.conf 이다. nobreak@rocky-node2:~$ sudo cat /etc/rsyslog.conf ... # The authpriv file has restricted access. authpriv.* action(type="omfile" file="/var/log/secure") # Log all the mail messages in one place. mail.* action(type="omfile" file="/var/log/maillog" sync="on") # Log cron stuff cron.* action(type="omfile" file="/var/log/cron") 설정 형식은 종류(facility).우선순위(priority) 저장 위치 이다. 예를 들어 authpriv.* 는 인증 관련 로그를 모든 우선순위에 대해 /var/log/secure 에 저장한다는 뜻이다. 메타문자 * 자리에는 아래의 우선순위가 들어갈 수 있다. 위에서 아래로 갈수록 덜 심각하다. 우선순위 의미 emerg 시스템 불능 alert 시스템에 치명상 crit 시스템에 영향 err 시스템 에러 (시스템과 관련된 프로그램이 잘못된 경우) warn 시스템 경고 (프로그램이 어찌어찌 구동은 되는 경우) notice 일반 알림 info 단순 정보 debug 디버깅 5. 실시간 로그 확인 : tail -f tail -f 는 파일의 끝부분을 계속 따라가며 새로 추가되는 내용을 실시간으로 보여준다. nobreak@rocky-node2:~$ sudo tail -f /var/log/secure Oct 6 00:20:34 rocky-node2 sshd-session[2510]: Accepted publickey for nobreak from 172.16.72.1 port 64101 ssh2: ED25519 ... Oct 6 00:24:58 rocky-node2 sudo[2590]: nobreak : TTY=pts/0 ; PWD=/home/nobreak ; USER=root ; COMMAND=/bin/timedatectl set-timezone Asia/Seoul Oct 6 00:30:02 rocky-node2 sudo[2631]: nobreak : TTY=pts/0 ; PWD=/home/nobreak ; USER=root ; COMMAND=/bin/cat /etc/rsyslog.conf 누가 어떤 sudo 명령을 실행했는지, 어떤 IP에서 SSH로 접속했는지 모두 기록된다. 로그를 보는 중에 다른 터미널에서 같은 서버로 새로 접속하면 새 로그가 즉시 추가된다. Oct 6 00:37:50 rocky-node2 sshd-session[2666]: Accepted publickey for nobreak from 172.16.72.1 port 64116 ssh2: ED25519 ... Oct 6 00:37:50 rocky-node2 sshd-session[2666]: pam_unix(sshd:session): session opened for user nobreak(uid=1000) by nobreak(uid=0) # 마지막 두 줄이 새 접속으로 생긴 로그이다. 6. 시간 정보를 받아오는 곳 : chrony 서버는 시간을 어디에서 받아오는지는 설정 파일에서 확인한다. Rocky Linux의 NTP 서비스는 chronyd 이고 설정 파일은 /etc/chrony.conf 이다. nobreak@rocky-node2:~$ cat /etc/chrony.conf pool 2.rocky.pool.ntp.org iburst # 이 줄이 핵심이다. sourcedir /run/chrony-dhcp driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony ... 설정 의미 pool 2.rocky.pool.ntp.org 시간을 받아오는 NTP 서버(풀)의 주소이다. iburst 서버와의 시간 동기화를 빠르게 시작하게 해주는 옵션이다. makestep 1.0 3 시계 오차가 1초보다 크면 처음 3번의 업데이트 동안은 시간을 한 번에 맞추도록 허용한다. rtcsync 커널을 통해 RTC(하드웨어 시계)를 동기화한다. logdir chrony 로그 저장 디렉토리이다. 동기화 상태 확인 : chronyc sources nobreak@rocky-node2:~$ chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^- 115.15.44.33 4 6 377 40 -853us[ -853us] +/- 87ms ^- 211.222.238.30 2 6 377 42 -116us[ -137us] +/- 11ms ^* 121.134.215.104 2 6 377 41 -1331us[-1352us] +/- 4038us ^? 121.174.142.82 0 9 0 - +0ns[ +0ns] +/- 0ns 가장 중요한 것은 * 표시이다. * 가 붙은 서버가 현재 동기화된 대상이다. -v 옵션을 붙이면 각 기호의 설명이 함께 출력된다. 기호 의미 ^ 서버 모드이다. * 현재 가장 좋은 소스이며 이 서버와 동기화 중이다. + 동기화에 결합되어 사용되는 소스이다. - 결합되지 않은 소스이다. ? 사용할 수 없는 소스이다. x 오류 가능성이 있는 소스이다. ~ 값의 변동이 너무 큰 소스이다. 서비스 재시작 nobreak@rocky-node2:~$ sudo systemctl restart chronyd restart : 프로그램 자체를 완전히 재시작한다. reload : 프로그램은 유지한 채 설정 파일만 다시 읽어 온다. Part 2. 방화벽 관리 (firewalld) 1. 방화벽 개념 방화벽은 네트워크 보안의 기본이다. 허용한 트래픽만 서버 내부로 들여보내고, 허용하지 않은 트래픽은 차단한다. 네트워크 보안에서는 1차 방어선이 가장 중요하며, 방화벽이 그 역할을 한다. AWS에서는 이와 같은 가상 방화벽을 보안 그룹(Security Group) 이라고 부른다. 방화벽을 다루려면 IP 주소와 포트 번호의 개념을 알아야 한다. 사용법은 firewall-cmd --help 로 확인한다. 2. 현재 설정과 영구 설정 firewalld의 설정에는 두 가지가 있다. 구분 설명 현재 설정(runtime) 지금 즉시 적용되지만 reload나 재부팅 시 사라진다. 영구 설정(permanent) 파일에 저장되어 재부팅 후에도 유지되지만 reload 전에는 현재 설정에 반영되지 않는다. # 현재 설정 확인 nobreak@rocky-node2:~$ sudo firewall-cmd --list-all public (default, active) interfaces: enp18s0 enp2s0 services: cockpit dhcpv6-client ssh ports: ... # 영구 설정 확인 (active 표시가 없다) nobreak@rocky-node2:~$ sudo firewall-cmd --list-all --permanent public (default) interfaces: services: cockpit dhcpv6-client ssh ... interfaces : 이 zone이 적용되는 네트워크 인터페이스이다. services : 허용된 서비스이다. ssh 가 허용되어 있으므로 SSH 접속이 가능하다. 영구 설정에는 현재 실제로 어떤 인터페이스가 붙어 있는지는 나오지 않으므로 interfaces 가 비어 있고 active 도 없다. 3. Zone Zone은 용도에 따라 방화벽 정책을 다르게 적용하기 위한 묶음이다. firewall-cmd --list-all-zones 로 전체 zone의 설정을 확인한다. Zone 특징 block 들어오는 연결을 거절(REJECT)한다. drop 들어오는 패킷을 응답 없이 버린다(DROP). dmz 외부에 공개되는 서버용이다. ssh만 허용한다. external 외부 네트워크용이다. 마스커레이딩(NAT)이 켜져 있다. public 기본 zone이다. cockpit, dhcpv6-client, ssh를 허용한다. work 업무 환경용이다. home , internal 신뢰도가 높은 내부 네트워크용이다. mdns, samba-client 등도 허용한다. trusted 모든 연결을 허용한다(ACCEPT). 4. 웹 서버(httpd) 설치와 실행 # 설치 nobreak@rocky-node2:~$ sudo dnf install httpd # 실행 nobreak@rocky-node2:~$ sudo systemctl start httpd # 부팅 시 자동 실행 nobreak@rocky-node2:~$ sudo systemctl enable httpd Created symlink '/etc/systemd/system/multi-user.target.wants/httpd.service' → '/usr/lib/systemd/system/httpd.service'. # 두 가지를 한 번에 nobreak@rocky-node2:~$ sudo systemctl enable httpd --now start 는 지금 한 번 실행하는 것이다. enable 은 심볼릭 링크를 만들어서 시스템이 부팅될 때 자동으로 서비스를 구동하게 한다. enable --now 는 두 동작을 합친 명령어이다. 서버 내부에서 curl localhost 로 웹 서버가 올라간 것을 확인한다. nobreak@rocky-node2:~$ curl localhost <!doctype html> <html> <head> <title>HTTP Server Test Page powered by: Rocky Linux</title> ... 기본 테스트 페이지가 출력된다. 웹 콘텐츠는 /var/www/html/ 에 넣는다. 테스트 페이지를 없애려면 /etc/httpd/conf.d/welcome.conf 를 수정한다. IP 주소는 ip addr show 로 확인한다. nobreak@rocky-node2:~$ ip addr show 2: enp2s0: ... inet 172.16.72.138/24 ... 3: enp18s0: ... inet 192.168.100.11/24 ... 5. 트러블슈팅 : 브라우저에서 접속이 안 되는 경우 5.1 증상과 원인 서버 내부에서는 curl localhost 가 되는데, 외부 브라우저에서 IP 주소로 접속하면 연결되지 않는다. 원인은 방화벽에서 http 서비스가 허용되지 않았기 때문이다. 서버 자체의 문제가 아니라 방화벽이 80번 포트로 들어오는 트래픽을 차단한 것이다. 5.2 해결 : 서비스 허용 # 현재 설정에 추가 (reload하면 사라진다) nobreak@rocky-node2:~$ sudo firewall-cmd --add-service=http success # 영구 설정에 추가 (현재 설정에는 바로 반영되지 않는다) nobreak@rocky-node2:~$ sudo firewall-cmd --add-service=http --permanent success # 영구 설정을 현재 설정에 적용 nobreak@rocky-node2:~$ sudo firewall-cmd --reload success 이렇게 설정하면 브라우저에서 접속할 수 있다. --permanent 만 입력했을 때는 --reload 까지 해야 현재 설정에 반영된다. services 에 http 가 추가된 것을 --list-all 로 확인한다. 5.3 서비스 제거 nobreak@rocky-node2:~$ sudo firewall-cmd --remove-service=http --permanent success nobreak@rocky-node2:~$ sudo firewall-cmd --reload success nobreak@rocky-node2:~$ sudo firewall-cmd --list-all services: cockpit dhcpv6-client ssh # http가 사라졌다. 제거 후에는 브라우저에서 다시 접속할 수 없다. 5.4 포트 번호로 허용 서비스 이름 대신 포트 번호를 직접 열 수도 있다. nobreak@rocky-node2:~$ sudo firewall-cmd --add-port=80/tcp success 포트로 열어도 브라우저에서 접속이 된다. 서비스 방식은 이름만으로 관리할 수 있고, 포트 방식은 표준이 아닌 포트(예: 83번)를 열 때 사용한다. 6. 반드시 기억할 포트 번호 포트 서비스 22 SSH 80 HTTP 443 HTTPS 3306 MySQL / MariaDB 7. 특수 목적 Zone 만들기 DB 서버처럼 특수한 목적의 서버는 별도의 zone을 만들어 방화벽을 설정한다. 여기서는 dbserver 라는 zone을 만들어 3306 포트만 허용한다. # zone 생성 : zone은 영구 설정이므로 --permanent가 필수이다. nobreak@rocky-node2:~$ sudo firewall-cmd --new-zone=dbserver Option can be used only with --permanent. # --permanent 없이 실행하면 오류가 발생한다. nobreak@rocky-node2:~$ sudo firewall-cmd --new-zone=dbserver --permanent success # zone에 포트 허용 nobreak@rocky-node2:~$ sudo firewall-cmd --add-port=3306/tcp --permanent --zone=dbserver success # reload로 zone을 인식시킨다. nobreak@rocky-node2:~$ sudo firewall-cmd --reload success # 기본 zone을 dbserver로 변경 nobreak@rocky-node2:~$ sudo firewall-cmd --set-default-zone=dbserver success # 확인 nobreak@rocky-node2:~$ sudo firewall-cmd --list-all dbserver (default, active) interfaces: enp2s0 services: ports: 3306/tcp ... 실습을 마친 뒤에는 원래 상태로 복구한다. # 기본 zone을 public으로 복귀 nobreak@rocky-node2:~$ sudo firewall-cmd --set-default-zone=public success # 만든 zone 삭제 nobreak@rocky-node2:~$ sudo firewall-cmd --delete-zone=dbserver --permanent success 주의. dbserver zone에는 ssh 서비스가 허용되어 있지 않다. 이 zone을 기본 zone으로 지정하면 새로운 SSH 접속이 차단될 수 있다. 원격 서버에서 작업할 때는 반드시 --add-service=ssh 를 먼저 추가하거나 콘솔로 접근할 수 있는 상태에서 실습해야 한다. 8. 핵심 정리 로그는 시간이 정확해야 의미가 있으므로 NTP(chrony)로 시간을 동기화한다. 시간 설정은 timedatectl , 동기화 상태는 chronyc sources ( * 표시)로 확인한다. 원본 로그는 journalctl , 가공된 로그는 /var/log 에 있으며 설정은 /etc/rsyslog.conf 에서 한다. 로그를 실시간으로 확인할 때는 tail -f 를 사용한다. restart 는 프로그램 재시작, reload 는 설정 파일 재로드이다. 방화벽은 1차 방어선이며, 설정에는 현재 설정과 영구 설정이 있다. 영구 설정( --permanent )은 --reload 를 해야 현재 설정에 반영된다. 용도별로 zone을 나누어 정책을 관리하며, zone 생성과 삭제는 --permanent 가 필요하다. 서비스는 필요한 포트만 열고, 22 · 80 · 443 · 3306 포트 번호는 반드시 기억한다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
NTP 서버 관리와 방화벽 관리. NTP 서버 관리와 방화벽 관리 Part 1. 시간과 로그 관리 (NTP) 1. 시간이 중요한 이유 로그는 보안과 관리 양쪽에서 매우 중요하다. 로그를 분석하려면 기록된 시간이 정확해야 한다. 시간이 틀리면 사건의 선후 관계를 파악할 수 없다. 시간과 관련된 서비스가 NTP(Network Time Protocol)이다. 2. 시간대(Time zone) 확인과 변경 timedatectl 로 현재 시간 설정을 확인한다. nobreak@rocky-node2:~$ timedatectl Local time: Tue 2026-10-06 00:22:19 UTC Universal time: Tue 2026-10-06 00:22:19 UTC RTC time: Tue 2026-10-06…
Открыть источник