웹사이트 검색

23 CentOS 서버 강화 보안 팁 - 2부


CentOS 서버를 보호하고 강화하는 방법에 대한 이전 튜토리얼에 이어 이 문서에서는 아래 체크리스트에 제시될 다른 보안 팁에 대해 논의하겠습니다.

요구사항

  1. CentOS 서버 강화 보안 팁 20가지 - 1부

21. 쓸모없는 SUID 및 SGID 명령 비활성화

setuidsetgid 비트가 바이너리 프로그램에 설정된 경우 이러한 명령은 루트 권한과 같은 다른 사용자 또는 그룹 권한으로 작업을 실행할 수 있습니다. 심각한 보안 문제를 노출시킬 수 있습니다.

종종 버퍼 오버런 공격은 이러한 실행 파일 바이너리를 악용하여 루트 고급 사용자의 권한으로 승인되지 않은 코드를 실행할 수 있습니다.

find /  -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

setuid 비트를 설정 해제하려면 아래 명령을 실행하세요.

chmod u-s /path/to/binary_file

setgid 비트를 설정 해제하려면 아래 명령을 실행하십시오.

chmod g-s /path/to/binary_file

22. 소유되지 않은 파일 및 디렉터리 확인

유효한 계정이 소유하지 않은 파일이나 디렉터리는 삭제하거나 사용자 및 그룹의 권한을 할당해야 합니다.

사용자 및 그룹이 없는 파일 또는 디렉토리를 나열하려면 아래 find 명령을 실행하십시오.

find / -nouser -o -nogroup -exec ls -l {} \;

23. 세계적으로 쓰기 가능한 파일 나열

누구든지 수정할 수 있다는 사실 때문에 시스템에 누구나 쓰기 가능한 파일을 보관하는 것은 위험할 수 있습니다. 항상 누구나 쓰기 가능한 Symlinks를 제외하고 워드 쓰기 가능한 파일을 표시하려면 아래 명령을 실행하십시오.

find / -path /proc -prune -o -perm -2 ! -type l –ls

24. 강력한 비밀번호 만들기

최소 8자 이상의 비밀번호를 만드세요. 비밀번호에는 숫자, 특수문자, 대문자가 포함되어야 합니다. /dev/urandom 파일에서 128비트 비밀번호를 생성하려면 pwmake를 사용하세요.

pwmake 128

25. 강력한 비밀번호 정책 적용

/etc/pam.d/passwd 파일에 아래 줄을 추가하여 시스템이 강력한 비밀번호를 사용하도록 합니다.

password required pam_pwquality.so retry=3

위 줄을 추가하면 입력한 비밀번호는 abcd와 같이 단조로운 순서로 3자 이상, 과 같이 3자 이상의 동일한 연속 문자를 포함할 수 없습니다. 1111.

사용자가 모든 문자 클래스를 포함하여 최소 8자 길이의 비밀번호를 사용하도록 강제하려면 문자 시퀀스 및 연속 문자에 대한 강도 검사를 /etc/security에 추가합니다. /pwquality.conf 파일.

minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3

26. 비밀번호 에이징 사용

chage 명령은 사용자 비밀번호 만료에 사용할 수 있습니다. 사용자 비밀번호가 45일 후에 만료되도록 설정하려면 다음 명령을 사용하세요.

chage -M 45 username

비밀번호 만료 시간을 비활성화하려면 다음 명령을 사용하십시오.

chage -M -1 username

다음 명령을 실행하여 즉시 비밀번호 만료를 강제합니다(사용자는 다음 로그인 시 비밀번호를 변경해야 함).

chage -d 0 username

27. 계정 잠금

passwd 또는 usermod 명령을 실행하여 사용자 계정을 잠글 수 있습니다.

passwd -l username
usermod -L username

계정을 잠금 해제하려면 passwd 명령에 -u 옵션을 사용하고 usermod-U 옵션을 사용하세요.

28. 계정 셸 액세스 방지

시스템 계정(일반 계정 또는 서비스 계정)이 bash 셸에 액세스하지 못하도록 하려면 다음에서 루트 셸을 /usr/sbin/nologin 또는 /bin/false로 변경하세요. 아래 명령을 실행하여 /etc/passwd 파일을 확인하세요.

usermod -s /bin/false username

새 사용자를 생성할 때 셸을 변경하려면 다음 명령을 실행하세요.

useradd -s /usr/sbin/nologin username

29. vlock으로 가상 사용자 콘솔 잠금

vlock은 Linux 콘솔에서 하나의 다중 세션을 잠그는 데 사용되는 프로그램입니다. 아래 명령을 실행하여 프로그램을 설치하고 터미널 세션 잠금을 시작하십시오.

yum install vlock
vlock

30. 중앙 집중식 시스템을 사용하여 계정 및 인증 관리

중앙 집중식 인증 시스템을 사용하면 계정 관리 및 제어가 크게 단순화될 수 있습니다. 이러한 유형의 계정 관리를 제공할 수 있는 서비스는 IPA 서버, LDAP, Kerberos, Microsoft Active Directory, Nis, Samba ADS 또는 Winbind입니다.

이러한 서비스 중 일부는 기본적으로 Kerberos와 같은 암호화 프로토콜 및 대칭 키 암호화를 통해 보안 수준이 높습니다.

31. USB 미디어의 읽기 전용 강제 마운트

blockdev 유틸리티를 사용하면 모든 이동식 미디어를 읽기 전용으로 마운트하도록 강제할 수 있습니다. 예를 들어 /etc/udev/rules.d/ 디렉토리에 80-readonly-usb.rules라는 이름의 새 udev 구성 파일을 만듭니다. 다음 내용으로:

SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"

그런 다음 아래 명령을 사용하여 규칙을 적용합니다.

udevadm control -reload

32. TTY를 통한 루트 액세스 비활성화

루트 계정이 모든 콘솔 장치(TTY)를 통해 시스템 로그인을 수행하지 못하도록 하려면 루트로 다음 명령 터미널 프롬프트를 입력하여 securetty 파일의 내용을 지우십시오.

cp /etc/securetty /etc/securetty.bak
cat /dev/null > /etc/securetty

이 규칙은 SSH 로그인 세션에는 적용되지 않습니다.
SSH를 통한 루트 로그인을 방지하려면 /etc/ssh/sshd_config 파일을 편집하고 아래 줄을 추가하세요.

PermitRootLogin no

33. POSIX ACL을 사용하여 시스템 권한 확장

액세스 제어 목록은 단일 사용자나 그룹 이상의 액세스 권한을 정의할 수 있으며 프로그램, 프로세스, 파일 및 디렉터리에 대한 권한을 지정할 수 있습니다. 디렉터리에 ACL을 설정하면 해당 하위 항목이 자동으로 동일한 권한을 상속합니다.

예를 들어,

setfacl -m u:user:rw file
getfacl file

34. 시행 모드에서 SELinux 설정

Linux 커널에 대한 SELinux 개선 사항은 필수 액세스 제어(MAC) 정책을 구현하여 사용자가 모든 사용자, 프로그램, 프로세스, 파일 및 장치에 대해 세부적인 권한을 제공하는 보안 정책을 정의할 수 있도록 합니다.

커널의 액세스 제어 결정은 인증된 사용자 ID가 아닌 모든 보안 관련 컨텍스트를 기반으로 이루어집니다.

Selinux 상태를 확인하고 정책을 시행하려면 아래 명령을 실행하세요.

getenforce
setenforce 1
sestatus

35. SELinux 추가 유틸리티 설치

SELinux 운영을 위한 추가 Python 유틸리티를 제공하는 policycoreutils-python 패키지를 설치합니다: audit2allow, audit2why, chcat semanage.

간단한 설명과 함께 모든 부울 값을 표시하려면 다음 명령을 사용하십시오.

semanage boolean -l

예를 들어 httpd_enable_ftp_server 값을 표시하고 설정하려면 아래 명령을 실행합니다.

getsebool httpd_enable_ftp_server

재부팅 후에도 부울 값이 유지되도록 하려면 다음 예에 표시된 대로 setsebool-P 옵션을 지정하세요.

setsebool -P httpd_enable_ftp_server on

36. 중앙 집중식 로그 서버 사용

중요한 유틸리티 로그 메시지를 중앙 로그 서버로 보내도록 rsyslog 데몬을 구성합니다. 또한 logwatch 유틸리티의 도움으로 로그 파일을 모니터링합니다.

원격 서버에 로그 메시지를 보내면 시스템이 손상되면 악의적인 사용자가 자신의 활동을 완전히 숨길 수 없으며 항상 원격 로그 파일에 흔적을 남길 수 있습니다.

37. 프로세스 계정 활성화

psacct 유틸리티를 설치하여 프로세스 계정을 활성화하고 lastcomm 명령을 사용하여 시스템 계정 파일에 기록된 이전에 실행된 명령에 대한 정보를 표시하고 sa를 사용하여 기록된 이전에 실행된 명령에 대한 정보를 요약합니다. 시스템 계정 파일에 있습니다.

38. 강화 /etc/sysctl.conf

시스템을 보호하려면 다음 커널 매개변수 규칙을 사용하십시오.

소스 라우팅 비활성화

net.ipv4.conf.all.accept_source_route=0

IPv4 전달 비활성화

ipv4.conf.all.forwarding=0

IPv6 비활성화

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

특별히 요구되지 않는 한 ICMP 리디렉션 패킷의 수락 및 전송을 비활성화합니다.

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0

역방향 경로 전달 비활성화

net.ipv4.conf.all.rp_filter=2

모든 ICMP 에코 요청 무시(활성화하려면 1로 설정)

net.ipv4.icmp_echo_ignore_all = 0

39. VPN 서비스를 사용하여 보호되지 않은 공용 네트워크를 통해 구내에 액세스

이동통신사가 인터넷을 통해 LAN 구내에 원격으로 액세스하려면 항상 VPN 서비스를 사용하세요. 이러한 유형의 서비스는 OpenVPN과 같은 무료 오픈 소스 솔루션이나 Cisco VPN(Epel Repositories에서 제공하는 vpnc 명령줄 유틸리티 설치)과 같은 독점 솔루션을 사용하여 구성할 수 있습니다.

40. 외부 시스템 검사 수행

다음과 같은 특정 도구를 사용하여 LAN을 통해 원격 지점에서 시스템을 검사하여 시스템 보안의 취약성을 평가합니다.

  1. Nmap – 네트워크 스캐너 29 Nmap 명령의 예
  2. Nessus – 보안 스캐너
  3. OpenVAS – 취약점을 검색하고 포괄적인 취약점 관리를 위해 사용됩니다.
  4. Nikto – 탁월한 CGI(Common Gateway Interface) 스크립트 스캐너 Linux의 웹 스캔 취약점

41. 내부적으로 시스템 보호

바이러스, 루트킷, 맬웨어로부터 내부 시스템 보호를 사용하고 다음과 같은 무단 활동(DDOS 공격, 포트 검색)을 탐지할 수 있는 침입 탐지 시스템을 설치하는 것이 좋습니다.

  1. AIDE – 고급 침입 탐지 환경 – http://aide.sourceforge.net/
  2. ClamAV – 바이러스 백신 스캐너 https://www.clamav.net
  3. Rkhunter – 루트킷 스캐너
  4. Lynis – Linux용 보안 감사 및 검사 도구
  5. Tripwire – 보안 및 데이터 무결성 http://www.tripwire.com/
  6. Fail2Ban – 침입 네트워크 방지
  7. OSSEC – (HIDS) 호스트 기반 침입 탐지 시스템 http://ossec.github.io/
  8. Mod_Security – 무차별 공격 또는 DDoS 공격 보호

42. 사용자 환경 변수 수정

아래 명령을 실행하여 명령 실행을 저장하기 위해 날짜시간 형식을 추가합니다.

echo 'HISTTIMEFORMAT="%d/%m/%y  %T  "' >> .bashrc'

명령을 입력할 때마다(로그아웃 대신) HISTFILE을 즉시 기록하도록 강제합니다.

echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc

시간 초과 로그인 세션을 제한합니다. 유휴 시간 동안 아무런 활동도 수행되지 않으면 자동으로 셸을 해제합니다. SSH 세션을 자동으로 연결 해제하는 데 매우 유용합니다.

echo ‘TMOUT=120’ >> .bashrc

다음을 실행하여 모든 규칙을 적용합니다.

source .bashrc

43. 백업 데이터

시스템 오류가 발생할 경우를 대비해 시스템 복사본을 가급적이면 오프사이트에 저장하려면 tar, cat, rsync, scp, LVM 스냅샷 등과 같은 백업 유틸리티를 사용하십시오.

시스템이 손상된 경우 이전 백업에서 데이터 복원을 수행할 수 있습니다.

마지막으로, 시스템을 안전하게 유지하기 위해 아무리 많은 보안 조치와 반대 조치를 취하더라도 컴퓨터가 연결되어 있고 전원이 켜져 있는 한 결코 100% 완벽하게 안전할 수 없다는 점을 잊지 마십시오.