很少见有人马上为一台新安装的服务器做安全措施,然而我们生活所在的这个社会使得这件事情是必要的。不过为什么仍旧这么多人把它拖在最后?我也做过相同的事,这通常可以归结为我们想要马上去折腾那些有趣的东西。希望这篇文章将向大家展示,确保服务器安全没有你想得那样难。在攻击开始后,俯瞰你的“堡垒”,也相当享受。
这篇文章为 Ubuntu 12.04.2 LTS 而写,你也可以在任何其他 Linux 分发版上做相同的事情。
我从哪儿开始?
如果服务器已经有了一个公有IP,你会希望立即锁定 root 访问。事实上,你得锁定整个ssh访问,并确保只有你可以访问。增加一个新用户,把它加入admin组(在/etc/sudoers预配置以拥有sudo访问权限)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
$ sudo addgroup admin
Adding group 'admin' (GID 1001)
Done. $ sudo adduser spenserj
Adding user `spenserj' ... Adding new group `spenserj' (1002) ... Adding new user `spenserj ' (1001) with group `spenserj' ...
Creating home directory ` /home/spenserj ' ...
Copying files from ` /etc/skel ' ...
Enter new UNIX password: Retype new UNIX password: passwd : password updated successfully
Changing the user information for spenserj
Enter the new value, or press ENTER for the default
Full Name []: Spenser Jones
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y /n ] y
$ sudo usermod -a -G admin spenserj
|
你也将希望在你电脑上创建一个私有key,并且在服务器上禁用讨厌的密码验证。
1
2
|
$ mkdir ~/. ssh
$ echo "ssh-rsa [your public key]" > ~/. ssh /authorized_keys
|
/etc/ssh/sshd_config
1
2
3
4
|
PermitRootLogin no PermitEmptyPasswords no PasswordAuthentication no AllowUsers spenserj |
重新加载SSH,使用修改生效,之后尝试在一个新会话中登陆来确保所有事情正常工作。如果你不能登陆,你将仍然拥有你的原始会话来做修改。
1
2
3
|
$ sudo service ssh restart
ssh stop /waiting
ssh start /running , process 1599
|
更新服务器
既然你是访问服务器的唯一用户,你就不用担心黑客鬼鬼祟祟进入,再次正常呼吸。当有一些针对你服务器的更新时,正是修补的机会,所以动手吧,就现在。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
$ sudo apt-get update ... Hit http://ca.archive.ubuntu.com precise-updates/universe Translation-en_CA Hit http://ca.archive.ubuntu.com precise-updates/universe Translation-en Hit http://ca.archive.ubuntu.com precise-backports/main Translation-en Hit http://ca.archive.ubuntu.com precise-backports/multiverse Translation-en Hit http://ca.archive.ubuntu.com precise-backports/restricted Translation-en Hit http://ca.archive.ubuntu.com precise-backports/universe Translation-en Fetched 3,285 kB in 5s (573 kB/s) Reading package lists... Done $ sudo apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done The following packages have been kept back: linux-headers-generic-lts-quantal linux-image-generic-lts-quantal
The following packages will be upgraded: accountsservice apport apt apt-transport-https apt-utils aptitude bash ...
73 upgraded, 0 newly installed, 0 to remove and 2 not upgraded. Need to get 61.0 MB of archives. After this operation, 151 kB of additional disk space will be used. Do you want to continue [Y/n]? Y ... Setting up libisc83 (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up libdns81 (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up libisccc80 (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up libisccfg82 (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up libbind9-80 (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up liblwres80 (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up bind9-host (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up dnsutils (1:9.8.1.dfsg.P1-4ubuntu0.6) ... Setting up iptables (1.4.12-1ubuntu5) ... ... |
安装防火墙
安装现在正最流行的防火墙软件?好,行动吧。那就配置一个防火墙。之后你总是可以增加另一个异常,几分钟额外的工作并不会折腾死你。Iptables在Ubuntu里预装了,所以去设置一些规则吧。
1
|
$ sudo mkdir /etc/iptables
|
/etc/iptables/rules
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] # Accept any related or established connections -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow all traffic on the loopback interface -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT # Allow outbound DHCP request - Some hosts (Linode) automatically assign the primary IP #-A OUTPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT # Outbound DNS lookups -A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT # Outbound PING requests -A OUTPUT -p icmp -j ACCEPT # Outbound Network Time Protocol (NTP) request -A OUTPUT -p udp --dport 123 --sport 123 -j ACCEPT # SSH -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT # Outbound HTTP -A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT COMMIT |
通过 iptables-apply 命令为规则集生效。如果你丢失连接,修补你的规则,在继续之前再试一下
1
2
3
4
|
$ sudo iptables-apply /etc/iptables/rules
Applying new ruleset... done .
Can you establish NEW connections to the machine? (y /N ) y
... then my job is done . See you next time .
|
创建文件 /etc/network/if-pre-up.d/iptables,然后写入下面内容。当你启动服务器的时候,将自动载入你的iptables规则。
/etc/network/if-pre-up.d/iptables
1
2
|
#!/bin/sh iptables-restore < /etc/iptables/rules
|
现在给它执行权限,执行文件,以确保它正常载入
1
2
|
$ sudo chmod +x /etc/network/if-pre-up .d /iptables
$ sudo /etc/network/if-pre-up .d /iptables
|
用 Fail2ban 处理潜在黑客
当谈到安全的时,Fail2ban 是我最喜欢的工具之一,它将监控你的日志文件,并且可以临时禁止那些正在滥用你资源,或者正在强制肆虐你的SSH连接,或者正在dos攻击你web服务器的用户。
Install Fail2ban
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$ sudo apt-get install fail2ban
[ sudo ] password for sjones:
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: gamin libgamin0 python-central python-gamin python-support whois
Suggested packages: mailx
The following NEW packages will be installed: fail2ban gamin libgamin0 python-central python-gamin python-support whois
0 upgraded, 7 newly installed, 0 to remove and 2 not upgraded. Need to get 254 kB of archives. After this operation, 1,381 kB of additional disk space will be used. Do you want to continue [Y /n ]? y
... |
虽然 Fail2ban 安装一个默认配置(/etc/fail2ban/jail.conf),但我们希望在 /etc/fail2ban/jail.local 写配置,所以把它拷贝到那儿。
1
|
sudo cp /etc/fail2ban/jail .{conf, local }
|
配置
把 ignoreip 行修改为你的ip,并且可以设置禁止恶意用户的时间量(默认是10分钟)。你也将希望设置一个destemail,这里我通常输入我自已的email地址,再在后面加上 ,fail2ban@blocklist.de。BlockList.de 是一个跟踪并且自动报告黑客IP的系统。
/etc/fail2ban/jail.local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host ignoreip = 127.0.0.1 /8
bantime = 600 maxretry = 3 # "backend" specifies the backend used to get files modification. Available # options are "gamin", "polling" and "auto". # yoh: For some reason Debian shipped python-gamin didn't work as expected # This issue left ToDo, so polling is default backend for now backend = auto # # Destination email address used solely for the interpolations in # jail.{conf,local} configuration files. destemail = root@localhost,fail2ban@blocklist.de |
这有一些其他的你想检查的配置,尽管缺省配置已经相当不错了,所以,快速浏览这些,直到你读到Actions章节。
Actions
Actions 允许你对恶意行为作出反应,然而当我们想要它禁止和发邮件的时候,默认是禁用了 iptables。值得感谢的是,有一个预配置文件 action_wml,它恰恰是做这个的。
/etc/fail2ban/jail.local
1
2
3
4
|
# Choose default action. To change, just override value of 'action' with the # interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local # globally (section [DEFAULT]) or per specific section action = %(action_mwl)s |
Jails 监控
为了让Fail2ban工作,需要了解要监控哪些东西。这些已在Jails部分的配置文件,并且这有一些预载入而未启用的例子。既然到目前为止,你仅仅在服务器上启用了SSH访问,那我们就只启用SSH和SSH-DDos 监控,然而你还是会想给安装在这台服务器上的公共访问服务增加新的监控。
/etc/fail2ban/jail.local
1
2
3
4
5
6
7
8
9
10
11
12
|
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6 [ssh-ddos] enabled = true port = ssh filter = sshd-ddos logpath = /var/log/auth.log maxretry = 6 |
让变化生效
既然我们已经配置了Fail2ban,你将希望重新载入它,并且确保向iptables增加了合适的规则。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$ sudo service fail2ban restart
* Restarting authentication failure monitor fail2ban
... done .
$ sudo iptables -L
Chain INPUT (policy DROP) target prot opt source destination
fail2ban- ssh -ddos tcp -- anywhere anywhere multiport dports ssh
fail2ban- ssh tcp -- anywhere anywhere multiport dports ssh
... Chain fail2ban- ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere Chain fail2ban- ssh -ddos (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere |
在任何时间,你都可以使用sudo iptables -L 来列出你的规则,随后列出所有当前禁止的 IP。此时,Fail2ban正在处理两个恶意的用户。
Banned IPs
1
2
|
DROP all -- 204.50.33.22 anywhere DROP all -- 195.128.126.114 anywhere |
保持最新更新
你可能现在拥有一个已经锁定并且准备投入使用的服务器,然而这并不是你安全之旅的终点。保持最新更新(并且总是首先在非产品环境下测试),总是关闭你不需要的端口,定期检查你的日志,并且由内而外了解你的服务器。
相关推荐
2. **限制SSH访问**:SSH是远程管理Linux服务器的主要方式,但也容易成为攻击目标。可以通过限制特定IP地址、使用密钥对认证而非密码认证、禁用root用户直接通过SSH登录以及启用防火墙规则来限制不必要的SSH连接。 ...
### 25个Linux服务器安全小技巧详解 #### 一、引言 随着网络安全威胁的不断升级,确保服务器的安全成为了每个系统管理员的核心职责之一。Linux因其开源性、灵活性及丰富的配置选项,在服务器操作系统中占据了...
3. 稳定、安全、可靠的性能,Linux服务器采用了非常多的安全技术措施,如核心授权技术、审计跟踪技术、权限控制技术等。 4. 丰富的网络功能,在Linux服务器中,用户能够轻松的浏览各种网页,进行文件的传输等,同时...
总的来说,Linux服务器巡检是保证服务连续性、预防故障、提升系统性能和安全性的必要步骤。通过对硬件、软件、性能和安全的全面检查,运维人员可以及时发现并解决潜在问题,从而提高服务器的可靠性和效率。
加固Linux SSH保证服务器安全.pdf
Linux服务器巡检报告是针对Linux系统进行定期检查...综上所述,Linux服务器巡检是一个综合性的过程,涉及硬件状态、操作系统运行情况和系统性能等多个层面,通过定期巡检可以有效预防故障,保证服务器的高效稳定运行。
通过对以上各项的检查,可以全面评估Linux服务器的运行状况,及时发现并解决可能的问题,保证服务器的稳定性和安全性。在日常运维中,定期进行这样的巡检至关重要,能有效预防故障发生,提升服务器的整体性能。
《构建高可用Linux服务器》第四版是一本专为IT专业人士准备的指南,旨在帮助读者掌握如何在Linux环境中建立稳定、高效且高度可用的服务器系统。这本书涵盖了Linux运维的基础知识,特别是针对CentOS这一广泛使用的...
Linux 服务器在现代网络环境中扮演着至关重要的角色,保证其稳定、安全和高效运行对于任何组织都是至关重要的。 服务器基本信息 Linux 服务器巡检报告中,服务器基本信息包括服务器型号、处理器、内存、硬盘和...
### Linux服务器集群系统中的LVS集群体系架构解析 #### 一、引言 随着互联网的飞速发展,网络服务的需求量急剧增加,这对服务器的性能和可靠性提出了更高的要求。为了解决这一问题,Linux服务器集群系统应运而生,...
7. **安全与权限**:理解Unix权限模型,熟悉SELinux、AppArmor等强制访问控制机制,确保服务器安全稳定运行。 8. **日志与监控**:学习如何设置和解析系统日志,以及使用工具如syslog、Prometheus、Grafana进行性能...
### Linux服务器巡检手册知识点详解 #### 一、巡检目的 Linux服务器巡检是确保服务器稳定、高效运行的关键步骤之一。通过对服务器进行定期检查,可以及时发现并解决潜在问题,预防故障的发生,保证业务的连续性和...
从十个方面讲解如何保证自己的LINUX服务器安全归类.pdf
对于许多开发者来说,Linux服务器因其稳定性、安全性和成本效益而成为首选。本文将详细介绍如何将项目上传至Linux服务器,并通过具体的步骤指导您完成整个过程。 #### 二、环境准备 首先,我们需要准备以下工具和...
Linux服务器配置是IT运维工作中不可或缺的部分,特别是在网络服务领域。本章主要讲解了Linux系统...对于IT专业人士来说,这部分知识是必备技能,能够帮助他们更好地管理和维护Linux服务器,确保服务的稳定性和安全性。
在IT行业中,Linux服务器集群是一项重要的技术,它能够提高服务的可用性和性能,同时降低成本。本文将基于给定的文件名称列表,详细讲解Linux服务器集群的三种主要实现方式:直接路由(VS-DR)、IP隧道(VS-TUN)和...
SecureCRT,全称为SecureCRT for Windows,是一款功能强大的终端仿真程序,专为Windows用户设计,用于实现对UNIX或Linux服务器的安全远程访问。它支持SSH(Secure Shell)协议的两种主要版本——SSH1和SSH2,确保了...
Linux服务器集群系统是一种提高服务可用性和安全性的技术,它通过将多台独立的服务器整合成一个逻辑上的单一系统,提供高可靠性和负载均衡。本文详细解析了Linux服务器集群的实现方案。 集群技术的核心在于,一组...
【通过COM口管理Linux系统...然而,需要注意的是,为了保证安全,应当采取必要的安全措施,如使用加密的通信协议,以防止未经授权的访问。同时,定期检查和维护串行线缆的物理连接,以确保始终能够顺利进行远程管理。
【基于Linux服务器集群安全的探讨】 随着互联网和信息技术的飞速发展,网络服务器承载着越来越多的学习、生活和工作的需求,其负载不断增大。为了解决单一服务器无法满足高负载的问题,集群技术应运而生。服务器...