如何保护Ubuntu服务器安全?


35

我有一个项目可以尽我所能保护Ubuntu Server。该服务器是网络托管服务器。该服务器将运行LAMP,Mail和DNS。


哪些服务将运行?
wojox 2012年

LAMP,邮件,DNS
一零零

我已经制作了一个Ubuntu Server备忘单,我想与您分享。前几页是一般的linux命令,然后是特定的服务器软件包,最后一页是服务器安全检查表。该清单将来自许多网站的提示和强化功能结合在一起。希望对您有帮助!根据WTFPL许可获得许可。您可以在此处查看/下载/任何清单。我会不时更新。
诺亚·克拉瑟

Answers:


43

这是我为保护服务器安全而要做的事情的列表。

  1. 打开UFW(sudo ufw enable),然后仅允许实际使用的端口。(sudo ufw allow 80
  2. 确保MySQL仅允许来自本地主机的连接。
  3. 在邮件服务上启用TLS。即使是自签名证书。您不希望明文发送密码。
  4. 安装ssh bruteforce阻止程序,例如denyhosts或fail2ban。(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(在Ubuntu中仍使用内置的开箱即用防火墙)的另一种方法是,使用极其特定的iptables规则锁定系统,以禁止外部访问您将不使用的任何服务(如果您使用的是奇怪的-球设置需要高级布线和填充物。
托马斯·沃德

2
@LordofTime同意。我实际上是自己使用iptables的,但是ufw对于大多数基本安装来说都很好。无论如何,UFW或多或少只是大多数常见iptables配置的包装。底层系统仍然相同。
Patrick Regan 2012年

2
ufw +1,您不是新用户,您是1年会员:p
Tachyons 2012年

1
确实,我只是想指出,在某些情况下,iptables在某些情况下会比ufw具有更好的可用性
Thomas Ward

1
考虑到BastilleLinux,它也是一个很好的安全强化套件。
pl1nk 2012年

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

Web应用程序防火墙-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是一个python程序,它通过向/etc/hosts.deny中添加条目来自动阻止SSH攻击。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比DenyHosts更先进,因为它将日志监视扩展到其他服务,包括SSH,Apache,Courier,FTP等。

Fail2ban扫描日志文件并禁止显示恶意标志的IP-过多的密码失败,寻找漏洞等。

然后,通常也可以使用Fail2Ban更新防火墙规则以在指定的时间内拒绝IP地址,尽管也可以配置任何其他其他操作。开箱即用Fail2Ban带有针对各种服务(apache,courier,ftp,ssh等)的过滤器。

打开一个终端并输入以下内容:

sudo apt-get install fail2ban

安装后,编辑配置文件/etc/fail2ban/jail.local 并根据需要创建过滤器规则。

要编辑设置,请打开终端窗口并输入:

sudo vi /etc/fail2ban/jail.conf

激活所有的服务,你想的fail2ban来监视改变启用= false以 * 启用=真 *

例如,如果您想启用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

可以在HowtoForge上找到有关如何配置fail2ban和创建各种过滤器的良好说明- 单击此处获取示例

完成Fail2Ban的配置后,请使用以下命令重新启动服务:

sudo /etc/init.d/fail2ban restart

您也可以使用来检查状态。

sudo fail2ban-client status

检查rootkit-RKHunter和CHKRootKit。

无论RKHunterchkrootkit的基本上做同样的事情-检查你的系统的rootkit。两者都没有害处。

打开一个终端并输入以下内容:

sudo apt-get install rkhunter chkrootkit

要运行chkrootkit,请打开一个终端窗口,然后输入:

sudo chkrootkit

更新并运行RKHunter。打开终端并输入以下内容

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

扫描开放端口-Nmap

Nmap(“网络映射器”)是一个免费的开源实用程序,用于网络发现和安全审核。

打开一个终端并输入以下内容:

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输出,请减少使用:

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中找到

要查看老虎安全报告,请打开一个终端并输入以下内容:

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

寻求更多帮助


PHP :magic_quotes_gpc = On。魔术引号已被首先弃用,然后删除:php.net/manual/en/security.magicquotes.whynot.php
蒂姆

13

既然您说这是Web托管服务器 ...我想分享我在Web托管方面5年的最佳实践和经验。

  1. 根据我过去的经验,您应该立即按照给定文章中指示的方法组装安全性低下的葡萄,而不是立即陷入困境。

  2. 由于您使用的是LAMP,因此您必须非常谨慎地使用PHP及其php.ini设置。这是确保PHP安全的好链接。PHP具有超能力,如果配置不当,可能会变成安全循环。

  3. 您可以使用cron作业来检查文件的修改时间,未经您的许可并且可能被黑客入侵;使用这个cron工作。我更喜欢Notepad ++比较cron结果(直接从Web服务器下载cron电子邮件并在Notepad ++中打开)。

  4. 如果您要安装一些SEM,则最好选择cPanel(但需付费)。Webminzpanel是非常好的免费替代品。Webmin更好,因为它至少使用自签名证书并增加了安全性。

  5. 如果您想开箱即用,则可以使用Turnkey Linux。它基于Ubuntu,非常易于实现并且可以灵活满足您的需求。只需付出很少的努力,即可立即获得安全性。这是他们的LAMP堆栈我个人使用并且仅喜欢此。

  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
当信任用户输入(例如sql注入)时,PHP也可能很危险。
NoBugs 2012年

@NoBugs我完全同意这一点。一个单一的答案不可能压缩所有内容。我的答案包含许多超链接,因此包含这些页面的这些网站确实非常有用。希望我的回答和包含的链接对社区有所帮助:)
Bhavesh Diwan 2012年

2
#9:不,随机密码不好,关键在于长度,即。“D0G .....................”比“PrXyc.N(n4k77#1!eVdAfp9”更强。在解释explainxkcd.com/2011/08/10 / password-strength
papukaija 2012年

2
@papukaija我建议您使用google brute force attacksdictionary attacks..随机的长密码是保护自己免受此类攻击的唯一方法。
Bhavesh Diwan 2012年

6

利用Bastille Linux项目。

它提供了一个交互式工具来执行其他安全性增强措施,以提高整体安全性,并降低Ubuntu系统(来自Bastille Linux)受到损害的可能性。

它提供了评估和报告功能,因此可以告诉您系统的哪些部分未被锁定。它以只读方式检查系统,报告其每个强化项目的状态。例如,巴士底狱(Bastille)可能会检查DNS服务器是否锁定在chroot监狱中,是否关闭了telnet或是否要求密码长度足够长。您可以通过此链接查看有关此内容的仅Web演示(更多信息)。

您可以在此处预览Web(仅)演示。

BastillleLinux


1
我可以支持该建议。对于运行暴露的主机(例如Web服务器),bastille在确保系统安全方面大有帮助。
弗洛伊德2012年

这看起来与您在CentOS / Redhat上找到的SELinux系统相似,但是我敢肯定SELinux是更现代的。
djangofan 2012年

3

使用nmap在机器上的所有接口,所以你知道你的机器上运行什么服务。这是确保安全的重要工具。

删除外部接口上不需要的所有服务。您可以将MySQL配置为仅侦听特定的接口,例如localhost。

使用ufw保护您的SSH服务(及其他可能的服务),以便每分钟不允许来自同一台计算机的太多(失败)连接。这将使暴力攻击更加困难。更改端口号不是那么有用,只是默默无闻,没有安全性。

限制计算机上的帐户数量。另外,安装的软件包/程序不要超过实际使用的数量。仅安装X11客户端,而不安装X11服务器。

仅允许使用数字证书(密码)通过ssh登录到计算机。这也将使暴力攻击变得困难/不可能。



0

安全总是要付出代价的。设定一些现实的界限将帮助您达成目标。我将考虑以下方面:

  • 反对保护自己(什么类型的小人,他的预算是多少)?
  • 您的攻击媒介是什么?

检查这里发布的所有链接,我认为应该添加此链接。它不仅详细介绍了如何设置软件,还考虑了安全计划。另外,每条要执行的命令都带有源代码进行了说明。

在Xenial 16.04上保护Ubuntu Web服务器的安全


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.