/tmp 보안 설정
/tmp 디렉터리는 "Tempolory File" 즉 임시 파일이 저장되는 장소입니다.
기본적으로 /tmp 디렉터리는 누구나 읽고, 쓰고, 실행할 수 있게 설정되는데요. 이러한 이유로 웹 등으로 스크립트를 심는다던가, 특정 파일을 실행시킨다던가 하는 공격에 굉장히 취약합니다. 따라서 기본적으로 OS 설치를 하고 나면 /tmp 디렉터리의 보안 설정은 당연한 것처럼 진행해줘야 합니다.
설정 방법은 간단합니다.
1. OS 설치시 /tmp 파티션 생성(임시 파일이 저장되는 디렉터리 이므로 보통 1GB 할당)
/var/tmp 삭제
2. # rm -rf /var/tmp
3. /tmp 를 var/tmp로 심볼릭 링크 생성
# ln -s /tmp /var/tmp
4. /etc/fstab을 열어서 다음 두 줄을 수정
# vi /etc/fstab
/dev/sda3 /tmp ext4 default,noexec,nosuid,nodev 1 2
. . .
tmpfs /dev/shm tmpfs default,noexec,nosuid 0 0
#################################################################
# nodev - 장치 사용 금지
# nosuid - root 권한 금지
# noexec - 바이너리 파일 실행 금지
5. 설정 적용을 위해 /tmp 리마운트
# mount -o remount /tmp
# mount -o remount /dev/shm
6. 설정 확인
# mount | grep tmp
아주 단순하지만 가장 중요한 기본 보안 설정 중 하나입니다. 간단하면서 쉽게 적용 가능하니 꼭 진행해주세요!
방화벽(iptables) 및 Selinux 종료
분명 가장 기본적인 보안 설정에 대해 알아보자고 했는데 왜 방화벽과 Selinux를 꺼야 하나요? 라고 생각하시는 분들 많이 계실 거예요.
방화벽 즉 Iptables 와 Selinux 를 끄는 이유는 서버 초기 세팅을 원활하고 효율적으로 하기 위함이라고 생각하면 좋을 것 같습니다.
처음 서버를 설치하면 어떤 목적으로 사용할지에 대해 먼저 고민해보고, 목표한 목적으로 사용하기 위해서는 어떤 패키지를 설치해야 하며 어떤 환경에서 작업이 이루어져야 하는지 생각하며 작업하게 됩니다.
그런데 이 Iptables 와 Selinux 는 많은 환경 속에서 또 하나의 변수를 만드는 일을 초래해요. 최초에 OS 를 설치하게 되면 Iptables 는 다음과 같은 정책이 자동으로 설정되어 실행 중입니다.
먼저 Iptables 에 대한 내용은 나중에 별도로 자세하게 다뤄 볼 예정이니 오늘은 간단하게 초기에 어떤 설정이 되어 있는지만 보고 넘어가 볼게요!
tcp 나 udp 등 연결 상태에 대한 옵션과 icmp 허용, 그리고 local 허용, 마지막으로 ssh를 허용하고 나머지는 전부 접속 거부하며, 거부 이유는 icmp 를 통해 peer에게 알려줘라! 하는 내용입니다.
만약 우리가 운영할 서버가 웹서버라면 가장 보편적인 httpd 즉 80 포트를 사용할 텐데 최초 iptables 에 의해 이미 차단이 되어 있는 상황인 거죠. 당황하게 되면 왜 서비스가 안되는지 고민하다 삼천포로 빠질 수 있습니다! 이처럼 일일이 서비스 포트를 사용할 때마다 열고 닫고 하는 게 아니고, 최초 작업 환경에서는 전부 허용한 다음 실제 서비스 단계에서 iptables 를 적용시키는 게 훨씬 편하게 운영이 가능하겠죠?
Iptables 를 중지하는 방법 아주 간단합니다! 어차피 실 서비스 후 방화벽 정책은 다시 작성하여 관리하므로 전부 삭제하도록 해요.
1. iptables 삭제( -F 옵션)
[root@dothome ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@dothome ~]# iptables -F
[root@dothome ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2. iptables 저장
/etc/init.d/iptables save
Selinux 도 마찬가지라고 생각하면 쉽습니다. ^^
먼저 Selinux는 "Security-Enhanced Linux" 의 약어이며, Selinux 도 자세한 내용은 다음 시간에 살펴볼 거예요. 오늘은 간단히 짚어만 볼까요?
Selinux 는 기본적으로 Enforcing 모드로 세팅되어 있으며, 모든 것이 거절되고, 정책상 특정 부분에 대해서만 허가하여 허가한 부분에 대해서만 처리하는 방식이라고 생각하면 됩니다.
Selinux 는 3가지 레벨이 있습니다.
* Enforcing : 기본 모드이며, 모든 Access 와 Logging Action 이 설정되어 있습니다.
* Permissive : 모든 보안 정책을 강제적으로 설정하진 않고, 경고와 Log 만 발생합니다.
* Disabled : Selinux 를 종료합니다.
이처럼 최초에는 enforcing 모드가 되어 모든 것이 막혀있는 상태입니다. 실제 운영 중인 단계의 시스템에서는 이 설정을 사용하는 게 보안적으로 훨씬 안전하고 든든하겠지만... 우리는 아직 테스트 개발 단계에서의 설정이니까요. ^^ 이 또한 disablesd 로 바꿔줍니다.
1. /etc/selinux/config 를 열어 수정합니다.
[root@dothome ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled # 이 부분을 disabled 로 설정!
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
위와 같이 설정한 후 리부팅을 하면 selinux가 disabled 상태로 변합니다!
만약 selinux 를 계속해서 enforcing 으로 사용하고 싶다면 서비스 포트 하나 추가할 때마다 이래야 될 거예요!
1. http 포트 추가시
[root@dothome ~]# semanage port -a -t http_port_t -p tcp 80
2. ssh 포트 변경시
[root@dothome ~]# semanage port -a -t ssh_port_t -p tcp 2222
semanage 명령어가 먹히지 않는 경우에는
[root@localhost ~]# yum install policycoreutils-python
위에 있는 것을 yum을 통해서 설치해주시면 해결됩니다.
SSH 보안 설정
원격으로 리눅스 서버를 운영하는 관리자라면 SSH 접근과 관련하여 보안도 충분히 고민해봐야 합니다.
먼저 SSH 는 "Secure Shell"의 약어로 사전적 의미는 "공개 키 방식의 암호 방식을 사용하여 원격지 시스템에 접근해 암호화된 메시지를 전송할 수 있는 프로토콜" 입니다. 이 프로토콜은 보안에 취약점을 가지고 있는 원격 로그인(rlogin), 원격 명령 실행(rsh), 원격 파일 복사(rcp), 원격 접속 서비스(telnet) 등을 대체하여 사용되며, 임의의 포트에 대해 안전한 채널을 제공한다고 합니다. 호스트와 호스트 사이의 모든 통신이 암호화에 의해 자동으로 보호되기 때문에 네트워크 공격으로 인해 패스워드 노출될 가능성은 없어요! 그리고 SSH 는 TCP 22번 포트를 이용하지만, 앞서 안내드린 것처럼 임의의 포트에 대해 안전한 채널을 제공하므로 보안을 위해서는 임의의 포트를 사용하는 것이 좋겠죠?
그러면 SSH 보안 설정에 대해 알아볼게요. 정말 간단합니다!
1. /etc/sshd/sshd_config 를 열어 수정합니다.
[root@dothome ~]# vi /etc/sshd/sshd_config
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
Port 2222 # 이 부분에 주석을 지우고 원하는 포트로 변경
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
2. 서비스 재시작
[root@dothome ~]# /etc/init.d/sshd restart
3. 확인
[root@dothome ~]# netstat -nlpt |grep ssh
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1493/sshd
tcp 0 0 :::2222 :::* LISTEN 1493/sshd
SSH 에 대한 기본 포트를 변경했으니 이제 공격자들은 우리 서버가 어떤 포트로 SSH 서비스를 하는지 찾기 어려울 거예요
'linux > CentOS' 카테고리의 다른 글
CentOS 7 firewall 방화벽 설정 (0) | 2020.04.01 |
---|---|
CentOS7 - APM 웹서버 구축 (0) | 2020.04.01 |
CentOS7 - 초기 세팅(2) (0) | 2020.03.15 |
CentOS7 - 초기 세팅(1) (0) | 2020.03.15 |
[리눅스 기본 보안 설정] 계정 잠금 임계값 설정 (0) | 2019.12.31 |