|
설정 문법 검사:
아무 메시지도 출력되지 않으면 일반적으로 문법 오류가 없는 상태다.
설정 적용:
reload 실패 시:
SSH 설정을 변경한 후 기존 접속 세션을 즉시 종료하지 않는다.
새 터미널에서 접속이 정상적으로 되는 것을 먼저 확인한 뒤 기존 세션을 종료한다.
6. SSH 접속 계정 제한
6.1 관리 계정 생성
예시 계정:
useradd admin
passwd admin
관리자 권한이 필요한 경우 wheel 그룹에 추가한다.
그룹 확인:
출력에 wheel 그룹이 포함되어 있는지 확인한다.
6.2 특정 계정만 SSH 접속 허용
설정 파일 편집:
vi /etc/ssh/sshd_config.d/10-custom.conf
특정 계정만 허용:
여러 계정 허용:
AllowUsers admin operator backupuser
특정 그룹만 허용할 수도 있다.
AllowUsers 또는 AllowGroups 설정을 잘못 적용하면 SSH 접속이 모두 차단될 수 있다.
현재 사용 중인 관리 계정이 허용 목록에 포함되어 있는지 반드시 확인한다.
문법 검사:
설정 적용:
7. SSH 포트 변경
SSH 기본 포트는 TCP 22번이다.
외부에 직접 노출되는 서버는 자동화된 스캔 로그를 줄이기 위해 포트를 변경하는 경우가 있다.
포트 변경 자체는 강력한 보안 대책이 아니며, 계정 제한, 키 인증, 방화벽 접근 제어를 함께 적용해야 한다.
다음 예시에서는 SSH 포트를 TCP 2222번으로 변경한다.
7.1 SSH 설정 변경
vi /etc/ssh/sshd_config.d/10-custom.conf
설정 추가:
문법 검사:
아직 SSH 서비스를 재시작하지 않는다.
먼저 방화벽과 SELinux 설정을 적용해야 한다.
7.2 SELinux에 SSH 포트 등록
SELinux 관리 도구 설치:
dnf install -y policycoreutils-python-utils
현재 SSH 포트 정책 확인:
semanage port -l | grep ssh
TCP 2222번을 SSH 포트로 등록:
semanage port -a -t ssh_port_t -p tcp 2222
이미 포트가 등록되어 있다는 오류가 발생하면 수정 명령어를 사용한다.
semanage port -m -t ssh_port_t -p tcp 2222
등록 결과 확인:
semanage port -l | grep ssh
7.3 firewalld에서 SSH 포트 허용
현재 활성 존 확인:
firewall-cmd --get-active-zones
기본 존에 TCP 2222번 허용:
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
확인:
firewall-cmd --list-ports
7.4 SSH 서비스 재시작
상태 확인:
포트 리스닝 확인:
7.5 새 포트 접속 테스트
다른 PC 또는 새 터미널에서 테스트한다.
ssh -p 2222 admin@192.168.10.20
접속이 정상임을 확인한 후 기존 22번 포트를 방화벽에서 제거한다.
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
방화벽 상태 확인:
SSH 신규 포트 접속 확인 전에 기존 22번 포트를 먼저 차단하면 원격 접속이 불가능해질 수 있다.
8. firewalld 기본 사용법
Rocky Linux 9는 기본 방화벽 관리 도구로 firewalld를 사용한다.
일반적인 환경에서는 firewalld 사용을 권장한다.
8.1 firewalld 상태 확인
systemctl status firewalld
간단 확인:
systemctl is-active firewalld
systemctl is-enabled firewalld
8.2 firewalld 시작 및 자동 시작
systemctl enable --now firewalld
8.3 활성 존 확인
firewall-cmd --get-active-zones
기본 존 확인:
firewall-cmd --get-default-zone
전체 설정 확인:
8.4 서비스 단위 포트 허용
SSH 허용:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
HTTP 허용:
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
HTTPS 허용:
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Samba 허용:
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
8.5 포트 번호로 허용
TCP 8080 허용:
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
UDP 514 허용:
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --reload
TCP와 UDP를 모두 사용하는 경우 각각 등록한다.
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --reload
8.6 허용 설정 제거
TCP 8080 제거:
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
HTTP 서비스 제거:
firewall-cmd --permanent --remove-service=http
firewall-cmd --reload
8.7 런타임 설정과 영구 설정 차이
--permanent 옵션 없이 추가하면 현재 실행 중인 설정에만 반영된다.
firewall-cmd --add-port=8080/tcp
시스템 또는 firewalld 재시작 후 설정이 사라질 수 있다.
영구 설정:
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
8.8 특정 IP에서만 SSH 허용
다음 예시는 192.168.10.0/24 대역에서만 TCP 22번 접근을 허용한다.
기존 SSH 서비스가 전체 대역에 허용되어 있다면 먼저 별도 콘솔을 확보한다.
Rich Rule 추가:
firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" accept'
기존 전체 SSH 허용 제거:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
설정 확인:
firewall-cmd --list-rich-rules
9. firewalld 비활성화 및 iptables 전환
Rocky Linux 9에서는 firewalld 사용을 우선 권장한다.
iptables 방식은 다음과 같은 경우에만 고려한다.
- 기존 운영 환경이 iptables 규칙으로 표준화되어 있는 경우
- 기존 스크립트가 iptables 명령어를 사용해야 하는 경우
- 애플리케이션 또는 운영 정책상 레거시 규칙 형식이 필요한 경우
Rocky Linux 9의 iptables 명령어는 내부적으로 nftables 호환 계층을 사용할 수 있다.
firewalld와 iptables 서비스를 동시에 운영하면 규칙 충돌이나 관리 혼선이 발생할 수 있으므로 한 가지 방식만 선택한다.
9.1 현재 방화벽 규칙 백업
firewalld 설정 확인 및 백업:
firewall-cmd --list-all-zones > /root/firewalld-backup-$(date +%Y%m%d_%H%M%S).txt
현재 nftables 규칙 백업:
nft list ruleset > /root/nftables-backup-$(date +%Y%m%d_%H%M%S).txt
원격 작업 중 방화벽 전환에 실패하면 SSH 접속이 차단될 수 있다.
콘솔, iLO, iDRAC, IPMI 또는 가상화 콘솔을 확보한 상태에서 진행한다.
9.2 iptables 서비스 패키지 설치
dnf install -y iptables-services
설치 확인:
9.3 firewalld 비활성화
systemctl disable --now firewalld
상태 확인:
systemctl is-active firewalld
systemctl is-enabled firewalld
예상 출력:
9.4 iptables 기본 규칙 작성
기존 파일 백업:
cp -a /etc/sysconfig/iptables \
/etc/sysconfig/iptables.bak.$(date +%Y%m%d_%H%M%S) 2>/dev/null
설정 파일 편집:
vi /etc/sysconfig/iptables
SSH 22번과 Samba를 허용하는 예시:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p udp --dport 137 -j ACCEPT
-A INPUT -p udp --dport 138 -j ACCEPT
-A INPUT -p tcp --dport 139 -j ACCEPT
-A INPUT -p tcp --dport 445 -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
COMMIT
SSH 포트를 2222번으로 변경한 경우 다음과 같이 수정한다.
-A INPUT -p tcp --dport 2222 -j ACCEPT
기본 정책이 DROP인 상태에서 SSH 허용 규칙이 누락되면 원격 접속이 차단된다.
9.5 iptables 서비스 시작
systemctl enable --now iptables
상태 확인:
systemctl status iptables
규칙 확인:
iptables -L -n -v --line-numbers
저장:
또는 현재 규칙을 파일로 저장한다.
iptables-save > /etc/sysconfig/iptables
9.6 규칙 테스트
SSH 포트 확인:
iptables -L INPUT -n -v --line-numbers | grep -E '22|2222'
Samba 포트 확인:
iptables -L INPUT -n -v --line-numbers | grep -E '137|138|139|445'
전체 규칙 확인:
10. 서비스 정상 유무 확인
10.1 systemctl을 이용한 서비스 확인
SSH 상태 확인:
Samba 상태 확인:
systemctl status smb
systemctl status nmb
실행 여부만 확인:
systemctl is-active sshd
systemctl is-active smb
부팅 시 자동 시작 여부 확인:
systemctl is-enabled sshd
systemctl is-enabled smb
10.2 실패한 서비스 확인
특정 서비스의 최근 로그 확인:
journalctl -u sshd -n 50 --no-pager
Samba 로그 확인:
journalctl -u smb -n 50 --no-pager
실시간 로그 확인:
10.3 설정 파일 문법 검사
SSH 설정 검사:
Samba 설정 검사:
11. 서비스 포트 리스닝 확인
11.1 ss 명령어 사용
전체 TCP/UDP 리스닝 포트 확인:
TCP 포트만 확인:
UDP 포트만 확인:
SSH 22번 확인:
SSH 2222번 확인:
Samba 포트 확인:
ss -lntup | grep -E ':137|:138|:139|:445'
11.2 결과에서 확인할 항목
출력 예시:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
확인할 항목:
| 항목
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
서비스가 실행 중이어도 포트가 리스닝하지 않으면 설정 오류 또는 프로세스 시작 실패를 의심해야 한다.
12. 외부에서 포트 오픈 여부 확인
서버 내부의 ss 명령은 서비스 리스닝 여부를 확인한다.
방화벽과 네트워크를 포함한 실제 접근 가능 여부는 다른 PC에서 테스트해야 한다.
12.1 nc 명령어 설치
Rocky Linux에서 설치:
12.2 TCP 포트 테스트
SSH 22번 테스트:
SSH 2222번 테스트:
nc -zv 192.168.10.20 2222
Samba 445번 테스트:
성공 예시:
Connection to 192.168.10.20 22 port [tcp/ssh] succeeded!
실패 유형:
| 메시지
|
|
|
|
|
|
|
|
|
|
|
12.3 Windows PowerShell에서 테스트
Test-NetConnection 192.168.10.20 -Port 22
SSH 포트가 2222번인 경우:
Test-NetConnection 192.168.10.20 -Port 2222
확인 항목:
13. SSH 접속 테스트
13.1 Linux 또는 macOS에서 접속
기본 포트:
변경 포트:
ssh -p 2222 admin@192.168.10.20
최초 접속 시 서버 호스트 키 확인 메시지가 표시될 수 있다.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
서버 주소가 맞는지 확인한 후 다음을 입력한다.
13.2 Windows에서 SSH 접속
Windows PowerShell 또는 명령 프롬프트에서 실행한다.
변경 포트:
ssh -p 2222 admin@192.168.10.20
PuTTY를 사용할 경우 다음 항목을 입력한다.
| 항목
|
|
|
|
|
|
|
|
|
|
|
13.3 SSH 접속 장애 확인 순서
- 서버 IP 통신 확인
- SSH 서비스 상태 확인
- SSH 설정 문법 확인
- SSH 포트 리스닝 확인
- firewalld 또는 iptables 규칙 확인
- SELinux 포트 등록 확인
- 서버 로그 확인
확인 명령어:
ping -c 4 192.168.10.20
systemctl status sshd
sshd -t
ss -lntp | grep sshd
firewall-cmd --list-all
semanage port -l | grep ssh
journalctl -u sshd -n 100 --no-pager
14. SFTP 접속 테스트
SFTP는 FTP와 다른 프로토콜이다.
SFTP는 SSH 서비스를 이용하며 별도의 FTP 서버 프로그램이 필요하지 않다.
SSH 포트가 TCP 22번이면 SFTP도 TCP 22번을 사용한다.
SSH 포트를 2222번으로 변경하면 SFTP도 TCP 2222번을 사용한다.
14.1 Linux에서 SFTP 접속
기본 포트:
변경 포트:
sftp -P 2222 admin@192.168.10.20
SFTP에서 자주 사용하는 명령어:
| 명령어
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14.2 Windows FileZilla에서 SFTP 접속
FileZilla 사이트 관리자에서 다음과 같이 설정한다.
| 항목
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SFTP를 사용할 때 프로토콜을 FTP 또는 FTPS로 선택하면 접속되지 않는다.
14.3 SFTP 업로드 권한 확인
사용자 홈 디렉터리 권한 확인:
파일 생성 테스트:
sudo -u admin touch /home/admin/sftp-test.txt
확인:
ls -l /home/admin/sftp-test.txt
테스트 파일 삭제:
rm -f /home/admin/sftp-test.txt
15. Samba 파일 공유 설정
Samba는 Linux 서버의 디렉터리를 Windows 네트워크 공유 방식으로 제공하는 서비스다.
Windows에서는 다음 형식으로 접근한다.
15.1 Samba 패키지 설치
dnf install -y samba samba-client
설치 확인:
rpm -q samba
rpm -q samba-client
15.2 공유용 계정 생성
Linux 계정 생성:
useradd -m shareuser
passwd shareuser
Samba 비밀번호 등록:
Samba 계정 활성화:
등록된 Samba 사용자 확인:
Linux 계정 비밀번호와 Samba 비밀번호는 별도로 관리될 수 있다.
15.3 공유 디렉터리 생성
공유 경로 예시:
디렉터리 생성:
소유자 설정:
chown -R shareuser:shareuser /data/share
권한 설정:
권한 확인:
15.4 Samba 설정 파일 백업
cp -a /etc/samba/smb.conf \
/etc/samba/smb.conf.bak.$(date +%Y%m%d_%H%M%S)
15.5 Samba 기본 설정
설정 파일 편집:
설정 예시:
[global]
workgroup = WORKGROUP
security = user
map to guest = never
server min protocol = SMB2
server role = standalone server
[share]
comment = Shared Folder
path = /data/share
browseable = yes
writable = yes
read only = no
valid users = shareuser
create mask = 0660
directory mask = 0770
주요 설정 설명:
| 항목
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15.6 Samba 설정 문법 확인
특정 설정 파일 검사:
testparm /etc/samba/smb.conf
문법 오류가 있으면 서비스를 시작하기 전에 수정한다.
15.7 SELinux 설정
Samba가 공유 디렉터리에 접근할 수 있도록 SELinux 컨텍스트를 설정한다.
필요 도구 설치:
dnf install -y policycoreutils-python-utils
영구 컨텍스트 등록:
semanage fcontext -a -t samba_share_t "/data/share(/.*)?"
실제 디렉터리에 적용:
restorecon -Rv /data/share
확인:
출력에 다음 타입이 포함되어 있는지 확인한다.
기존에 같은 경로의 SELinux 규칙이 이미 있는 경우 수정 옵션을 사용한다.
semanage fcontext -m -t samba_share_t "/data/share(/.*)?"
restorecon -Rv /data/share
15.8 Samba 서비스 시작
systemctl enable --now smb
NetBIOS 이름 검색이 필요한 환경에서는 nmb도 시작한다.
systemctl enable --now nmb
서비스 상태 확인:
systemctl status smb
systemctl status nmb
최신 Windows 환경에서 IP 주소 또는 DNS 이름으로 직접 접근하는 경우 smb 서비스만으로도 동작할 수 있다.
15.9 firewalld에서 Samba 허용
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
설정 확인:
firewall-cmd --list-services
상세 확인:
firewall-cmd --info-service=samba
15.10 Samba 포트 확인
ss -lntup | grep -E ':137|:138|:139|:445'
주요 Samba 포트:
| 포트
|
프로토콜
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15.11 서버 내부에서 Samba 공유 테스트
공유 목록 확인:
smbclient -L localhost -U shareuser
공유 접속:
smbclient //localhost/share -U shareuser
접속 후 파일 목록 확인:
테스트 파일 업로드:
종료:
15.12 Windows에서 Samba 접속
Windows 탐색기 주소 표시줄에 다음을 입력한다.
호스트 이름으로 접근하는 경우:
인증 창이 나오면 Samba 사용자 계정을 입력한다.
사용자 이름: shareuser
비밀번호: smbpasswd에서 등록한 비밀번호
사용자 이름 인식 문제가 있으면 다음 형식으로 입력한다.
또는:
15.13 Windows 자격 증명 초기화
잘못된 계정 정보가 저장된 경우 명령 프롬프트에서 기존 연결을 삭제한다.
특정 서버 연결만 삭제:
net use \\192.168.10.20\share /delete
다시 연결:
net use Z: \\192.168.10.20\share /user:shareuser
15.14 Samba 접속 장애 확인 순서
- 서버와 IP 통신 확인
- smb 서비스 상태 확인
- TCP 445 포트 리스닝 확인
- 방화벽 허용 확인
- Samba 설정 문법 확인
- Samba 계정 등록 확인
- Linux 디렉터리 권한 확인
- SELinux 컨텍스트 확인
- Samba 로그 확인
확인 명령어:
ping -c 4 192.168.10.20
systemctl status smb
ss -lntp | grep ':445'
firewall-cmd --list-all
testparm
pdbedit -L
ls -ld /data/share
ls -ldZ /data/share
journalctl -u smb -n 100 --no-pager
SELinux 차단 로그 확인:
ausearch -m AVC -ts recent
최근 Samba 로그 확인:
tail -n 100 /var/log/samba/log.smbd
로그 파일은 Samba 설정이나 패키지 버전에 따라 위치가 다를 수 있다.
16. 전체 설정 최종 점검
16.1 시스템 정보
cat /etc/os-release
hostnamectl
timedatectl
16.2 네트워크
ip -br address
ip route
nmcli device status
nmcli connection show
ping -c 4 192.168.10.1
16.3 SSH
systemctl is-active sshd
systemctl is-enabled sshd
sshd -t
ss -lntp | grep sshd
journalctl -u sshd -n 30 --no-pager
16.4 방화벽
firewalld 사용 시:
systemctl is-active firewalld
firewall-cmd --get-active-zones
firewall-cmd --list-all
iptables 사용 시:
systemctl is-active iptables
iptables -L -n -v --line-numbers
iptables-save
16.5 Samba
systemctl is-active smb
systemctl is-enabled smb
testparm
pdbedit -L
ss -lntup | grep -E ':137|:138|:139|:445'
ls -ldZ /data/share
17. 구축 완료 후 권장 사항
17.1 불필요한 root 원격 로그인 차단
17.2 일반 관리자 계정 사용
관리 계정을 wheel 그룹에 추가하고 필요할 때만 sudo를 사용한다.
17.3 사용하지 않는 서비스 비활성화
실행 중인 서비스 확인:
systemctl --type=service --state=running
불필요한 서비스를 확인한 후 비활성화한다.
systemctl disable --now 서비스명
서비스 용도를 확인하지 않고 임의로 비활성화하면 시스템 기능에 문제가 발생할 수 있다.
17.4 정기 업데이트
업데이트 확인:
업데이트 적용:
커널 및 핵심 라이브러리 업데이트 후에는 재부팅이 필요할 수 있다.
17.5 시간 동기화 확인
timedatectl
chronyc tracking
chronyc sources -v
시간대가 잘못된 경우 서울 시간대로 설정한다.
timedatectl set-timezone Asia/Seoul
17.6 설정 파일 백업
주요 설정 파일:
/etc/NetworkManager/system-connections/
/etc/hosts
/etc/hostname
/etc/ssh/sshd_config
/etc/ssh/sshd_config.d/
/etc/firewalld/
/etc/sysconfig/iptables
/etc/samba/smb.conf
백업 예시:
tar czvf /root/rocky-basic-config-$(date +%Y%m%d).tar.gz \
/etc/NetworkManager/system-connections \
/etc/hosts \
/etc/hostname \
/etc/ssh \
/etc/firewalld \
/etc/sysconfig/iptables \
/etc/samba/smb.conf 2>/dev/null
18. 전체 작업 순서 요약
1. Rocky Linux 9 설치
2. 설치 후 패키지 업데이트
3. 네트워크 인터페이스 확인
4. 고정 IP 및 DNS 설정
5. 게이트웨이와 외부 통신 확인
6. 호스트 이름 설정
7. 관리자 계정 생성
8. SSH 서비스 확인
9. root 직접 로그인 차단
10. 필요 시 SSH 허용 계정 제한
11. 필요 시 SSH 포트 변경
12. SELinux에 변경 포트 등록
13. 방화벽 포트 허용
14. SSH와 SFTP 접속 테스트
15. Samba 패키지 설치
16. Samba 계정 및 공유 디렉터리 생성
17. Samba 설정 파일 작성
18. SELinux 컨텍스트 설정
19. Samba 방화벽 허용
20. Windows에서 공유 접속 테스트
21. 설정 파일 백업
19. 빠른 점검 명령어 모음
# OS 버전
cat /etc/os-release
# 호스트 이름
hostnamectl
# IP 주소
ip -br address
# 라우팅
ip route
# NetworkManager
nmcli device status
nmcli connection show
# SSH 상태
systemctl status sshd
# SSH 문법
sshd -t
# 포트 리스닝
ss -lntup
# firewalld
firewall-cmd --list-all
# iptables
iptables -L -n -v --line-numbers
# Samba 문법
testparm
# Samba 계정
pdbedit -L
# Samba 서비스
systemctl status smb
# 실패한 서비스
systemctl --failed
# 최근 부팅 로그 오류
journalctl -p err -b --no-pager
관련 문서
- Rocky Linux 9 사용자 및 그룹 관리
- Rocky Linux 9 패키지 관리
- Rocky Linux 9 systemd 서비스 관리
- Rocky Linux 9 firewalld 상세 설정
- Rocky Linux 9 SSH 키 인증 설정
- Rocky Linux 9 SELinux 기본 관리
- Rocky Linux 9 Samba 고급 설정
- Rocky Linux 9 로그 확인 및 장애 분석
|
|
|
|
|
|
|
|