목차 (INDEX)
개요
CentOS7을 설치한 후 제가 개인적으로 초기에 설정해 두는 내용을 정리했습니다.
※ OS 설치는 이곳을 참고하세요 >> CentOS7 - OS설치하기 (1/10)
sudo명령어 사용하기
# Security문제로 인해 통상 root계정은 생성 후에는 사용하지 않고, 일반 유저가 루트 권한을 획득해서 사용하는데 이때 사용하는 명령어가 sudo입니다.
# 설정을 위해서 root유저로 로그인합니다.
[naru@centos7 ~]$ su root
password:
[root@centos7 ~]#
# sudo설정 파일을 수정합니다.
[root@centos7 ~]# visudo ← /etc/sudoers파일을 수정하게 됩니다.
## Allows people in group wheel to run all commands
#%wheel ALL=(ALL) ALL
↓↓↓↓↓↓↓↓ 코멘트(#)를 제거해줍니다
%wheel ALL=(ALL) ALL
# [wheel] 그룹에 해당 유저를 소속시킵니다
# 현재의 소속 그룹을 확인, 아직 wheel그룹에는 속해있지 않습니다.
[root@centos7 ~]# groups naru
naru : naru
# wheel그룹에 추가합니다 (usermod -aG 추가 그룹명 추가 유저)
[root@centos7 ~]# usermod -aG wheel naru
# 추가된 것을 확인합니다.
[root@centos7 ~]# groups naru
naru : naru wheel
# 테스트를 해봅니다
# ssh를 사용하여 naru유저로 접속합니다.
try🐶everything backend$ ssh naru@centos7 -p1999
The authenticity of host '[centos7]:1999 ([10.x.1.x]:1999)' can't be established.
ECDSA key fingerprint is SHA256:j4CnVGyLfoBjFNyYrK9qcf9q/Lpqa1Y5LOmsEjplTRU.
ECDSA key fingerprint is MD5:aa:e4:1c:e4:93:83:ee:33:8e:2d:b2:a6:37:a9:e8:dd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[centos7]:1999,[10.x.1.x]:1999' (ECDSA) to the list of known hosts.
naru@centos7's password:
[naru@centos7 ~]$
# naru유저로 sudo를 수행해 봅니다
[naru@centos7 ~]$ sudo su -
You should have received a regular course from your system administrator.
This is usually summarized in the following three points:
# 1) Respect the privacy of others.
# 2) Think before typing.
# 3) A great power is accompanied by a great responsibility.
[sudo] naru's password:
[root@centos7 ~]# ← root권한을 획득
/etc/group파일을 확인해보면 wheel그룹에 포함된 것을 확인 가능!!
[root@centos7 ~]# cat /etc/group | grep wheel
wheel:x:10:user1,naru
SELinux 무효화
SELinux는 redhat계열의 디스트리뷰션인 CentOS와 Fedora의 경우 기본 도입되어 있는 시스템입니다.
세세하게 액세스를 제어할 수 있지만, 작업 시 오히려 방해가 되는 경우가 많아서 무효화해두고,
firewall-cmd를 통해서 외부와의 액세스를 제어하기 위해서 무효화해둡니다.
[root@centos7 ~]# getenforce ← SELinux상태 확인
Enforcing ← SELinux유효
[root@centos7 ~]# setenforce 0 ← SELinux 무효화
[root@centos7 ~]# getenforce ← SELinux상태 확인
Permissive ← SELinux 무효
[root@centos7 ~]# vi /etc/sysconfig/selinux ← SELinux설정 파일 편집
SELINUX=enforcing
↓↓↓↓↓↓
SELINUX=disabled ← 시스템 기동시 SELinux를 무효화
패키지 관리 시스템 설정(yum)
RPM패키지의 인스톨/언인스톨을 수행하는 yum의 초기 설정을 합니다.
[root@centos7 ~]# yum -y update ← 이미 설치된 패키지를 일괄 업데이트
※ 대량의 패키지가 다운로드/업데이트되므로 시간이 많이 걸립니다
[root@centos7 ~]# yum -y install yum-cron ← yum-cron인스톨
[root@centos7 ~]# vi /etc/yum/yum-cron.conf ← yum-cron설정
apply_updates = yes ← 다운로드&업데이트를 자동으로 수행하게 됨
[root@centos7 ~]# systemctl start yum-cron ← 패키지 자동갱신 기동
[root@centos7 ~]# systemctl enable yum-cron ← 패키지 자동갱신 자동기동 설정
[root@centos7 ~]# yum -y groupinstall base "Development tools" ← 베이스, 개발 툴 패키지 군을 설치
NTPd 관리하기
# CentOS7에서 Minimal Installation 이외의 옵션으로 설치한 경우, chronyd가 표준 NTP클라이언트/서버로 기본 설치됩니다만,
예전부터 사용해왔던 NTPd를 설치하고 설정하는 것으로 합니다.
# NTP 서버 인스톨하기
[root@centos7 ~]# yum -y install ntp
[root@centos7 ~]# yum -y install chronyd
# NTP 서버 설정하기
[root@centos ~]# vi /etc/ntp.conf ← ntp설정 파일을 수정 # chrony/etc/chrony.conf
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap ← 추가(내부에서의 시간동기를 허가)
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
↓↓↓↓↓↓↓ 시간동기용 NTP 서버를 변경
server ntp.nict.jp iburst # 일본 표준시를 제공하고 있는 NTP 서버(stratum 1)
server ntp.jst.mfeed.ad.jp iburst # 상기 서버와 직접 동기 하고 있는 NTP 서버(stratum 2)
※ iburst 옵션을 추가해두면 기동 할 때 8회 싱크 시도 > 결과적으로 보다 빠르게 싱크 됩니다. (chronyd 4회 시도)
※ 공용 NTP 서버(한국) : 검색하면 많이 나오지만, time.kriss.re.kr time.bora.net time.nuri.net 등을 server로 지정해줍니다.
# NTP 서버 기동
NTP 서버 기동시 시각 차이가 심할 경우 NTP 서버가 기동 되지 않으므로 수동으로 시각을 맞춰줍니다.
[root@centos7 ~]# ntpdate ntp.nict.jp ← 수동으로 시각을 맞춥니다
9 May 15:54:43 ntpdate[31677]: the NTP socket is in use, exiting
[root@centos7 ~]#
[root@centos7 ~]# systemctl start ntpd ← NTP 서버 기동
[root@centos7 ~]# systemctl enable ntpd ← NTP 서버 자동기동 설정
[root@centos7 etc]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-05-09 16:05:17 JST; 13s ago
Process: 32127 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 32128 (ntpd)
CGroup: /system.slice/ntpd.service
└─32128 /usr/sbin/ntpd -u ntp:ntp -g
May 09 16:05:17 centos7 systemd[1]: Started Network Time Service.
May 09 16:05:17 centos7 ntpd[32128]: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16
May 09 16:05:17 centos7 ntpd[32128]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
May 09 16:05:17 centos7 ntpd[32128]: Listen and drop on 1 v6wildcard :: UDP 123
May 09 16:05:17 centos7 ntpd[32128]: Listen normally on 2 lo 127.0.0.1 UDP 123
May 09 16:05:17 centos7 ntpd[32128]: Listen normally on 3 p1p1 10.x.1.x UDP 123
May 09 16:05:17 centos7 ntpd[32128]: Listen normally on 4 ppp0 157.x.158.x UDP 123
May 09 16:05:17 centos7 ntpd[32128]: Listening on routing socket on fd #21 for interface updates
May 09 16:05:27 centos7 ntpd[32128]: 0.0.0.0 c016 06 restart
May 09 16:05:27 centos7 ntpd[32128]: 0.0.0.0 c012 02 freq_set kernel -2.991 PPM
[root@centos7 etc]#
# 아래의 *ntp-a3.nict.go. .NICT. 로 시작하는 행의 맨 앞에 * 또는 + 가 표시되면 동기 완료를 의미합니다.
[root@centos7 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-a3.nict.go. .NICT. 1 u 58 64 17 9.934 2.991 0.340
ntp1.jst.mfeed. 133.243.236.17 2 u 61 64 17 5.791 3.579 0.792
[root@centos7 ~]#
↓↓↓↓↓↓↓ 약 5분 후에 다시 체크해보면 둘 다 동기화된 것을 확인할 수 있습니다.
[root@centos7 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-a3.nict.go. .NICT. 1 u 17 64 377 6.988 2.805 0.660
+ntp1.jst.mfeed. 133.243.236.17 2 u 18 64 377 6.333 3.026 1.248
[root@centos7 ~]#
# timedatectl로 시각정보가 어떻게 되어있는지 확인 가능합니다.
[root@centos7 ~]# timedatectl
Local time: Thu 2019-05-09 15:43:54 JST
Universal time: Thu 2019-05-09 06:43:54 UTC
RTC time: Thu 2019-05-09 06:43:54
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[root@centos7 ~]#
Firewall설정
# 필요한 서비스만 오픈해둡니다. (samba http dns smtp smtps ssh https imaps)
[root@centos7 ~]# firewall-cmd --add-service=dns --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=http --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=https --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=imaps --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=smtps --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=smtp --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=samba --zone=public --permanent
[root@centos7 ~]# firewall-cmd --zone=public --permanent --add-port=1999/tcp
[root@centos7 ~]# firewall-cmd --reload
[root@centos7 ~]# firewall-cmd --list-service
samba http dns smtp smtps ssh https imaps
[root@centos7 ~]#
SSH포트 변경(22/tcp --> 1999/tcp)
# well-known port(0~1023) 이외의 포트번호 중 자신의 시스템에서 미사용 중인 번호를 임의로 선택하여 아래와 같이 적용합니다.
[root@centos7 ~]# vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
Port 1999
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...
# sshd_config파일을 저장 후 sshd데몬을 재시작해 줍니다
[root@centos7 ~]# systemctl restart sshd.service
# firewall에서 변경한 포트번호를 오픈해 줍니다.
[root@centos7 ~]# firewall-cmd --permanent --zone=public --add-port=1999/tcp
[root@centos7 ~]# firewall-cmd --reload ← Reload the firewall configurations
# 변경된 내용을 확인해 봅니다.
# sshd의 포트번호가 변경되었는지 확인해 봅니다.(22/tcp -> 1999/tcp)
[root@centos7 ~]# ss -tnlp | grep ssh
LISTEN 0 128 *:1999 *:* users:(("sshd",pid=5325,fd=3))
LISTEN 0 128 :::1999 :::* users:(("sshd",pid=5325,fd=4))
[root@centos7 ~]#
# client 측에서 접속해봅니다.
try🐶everything ~$ ssh naru@centos7 -p1999
naru@centos7's password:
TELET, FTP 사용금지 --> SSH, SCP 사용하기
반드시 필요한 경우가 아니라면 telnet, vsftpd는 설치하지 않거나 disable 시켜 둡니다.
# [SSH사용] 개인 노트북에서 특정 서버에 접속하기
try🐶everything frontend$ ssh naru@centos7 -p 1999
# [SCP사용] 개인 노트북의 특정 파일을 서버상에 복사하기
try🐶everything frontend$ scp -P 1999 ./* naru@centos7:/home/naru/backend
ipv6영구 무효화
[root@centos7 ~]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
Fail2Ban 설정하기 / 보안설정
외부 공개서버를 운영하다 보면 ssh, smtp auth 등으로 끊임없이 인증을 시도하는 무리들이 있는데,
패스워드 설정이 단순할 경우 해킹을 당할 우려가 존재하기에 관리자는 불안할 수밖에 없습니다.
특정 IP에서 몇 초 사이에 몇 번 이상의 인증 실패가 반복되면 해당 IP에서의 액세스를 무조건 거부하는 것을 자동으로 설정할 수 있습니다.
CentOS7에서는 일반적으로 firewalld와 연계하여 사용하게 되는데요. SSH에 대해서 설정해 보겠습니다.
# epel-release repository가 설치되어 있지 않으면 에러가 발생하므로 먼저 설치합니다.
[root@centos7 ~]# yum install epel-release
만약 못 찾고 설치가 안되면 삭제 후에 다시 설치합니다.
[root@centos7 ~]# yum remove epel-release
# fail2ban관련 패키지를 설정해줍니다.
[root@centos7 ~]# yum install fail2ban fail2ban-systemd firewalld
[root@centos7 ~]# cp -p /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/jail.local
[root@centos7 ~]# vi /etc/fail2ban/jail.d/jail.local
23 [sshd] ← 추가 #맨앞의 숫자는 라인번호입니다.
24 enabled = true ← 추가
48 # ban a host which matches an address in this list. Several addresses can be
49 # defined using space (and/or comma) separator.
50 ignoreip = 127.0.0.1/8 10.x.1.0/24 192.168.x.0/24 ← 추가 (실제 자신의 네크워크)
58 # "bantime" is the number of seconds that a host is banned.
59 bantime = 86400
156 # Default banning action (e.g. iptables, iptables-new,
157 # iptables-multiport, shorewall, etc) It is used to define
158 # action_* variables. Can be overridden globally or per
159 # section within jail.local file
160 #banaction = iptables-multiport
161 #banaction_allports = iptables-allports
162 banaction = firewallcmd-ipset ← 추가 (firewalld와 연동)
222 # SSH servers
223 #
224
225 [sshd]
226
227 port = 1999 ← 포트를 1999 번으로 변경
228 logpath = %(sshd_log)s
229 backend = %(sshd_backend)s
# 파일을 저장 후 fail2ban과 firewalld를 활성화해줍니다. (재기동시 자동기동)
[root@centos7 ~]# systemctl enable fail2ban
[root@centos7 ~]# systemctl enable firewalld
# 파일을 저장 후 fail2ban과 firewalld를 시작해줍니다.
[root@centos7 ~]# systemctl start firewalld
[root@centos7 ~]# systemctl start fail2ban
#fail2ban 데몬의 상태를 확인합니다.
[root@centos7 ~]# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-05-09 21:08:02 JST; 1min 9s ago
Docs: man:fail2ban(1)
Process: 7140 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)
Process: 7748 ExecStart=/usr/bin/fail2ban-client -x start (code=exited, status=0/SUCCESS)
Main PID: 7751 (fail2ban-server)
CGroup: /system.slice/fail2ban.service
└─7751 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b
May 09 21:08:01 centos7 systemd[1]: Starting Fail2Ban Service...
May 09 21:08:02 centos7 fail2ban-client[7748]: 2019-05-09 21:08:02,080 fail2ban.server [7749]: INFO Starting Fail2ban v0.9.7
May 09 21:08:02 centos7 fail2ban-client[7748]: 2019-05-09 21:08:02,081 fail2ban.server [7749]: INFO Starting in daemon mode
May 09 21:08:02 centos7 systemd[1]: Started Fail2Ban Service.
# ban 된 IP주소를 확인합니다.
[root@centos7 ~]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
[root@centos7 ~]#
또는,
[root@centos7 ~]# ipset --list
Name: fail2ban-sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
Size in memory: 120
References: 1
Number of entries: 0
Members:
[root@centos7 ~]#
# fail2ban의 로그파일
/var/log/fail2ban.log
OS 설치 후의 기본 설정과 보안설정에 대해서 알아봤습니다.
다음에는 무료 도메인을 취득하고 설정하는 방법에 대해서 알아볼 예정입니다.
[내용 추가]
Telent 서비스 추가하기
local에서 test용도로 사용하기 위해서 추가합니다.
[root@centos7 ~]# yum list installed | grep telnet
[root@centos7 ~]# yum -y install telnet telnet-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* atomic: mirrors.hosting.in.th
* base: ty1.mirror.newmediaexpress.com
* centos-sclo-rh: ty1.mirror.newmediaexpress.com
* centos-sclo-sclo: ty1.mirror.newmediaexpress.com
* epel: ftp.jaist.ac.jp
* extras: ty1.mirror.newmediaexpress.com
* remi: ftp.riken.jp
* remi-php73: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ty1.mirror.newmediaexpress.com
Resolving Dependencies
--> Running transaction check
---> Package telnet.x86_64 1:0.17-64.el7 will be installed
---> Package telnet-server.x86_64 1:0.17-64.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Installing:
telnet x86_64 1:0.17-64.el7 base 64 k
telnet-server x86_64 1:0.17-64.el7 base 41 k
Transaction Summary
===================================================================================================================
Install 2 Packages
Total download size: 105 k
Installed size: 168 k
Downloading packages:
(1/2): telnet-server-0.17-64.el7.x86_64.rpm | 41 kB 00:00:00
(2/2): telnet-0.17-64.el7.x86_64.rpm | 64 kB 00:00:05
-------------------------------------------------------------------------------------------------------------------
Total 18 kB/s | 105 kB 00:00:05
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 1:telnet-server-0.17-64.el7.x86_64 1/2
Installing : 1:telnet-0.17-64.el7.x86_64 2/2
Verifying : 1:telnet-0.17-64.el7.x86_64 1/2
Verifying : 1:telnet-server-0.17-64.el7.x86_64 2/2
Installed:
telnet.x86_64 1:0.17-64.el7 telnet-server.x86_64 1:0.17-64.el7
Complete!
[root@centos7 ~]# systemctl enable telnet
telnet@ telnet.socket
[root@centos7 ~]# systemctl enable telnet.socket
Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket.
[root@centos7 ~]# systemctl list-unit-files | grep telnet.socket
telnet.socket enabled
[root@centos7 ~]# systemctl start telnet.socket
[root@centos7 ~]# systemctl status telnet.socket
● telnet.socket - Telnet Server Activation Socket
Loaded: loaded (/usr/lib/systemd/system/telnet.socket; enabled; vendor preset: disabled)
Active: active (listening) since Fri 2019-05-24 16:58:24 JST; 6s ago
Docs: man:telnetd(8)
Listen: 0.0.0.0:23 (Stream)
Accepted: 0; Connected: 0
May 24 16:58:24 centos7 systemd[1]: Listening on Telnet Server Activation Socket.
[root@centos7 ~]#
# local 테스트용인 경우, 방화벽에는 적용하지 않는다
# 자신의 로컬넷 : 192.168.1.0/24
firewall-cmd --permanent --zone=public --add-rich-rule "rule family="ipv4" source address="192.168.1.0/24" service name="telnet" log prefix="telnet" level="info" limit value="1/m" accept"
firewall-cmd --reload
'리눅스 > CentOS7' 카테고리의 다른 글
CentOS7 - 워드프레스(WordPress) 환경 구축하기 (9/10) (0) | 2019.05.25 |
---|---|
CentOS7 - Windows File Server(Samba) 구축하기(7/10) (0) | 2019.05.25 |
CentOS7 - Name Server 구축하기(bind) (4/10) (0) | 2019.05.25 |
CentOS7 - 무료도메인 취득/설정하기 (freenom) (3/10) (0) | 2019.05.25 |
CentOS7 - OS설치하기 (1/10) (0) | 2019.05.25 |