리눅스/CentOS7

CentOS7 - 초기설정/보안설정 (2/10)

일편나루 2019. 5. 25. 11:15
반응형

목차 (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

     

    # 설치 후 fail2 ban설정 파일을 아래와 같이 복사한 후 편집해줍니다.

    [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
    반응형