개발자의 하루

CentOS 6.9 설치 후 기본 설정 본문

Server

CentOS 6.9 설치 후 기본 설정

단독질주 2017. 5. 31. 12:47
반응형


CentOS설치후 실전에 유용하게 사용되는 기본적인 보안 설정 및 시스템 설정을 알아보겠습니다.



1. 랜카드 설정

http://dev18.tistory.com/1

전편에서 랜카드 설정을 못 잡으셨다면 수동으로 랜카드를 잡아줍니다.


랜카드 설정이 빠져있네요.


/etc/sysconfig/network-scripts/ 안에 자신에 맞는 랜카드를 찾아 수정해줍니다.

일반적으로 랜카드가 2개인 경우 첫번째가 ifcfg-eth0 두번째가 ifcfg-eth1 로 표시됩니다.


# vi /etc/sysconfig/network-scripts/ifcfg-eth0


DEVICE=eth0

HWADDR=00:0C:29:E7:B5:F9

TYPE=Ethernet

UUID=fe6a4583-aa31-47f1-b5ae-2ee17249bad0

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.29.199

NETMASK=255.255.255.0

GATEWAY=192.168.29.2

ONBOOT는 yes로 설정하여 부팅시 자동으로 랜카드를 활성하고

NM_CONTROLLED(네트워크 관리 도구 사용)도 yes

BOOTPROTO(IP할당방식)은 static(고정)으로 설정하시고 (static, dhcp, bootp,none)

IPADDR, NETMASK, GATEWAY를 사용환경에 맞게 설정합니다.


# service network restart

# ifconfig 

랜카드를 재시작하고 ip를 확인하면 정상적으로 잡힌 것을 확인 하실 수 있습니다.


하지만 아직 완벽하게 설정되지 않았네요.

아직 DNS설정이 안되어 ip주소로는 핑이 되지만 도메인 주소로ping이 날라가지 않네요.


sed -i "/search/d" /etc/resolv.conf && \

sed -i "/^$/d" /etc/resolv.conf && \

echo "nameserver 168.126.63.1" > /etc/resolv.conf && \

echo "nameserver 168.126.63.2" >> /etc/resolv.conf

DNS설정후 도메인으로 ping을 하면 정상적으로 ping이 날나가는 것을 확인하실 수 있습니다.




2. 최신 버전으로 업데이트 YUM 및 추가 소프트웨어 설치

이제 네트워크도 잡았으니 YUM을 이용하여 최신 버전으로 설치된 프로그램을 업데이트를 해줍니다.

yum clean all

# yum update



최소 서버 설치를 최소로 했기 때문에 몇몇 프로그램들은 수동으로 설치해 줍니다.

# yum -y install gcc messagebus ntsysv rdate yum-fastestmirror kernel-devel kernel-doc kernel-source ncurses ncurses-devel xinetd netconfig vim-enhanced irqbalance man-pages-ko sendmail* wget



3. 불필요한 서비스 실행 중지

2단계에서 ntsysv를 설치 했기에 쉽게 서비스 실행 여부를 결정할 수 있습니다.

# ntsysv

각자 설정에 맞는 서비스를 선택하여 * 를 체크(스페이스로 체크/언체크)하여 확인을 누르시면 설정이 완료됩니다.

제가 생각하는 필수 서비스는 아래와 같습니다.


crond    // 크론 작업은 서버에서 꼭 필요한 작업스케줄러죠

iptables    // 리눅스 자체 방화벽으로 추후 fail2ban등을 이용해 더욱 강한 방화벽 설정이 가능합니다.

irqbalance    // 요새 CPU는 거의 단일 CPU가 아니니 인터럽트를 분산하여 이용하는게 더욱 효율적입니다.

network    // 랜없이 서버는 무용지물이죠.

rsyslog    // 서버에서 로그는 필수겠죠

saslauthd    // 메일서버 운영지 인증문제로 필요합니다.

sendmail    // 보내는 메일 서버로 사용합니다.

sshd    // 원격 접속은 필수죠

xinetd    // 요새는 잘 사용하진 않지만 혹시나 모를 데몬관리를 위해



irqbalance가 활성화 되면 아래처럼 확인 가능합니다.

# cat /proc/interrupts


ntsysv에서 필요한 서비스를 적용 하신후 재부팅 후 열린 포트를 확인해 봅니다.

# netstat -nlp

딱 필요한 포트만 열린 것을 확인 가능합니다.




ps. 리눅스 콘솔에서 재부팅 방법

reboot

# shutdown -r

# init 6

# echo b > /proc/sysrq-trigger

주의) 재부팅 또는 종료시 sync 명령어로 혹시나 메모리에 남아있는 자료를 하드에 보존합니다.



ps. 서버 콘솔상에서는 깨지지 않는데 SSH 프로그램으로 접속하면 깨지는 경우가 있습니다.

하지만 깨진 화면에서도 몇번 하시다 보면 쉽게 설정 조정이 가능하실 겁니다~



4. 기타 설정 및 보안


1. 시간 동기화

서버에서 시간 동기화는 필수입니다.

특히 여러 서버를 운영할 경우 서로 잘못된 시간정보로 생각지도 못한 상황이 발생될 수 있습니다.

# rdate -s time.bora.net && date && clock -r && clock -w > /dev/null 2>&1

시간 동기화의 경우 한번 맞추었다고 해도 서버에 따라 시간이 지남에 따라 0.01초 심시어는 1-2초이상 차이가 날수 있기 때문에 cron에 등록하여 매일 같이 맞추는 방법이 좋습니다.


# cd /etc/cron.daily

# vi sync_time.sh


#!/bin/bash

rdate -s zero.bora.net && date && clock -r && clock -w > /dev/null 2>&1


# chmod 700 sync_time.sh

/etc/cron.daily 에 쉘스크립트를 등록하면 매일 한번씩 자동으로 실행되어 매일 한번씩 시간 동기화가 가능해집니다.


하지만 6.9에서는 신기하게 크론탭 설정이 비어있습니다. 이를 수정하도록 합니다.

# echo "01 * * * * root run-parts /etc/cron.hourly" >> /etc/crontab && \

echo "02 4 * * * root run-parts /etc/cron.daily" >> /etc/crontab && \

echo "22 4 * * 0 root run-parts /etc/cron.weekly" >> /etc/crontab && \

echo "42 4 1 * * root run-parts /etc/cron.monthly" >> /etc/crontab


# cat /etc/crontab

설정 파일이 잘 입력되었는지 확인합니다.

위설정으로 /etc/cron.daily에 있는 스크립트 파일은 매일 새벽 4시 2분에 자동으로 실행됩니다.



2. 기본 라이브러리 추가

32비트인 경우

# echo "/lib" >> /etc/ld.so.conf && \

echo "/usr/lib" >> /etc/ld.so.conf && \

echo "/usr/local/lib" >> /etc/ld.so.conf


64비트인 경우

# echo "/lib" >> /etc/ld.so.conf && \

echo "/lib64" >> /etc/ld.so.conf && \

echo "/usr/lib" >> /etc/ld.so.conf && \

echo "/usr/lib64" >> /etc/ld.so.conf && \

echo "/usr/local/lib" >> /etc/ld.so.conf && \

echo "/usr/local/lib64" >> /etc/ld.so.conf



3. selinux 사용 중지

# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux 2> /dev/null && \

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 2> /dev/null

보다 강력한 보안을 사용하고 싶으시면 selinux를 사용하셔도 되지만

심볼릭링크나 httpd등에서 예기치 않은 권한 에러가 나올 가능성이 크기 때문에

아에 설정을 죽이고 사용하는 편이 많습니다.



4. 시스템 언어 설정 (UTF-8)

# cp -arp /etc/sysconfig/i18n /etc/sysconfig/i18n.original && sed -i 's/^/#/g' /etc/sysconfig/i18n

# echo >> /etc/sysconfig/i18n

echo "LANG=\"ko_KR.UTF-8\"

SUPPORTED=\"en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko\"

SYSFONT=\"latarcyrheb-sun16\"

" >> /etc/sysconfig/i18n

기본적으로 UTF-8로 설정하는 것이 다국어 언어 편집에도 좋고 유연성이 강합니다.



5. SSH 보안

다이렉트으로 ssh root 접근은 관리는 편할지 몰라도 보안상 심각한 위험을 줄수 있습니다.

일반 계정으로 ssh로 로긴 후 su를 통해 root권한을 획득하는 방식으로 변경합니다.

또한 SSH 포트를 변경하여 알려진 22번 포트를 사용하지 않습니다.


ex) ssh포트를 12345로 변경 및 game 계정만 ssh 접근이 가능 및 root su 권한이 가능하도록 설정

# useradd -g 100 -G wheel game

# passwd game

# chown root.wheel /bin/su

# chmod 4750 /bin/su

# vi /etc/ssh/sshd_config

...

...


AllowUsers game

Port 12345

...

...

PermitRootLogin no

...

...


# /etc/init.d/sshd restart


6. 방화벽 설정(iptables)

ip_conntrack_ftp 모듈이 부팅시 올라갔느니 확인 없으면 추가 (ftp를 사용안해도 혹시 모르니)

# vi /etc/rc.d/rc.local

...

modprobe ip_conntrack_ftp


iptables 초기 설정

# echo "# Firewall configuration written by system-config-securitylevel

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT

-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 12345 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT" > /etc/sysconfig/iptables


service iptables restart


# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

RH-Firewall-1-INPUT  all  --  anywhere             anywhere            


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

RH-Firewall-1-INPUT  all  --  anywhere             anywhere            


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         


Chain RH-Firewall-1-INPUT (2 references)

target     prot opt source               destination         

ACCEPT     all  --  anywhere             anywhere            

ACCEPT     icmp --  anywhere             anywhere            icmp any 

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:pop3 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:imap 

ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:domain 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:domain 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:mysql 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:12345

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:smtp 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

5번에서 ssh를 12345로 바꾸어서 설정

기타 다른 포트는 추후 APM서버등을 위해 미리 오픈



7. alias 추가 및 콘솔 색상 설정

# sed -i "/alias rm='rm -i'/i alias ln='ln -v'" /root/.bashrc && \

sed -i "/alias rm='rm -i'/i alias chgrp='chgrp -v'" /root/.bashrc  && \

sed -i "/alias rm='rm -i'/i alias chmod='chmod -v'" /root/.bashrc  && \

sed -i "/alias rm='rm -i'/i alias chown='chown -v'" /root/.bashrc  && \

sed -i "s/alias rm='rm -i'/alias rm='rm -iv'/g" /root/.bashrc  && \

sed -i "s/alias cp='cp -i'/alias cp='cp -iv'/g" /root/.bashrc  && \

sed -i "s/alias mv='mv -i'/alias mv='mv -iv'/g" /root/.bashrc


# echo "alias grep='grep --color=auto'" >> /etc/bashrc

# echo "alias ll='ls -alF --color=tty'" >> /etc/bashrc

자주 쓰는 명령어를 조금 더 편하게 수정했습니다.



8. vi 설정

echo "set ts=4" >> /root/.vimrc && \

echo "set encoding=utf-8" >> /root/.vimrc


echo "alias vi='vim'" >> /etc/bashrc



9. TOP 화면 변경 (CPU별 사용량 및 색상 변경)

# echo "RCfile for \"top with windows\"       # shameless braggin'

Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=3.000, Curwin=0

Def fieldscur=AEHIOQTWKLNMbcdfgjrpsuvyzX

winflags=97144, sortindx=10, maxtasks=0

summclr=3, msgsclr=1, headclr=3, taskclr=2

Job fieldscur=ABcefgjlrstuvyzMKNHIWOPQDX

winflags=62777, sortindx=0, maxtasks=0

summclr=6, msgsclr=6, headclr=7, taskclr=6

Mem fieldscur=ANOPQRSTUVbcdefgjlmyzWHIKX

winflags=62777, sortindx=13, maxtasks=0

summclr=5, msgsclr=5, headclr=4, taskclr=5

Usr fieldscur=ABDECGfhijlopqrstuvyzMKNWX

winflags=62777, sortindx=4, maxtasks=0

summclr=3, msgsclr=3, headclr=2, taskclr=3

" > /root/.toprc

기본적인 top을 조금 더 보기 편하게 보강했습니다.



10. 히스토리에 시간 표시

# sed -i "/HISTSIZE=/a HISTTIMEFORMAT=\"%Y-%m-%d_%H:%M:%S [CMD]: \"" /etc/profile && \

sed -i "/export/a export HISTTIMEFORMAT" /etc/profile

언제 어떤 명령어를 사용했는지 시간을 넣어 보기 좋게 합니다.



11. 센드메일 기본 보안 설정

# sed -i "s/dnl TRUST_AUTH_MECH(\`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN\ PLAIN')dnl/TRUST_AUTH_MECH(\`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl/g" /etc/mail/sendmail.mc


# sed -i "s/dnl define(\`confAUTH_MECHANISMS', \`EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl/define(\`confAUTH_MECHANISMS', \`EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl/g" /etc/mail/sendmail.mc


# sed -i "s/smtp,Addr=127.0.0.1, Name=MTA/smtp,Addr=0.0.0.0, Name=MTA/g" /etc/mail/sendmail.mc

기본적인 센드메일 보안 설정을 구성합니다.



12.파일시스템 보완 및 임시폴더 권한 설정

# cp -arp /etc/fstab /etc/fstab.default


# sed -i "s/\/dev\/shm tmpfs defaults 0 0/\/dev\/shm tmpfs defaults,noexec,nosuid 0 0/g" /etc/fstab


# sed -i "s/\/tmp ext3 defaults 1 2/\/tmp ext3 defaults,noatime,nodev,noexec,nosuid 1 2/g" /etc/fstab


# chmod 755 /var/tmp




13. root라는 것을 쉽게 알기 쉽게 콘솔 색상 변경

vi /root/.bashrc

...

...

PS1="\[$(tput setaf 3)\]$PS1\[$(tput sgr0)\]"

PS1="\[$(tput bold)\]$PS1\[$(tput sgr0)\]"

파일 저장 후 로그아웃 후 재로그인을 하게 되면 아래와 같이 색상이 표시되어 root로 로긴된 상태를 더 쉽게 파악 가능합니다.

[root@testserver ~]# 

[root@testserver ~]# 



모든 설정이 끝나면 재부팅하여 모든 설정이 맞게 들어갔는지 확인해봅니다.




반응형

'Server' 카테고리의 다른 글

APM설치-Apache (CentOS 6.9)  (0) 2017.06.02
robots.txt를 쉽게 만드는 법  (0) 2017.06.01
APM설치-MySQL (CentOS 6.9)  (0) 2017.06.01
logwatch 설치 - 시스템 로그  (0) 2017.05.31
실전 서버 설치 CentOS 6.9  (0) 2017.05.31