우분투 서버를 보호하기 위해 무엇을 할 수 있습니까?


35

가능한 한 Ubuntu Server를 보호하는 프로젝트가 있습니다. 서버는 웹 호스팅 서버입니다. 서버는 LAMP, Mail 및 DNS를 실행합니다.


어떤 서비스가 실행됩니까?
wojox 2016 년

램프, 메일, DNS
One Zero

우분투 서버 치트 시트를 만들었으며 귀하와 공유하고 싶습니다. 처음 몇 페이지는 일반적인 리눅스 명령이고, 특정 서버 패키지이고 마지막 페이지는 서버 보안 점검 목록입니다. 체크리스트는 많은 웹 사이트의 팁과 강화 기능을 통합합니다. 도움이 되길 바랍니다. WTFPL 라이센스에 따라 라이센스가 부여되었습니다. 여기에서 체크리스트를 보거나 다운로드하거나 확인할있습니다 . 수시로 업데이트합니다.
노아 크라이 저

답변:


43

다음은 서버를 보호하기 위해 수행하는 작업 목록입니다.

  1. UFW ( sudo ufw enable)를 켜고 실제로 사용되는 포트만 허용하십시오. ( sudo ufw allow 80)
  2. MySQL이 로컬 호스트에서의 연결 만 허용하는지 확인하십시오.
  3. 메일 서비스에서 TLS를 활성화하십시오. 자체 서명 인증서 인 경우에도 마찬가지입니다. 비밀번호를 비밀번호로 보내지 않으려 고합니다.
  4. denyhosts 또는 fail2ban과 같은 ssh bruteforce 차단기를 설치하십시오. ( sudo apt-get install denyhosts)
  5. ssh 키 기반 로그인 만 작성하십시오.
  6. AppArmor를 배우십시오. 상당히 바닐라 구성을 사용하면 매우 쉽습니다. 전원이 켜져 있는지 확인하십시오. 제로 데이 악용을 줄이는 데 도움이됩니다.
  7. 서버에 대한 물리적 액세스에 따라 하드 디스크의 데이터 암호화를보고 싶을 수도 있습니다.
  8. 이 링크의 다른 권장 사항을 따르십시오. 편집 : 링크를 추가 할만 큼 평판이 충분하지 않은 경우 이것을 편집하는 것을 잊었습니다. 여기서 의미하는 링크는 아래의 마지막 링크입니다.
  9. 사용자를 신뢰하지 마십시오. 시스템에 액세스 할 수있는 여러 사용자가있는 경우이를 잠그십시오. sudo 액세스 권한을 부여해야하는 경우 필요한 항목 만 제공하십시오.
  10. 상식을 사용하십시오. 당신이 잠겨 있다면 어떻게 들어올 지에 대해 열심히 생각하십시오. 그런 다음 그 구멍을 닫으십시오.

고려해야 할 몇 가지 사항이 더 있습니다. 대부분의 사람들은 신체적 접근을 잊습니다. 전 세계의 모든 소프트웨어 구성이 실제로 LiveCD를 사용하여 데이터를 훔칠 수 있다면 아무 의미가 없습니다. 사회 공학을 조심하십시오. 전화중인 사람을 확인하고 요청을 할 수있는 권한이 있는지 질문하십시오.

여전히 '새로운'사용자이므로 2 개 이상의 링크를 게시 할 수 없습니다. 이 주제에 대한 자세한 내용은 https://help.ubuntu.com/12.04/serverguide/index.html을 참조 하고 https://help.ubuntu.com/12.04/serverguide/security.html에 특히주의 하십시오.


2
UFW를 사용하는 대안 (우분투의 기본 제공 방화벽을 계속 사용하는 중)은 매우 특이한 iptables규칙으로 시스템을 잠 가서 사용하지 않을 서비스에 대한 외부 액세스를 허용하지 않는 경우입니다. 고급 루팅과 재료가 필요한 볼 셋업.
토마스 워드

2
@LordofTime에 동의합니다. 실제로 iptables를 직접 사용하지만 ufw는 대부분의 기본 설치에 적합합니다. 또한 UFW는 가장 일반적인 iptables 구성을위한 래퍼입니다. 기본 시스템은 여전히 ​​동일합니다.
Patrick Regan

2
ufw의 경우 +1, 당신은 새로운 사용자가 아니며, 1 년 동안의 멤버입니다 : p
Tachyons

1
실제로, 나는 특정한 경우에 iptables가 특정 경우에 ufw보다 더 나은 유용성을 가질 것이라고 지적하고 싶었다
Thomas Ward

1
고려 BastilleLinux를 그것도 좋은 보안 강화 스위트입니다.
pl1nk 2016 년

13

안전한 공유 메모리

/ dev / shm은 httpd와 같은 실행중인 서비스에 대한 공격에 사용될 수 있습니다. 보다 안전하게하려면 / etc / fstab을 수정하십시오.

터미널 창을 열고 다음을 입력하십시오.

sudo vi /etc/fstab

다음 줄을 추가하고 저장하십시오. 이 설정을 적용하려면 재부팅해야합니다.

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

sysctl 설정으로 네트워크 강화

/etc/sysctl.conf 파일에는 모든 sysctl 설정이 포함되어 있습니다. 들어오는 패킷의 소스 라우팅을 방지하고 잘못된 IP를 기록하면 터미널 창에 다음을 입력하십시오.

sudo vi /etc/sysctl.conf

/etc/sysctl.conf 파일을 편집하고 주석을 제거하거나 다음 줄을 추가하십시오.

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

최신 변경 사항으로 sysctl을 다시로드하려면 다음을 입력하십시오.

sudo sysctl -p

IP 스푸핑 방지

터미널을 열고 다음을 입력하십시오.

sudo vi /etc/host.conf

다음 줄을 추가하거나 편집하십시오.

order bind,hosts
nospoof on

보안을 위해 PHP 강화

php.ini 파일을 편집하십시오 :

sudo vi /etc/php5/apache2/php.ini

다음 줄을 추가하거나 편집하십시오.

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

웹 애플리케이션 방화벽-ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

DDOS (서비스 거부) 공격으로부터 보호-ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

로그 검사 및 의심스러운 호스트 금지-DenyHosts 및 Fail2Ban

@DenyHosts

DenyHosts는 /etc/hosts.deny에 항목을 추가하여 SSH 공격을 자동으로 차단하는 Python 프로그램입니다. DenyHosts는 또한 Linux 관리자에게 문제가있는 호스트, 공격받은 사용자 및 의심스러운 로그인에 대해 알려줍니다.

터미널을 열고 다음을 입력하십시오.

sudo apt-get install denyhosts

설치 후 구성 파일 /etc/denyhosts.conf를 편집하고 이메일 및 필요에 따라 기타 설정을 변경하십시오.

관리자 이메일 설정을 편집하려면 터미널 창을 열고 다음을 입력하십시오.

sudo vi /etc/denyhosts.conf

서버에서 필요에 따라 다음 값을 변경하십시오.

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban은 SSH, Apache, Courier, FTP 등을 포함한 다른 서비스로 로그 모니터링을 확장하므로 DenyHosts보다 고급입니다.

Fail2ban은 로그 파일을 검사하고 악의적 인 징후 (너무 많은 암호 오류, 악용 시도 등)를 나타내는 IP를 차단합니다.

그런 다음 Fail2Ban은 방화벽 규칙을 업데이트하여 지정된 시간 동안 IP 주소를 거부했지만 임의의 다른 작업도 구성 할 수있었습니다. 기본적으로 Fail2Ban에는 다양한 서비스 (아파치, 택배, ftp, ssh 등)에 대한 필터가 제공됩니다.

터미널을 열고 다음을 입력하십시오.

sudo apt-get install fail2ban

설치 후 구성 파일 /etc/fail2ban/jail.local을 편집하고 필요에 따라 필터 규칙을 작성하십시오.

설정을 편집하려면 터미널 창을 열고 다음을 입력하십시오.

sudo vi /etc/fail2ban/jail.conf

모든 사용자가 변경하여 모니터에 fail2ban하고 싶은 서비스를 활성화 활성화 = 거짓 *이 = 사실 활성화 *

예를 들어 SSH 모니터링 및 금지 감옥을 활성화하려면 아래 행을 찾아 enabled를 false에서 true로 변경하십시오 . 그게 다야.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

호스트가 금지 된 경우 Fail2Ban으로부터 이메일 을 수신 하려면 다음 행을 이메일 주소로 변경하십시오.

destemail = root@localhost

다음 행을 다음에서 변경하십시오.

action = %(action_)s

에:

action = %(action_mwl)s

또한 fail2ban이 기본적으로 제공되지 않은 것을 모니터하기 위해 원하는 다양한 서비스에 대한 규칙 필터작성할 수도 있습니다 .

sudo vi /etc/fail2ban/jail.local

다양한 필터를 만드는 방법과 구성에 fail2ban에 좋은 지침에서 찾을 수 있습니다 HowtoForge - 예를 보려면 여기를 클릭

Fail2Ban 구성을 완료하면 다음을 사용하여 서비스를 다시 시작하십시오.

sudo /etc/init.d/fail2ban restart

상태를 확인할 수도 있습니다.

sudo fail2ban-client status

루트킷 확인-RKHunter 및 CHKRootKit.

RKHunterCHKRootkit은 기본적으로 같은 일을 - 루트킷은 시스템을 확인합니다. 둘 다 사용하면 아무런 해가 없습니다.

터미널을 열고 다음을 입력하십시오.

sudo apt-get install rkhunter chkrootkit

chkrootkit을 실행하려면 터미널 창을 열고 다음을 입력하십시오.

sudo chkrootkit

RKHunter를 업데이트하고 실행합니다. 터미널을 열고 다음을 입력하십시오

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

열린 포트 스캔-Nmap

Nmap ( "Network Mapper")은 네트워크 검색 및 보안 감사를위한 무료 오픈 소스 유틸리티입니다.

터미널을 열고 다음을 입력하십시오.

sudo apt-get install nmap

다음을 사용하여 시스템에서 열린 포트를 스캔하십시오.

nmap -v -sT localhost

다음과 같은 SYN 스캔 :

sudo nmap -v -sS localhost

시스템 LOG 파일 분석-LogWatch

Logwatch는 사용자 정의 가능한 로그 분석 시스템입니다. Logwatch는 시스템의 로그를 구문 분석하고 지정한 영역을 분석하는 보고서를 만듭니다. Logwatch는 사용하기 쉽고 대부분의 시스템에서 패키지에서 바로 작동합니다.

터미널을 열고 다음을 입력하십시오.

sudo apt-get install logwatch libdate-manip-perl

logwatch 출력을 보려면 less를 사용하십시오.

sudo logwatch | less

지난 7 일간의 로그 워치 보고서를 이메일 주소로 이메일로 보내려면 다음을 입력하고 mail@domain.com을 필수 이메일로 바꿉니다. :

sudo logwatch --mailto mail@domain.com --output mail --format html --range 'between -7 days and today' 

시스템 보안 감사-Tiger.

Tiger는 보안 감사 및 침입 탐지 시스템으로 사용할 수있는 보안 도구입니다.

터미널을 열고 다음을 입력하십시오.

sudo apt-get install tiger

타이거를 실행하려면 다음을 입력하십시오.

sudo tiger

모든 Tiger 출력은 / var / log / tiger에서 찾을 수 있습니다

Tiger 보안 보고서를 보려면 터미널을 열고 다음을 입력하십시오.

sudo less /var/log/tiger/security.report.*

추가 도움이 필요하면


PHP : magic_quotes_gpc = On. 매직 인용구는 더 이상 사용되지 않으며 제거되었습니다. php.net/manual/en/security.magicquotes.whynot.php
Tim

13

당신이 이것이 웹 호스팅 서버 라고 말했기 때문에 ... 나는 웹 호스팅 라인에서 5 년 동안 의 모범 사례와 경험을 공유하고 싶습니다 .

  1. 저의 과거 경험에서, 바로 구성 환경으로 들어가기보다는 주어진 기사에 표시된 것처럼 낮은 보안 고리를 조립해야합니다.

  2. LAMP가 있으므로 PHP 와 php.ini 설정에 매우 신중해야합니다 . 이것은 PHP 보안을위한 좋은 링크 입니다. PHP는 제대로 설정하지 않으면 보안 루프가 될 수있는 강력한 기능을 가지고 있습니다.

  3. 크론 작업 을 사용하여 사용자의 허락없이 파일이 수정되고 해킹되었을 때 확인할 수 있습니다. 이 크론 작업을 사용 합니다 . cron 결과를 비교하기 위해 Notepad ++ 를 선호 합니다 (웹 서버에서 cron 전자 메일을 직접 다운로드하고 메모장 ++에서 열림).

  4. 일부 SEM을 설치하려면 cPanel을 사용하는 것이 가장 좋습니다 (그러나 유료). Webminzpanel 은 매우 좋은 무료 대안입니다. Webmin은 자체 서명 인증서를 사용하고 보안을 추가하는 것이 좋습니다.

  5. 즉시 작동하는 것을 원한다면 Turnkey Linux 로 갈 수 있습니다 . Ubuntu를 기반으로하며 구현이 매우 쉽고 필요에 유연합니다. 약간의 노력만으로도 보안을 즉시 얻을 수 있습니다. 이것은 그들의 램프 스택 입니다. 나는 개인적으로 이것을 사용하고 선호합니다.

  6. 처음부터 시작하는 경우 ISPconfig3을 설치할 수도 있습니다. 여기에 지시 .

  7. Back-Track-Linux를 사용 하여 보안을 침투하여 보안을 테스트 할 수 있습니다 .

  8. 길고 임의의 복잡한 암호를 유지하십시오 . PC에 보관하지 마십시오 . 를 적어. 라이브 CD를 사용하여이 로그인에 액세스하십시오.

  9. 받으려는 브 루트 포스 보호 fail2ban 같은 소프트웨어를.

  10. 필요하지 않은 데몬을 실행하지 마십시오.

  11. 불필요한 포트를 모두 차단하십시오 . SSH 포트 (22)에 매우주의하십시오.

  12. 서버를 관리 할 시스템에서 고정 IP를 사용하십시오. IP를 대부분 차단하고 특정 IP 만 포트 22와 같은 구성 위치 에 액세스하도록 허용하십시오 .

하루가 끝나면 ... 마음을 다해 작업 하고, 설치에 감정가지지 말고 상식을 적용하면 훨씬 더 멀리 갈 수 있습니다.

**My heartiest best wishes to you. good luck.**

1
사용자 입력을 신뢰할 때 PHP는 위험 할 수도 있습니다 (예 : SQL 삽입).
NoBugs 2018 년

@NoBugs 나는이 점에 전적으로 동의한다. 하나의 대답으로 모든 것을 압축하는 것은 불가능합니다. 내 답변에는 많은 하이퍼 링크가 포함되어 있으므로 해당 페이지를 포함하는 웹 사이트가 매우 유용합니다. 내 답변과 포함 된 링크가 커뮤니티를 도울 수 있기를 바랍니다. :)
Bhavesh Diwan

2
# 9 : 아니오, ramdom passowrds는 나쁩니다. 열쇠의 길이 는 그렇습니다 . "D0g는 ....................." "PrXyc.N (n4k77 # L! eVdAfp9"보다 더 강하다.에서 설명 explainxkcd.com/2011/08/10 / password-strength
papukaija

2
@papukaija 나는 당신에게 구글을 제안 brute force attacks하고 dictionary attacks.. 임의의 긴 암호는 이러한 공격으로부터 자신을 보호하는 유일한 방법입니다.
Bhavesh Diwan 2016 년

6

Bastille Linux 프로젝트를 활용하십시오.

전체 보안을 강화하고 Ubuntu 시스템에 대한 타협의 가능성을 줄이기 위해 추가 보안 강화 조치를 수행하는 대화식 도구를 제공합니다 ( Bastille Linux에서 ).

평가 및보고 기능을 제공하므로 시스템의 어떤 부분이 잠겨 있지 않은지 알 수 있습니다. 시스템을 읽기 전용 방식으로 검사하여 각 강화 항목의 상태를보고합니다. 예를 들어 Bastille은 DNS 서버가 chroot prison에 잠겨 있는지, telnet이 꺼져 있는지 또는 암호의 길이가 좋은지 여부를 확인할 수 있습니다. 이 링크를 통해 웹 전용 데모를 살펴볼 수 있습니다 (추가 정보 ).

여기서 웹 (전용) 데모를 미리 볼 수 있습니다 .

BastillleLinux


1
나는 그 추천을 두 번째로 할 수 있습니다. 노출 된 호스트 (예 : 웹 서버)를 실행하기 위해 bastille은 시스템 보안을 위해 먼 길을갑니다.
플로이드

이것은 CentOS / Redhat에서 찾은 SELinux 시스템과 비슷하지만 SELinux가 더 현대적이라고 확신합니다.
djangofan 2016 년

3

nmap머신의 모든 인터페이스에서 사용 하므로 머신에서 어떤 서비스를 실행하는지 알 수 있습니다. 이것은 보안을위한 필수 도구입니다.

외부 인터페이스에 필요하지 않은 모든 서비스를 제거하십시오. localhost와 같은 특정 인터페이스에서만 수신하도록 MySQL을 구성 할 수 있습니다.

동일한 시스템에서 분당 너무 많은 (실패한) 연결을 허용하지 않도록 ufw를 사용하여 SSH 서비스 (및 가능한 기타)를 보호하십시오. 그렇게하면 무차별 대입 공격이 더 어려워집니다. 포트 번호를 변경하는 것은 유용하지 않으며 단지 모호하며 보안이 없습니다.

컴퓨터의 계정 수를 제한하십시오. 또한 실제로 사용하는 것보다 많은 패키지 / 프로그램을 설치하지 마십시오. X11 서버가 아닌 X11 클라이언트 만 설치하십시오.

비밀번호 없이 디지털 인증서로 시스템에 ssh-login 만 허용하십시오 . 그것은 또한 무차별 대입 공격을 어렵게 / 불가능하게 만듭니다.



0

보안은 항상 가격과 함께 제공됩니다. 현실적인 경계를 설정하면 목표를 달성하는 데 도움이됩니다. 다음과 같은 측면을 고려할 것입니다.

  • 당신은 무엇을 보호하고 있습니까 (어떤 종류의 악당, 그의 예산은 얼마입니까)?
  • 공격 벡터는 무엇입니까?

여기에 게시 된 모든 링크를 확인하면이 링크를 추가해야한다고 생각합니다. 소프트웨어 설정 방법뿐만 아니라 보안 계획에 대해서도 생각합니다. 또한 실행하는 모든 명령에 소스가 설명되어 있습니다.

Xenial 16.04에서 Ubuntu 웹 서버 보안


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.