Ubuntu/Linux服务器安全配置

腾讯视频/爱奇艺/优酷/外卖 充值4折起

很少见有人马上为一台新安装的服务器做安全措施,然而我们生活所在的这个社会使得这件事情是必要的。不过为什么仍旧这么多人把它拖在最后?我也做过相同的事,这通常可以归结为我们想要马上去折腾那些有趣的东西。希望这篇文章将向大家展示,确保服务器安全没有你想得那样难。在攻击开始后,俯瞰你的“堡垒”,也相当享受。

这篇文章为 Ubuntu 12.04.2 LTS 而写,你也可以在任何其他 Linux 分发版上做相同的事情。

如果服务器已经有了一个公有IP,你会希望立即锁定 root 访问。事实上,你得锁定整个ssh访问,并确保只有你可以访问。增加一个新用户,把它加入admin组(在/etc/sudoers预配置以拥有sudo访问权限)。

$ 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,并且在服务器上禁用讨厌的密码验证。

$ mkdir ~/.ssh

$ echo “ssh-rsa [your public key]” 》 ~/.ssh/authorized_keys

/etc/ssh/sshd_config

PermitRootLogin no

PermitEmptyPasswords no

PasswordAuthentication no

AllowUsers spenserj

重新加载SSH,使用修改生效,之后尝试在一个新会话中登陆来确保所有事情正常工作。如果你不能登陆,你将仍然拥有你的原始会话来做修改。

$ sudo service ssh restart

ssh stop/waiting

ssh start/running, process 1599

更新服务器

既然你是访问服务器的唯一用户,你就不用担心黑客鬼鬼祟祟进入,再次正常呼吸。当有一些针对你服务器的更新时,正是修补的机会,所以动手吧,就现在。

$ 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里预装了,所以去设置一些规则吧。

$ sudo mkdir /etc/iptables

/etc/iptables/rules

*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 命令为规则集生效。如果你丢失连接,修补你的规则,在继续之前再试一下

$ 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

#!/bin/sh

iptables-restore 《 /etc/iptables/rules

现在给它执行权限,执行文件,以确保它正常载入

$ 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

$ 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 写配置,所以把它拷贝到那儿。

sudo cp /etc/fail2ban/jail.{conf,local}

配置

把 ignoreip 行修改为你的ip,并且可以设置禁止恶意用户的时间量(默认是10分钟)。你也将希望设置一个destemail,这里我通常输入我自已的email地址,再在后面加上 ,fail2ban@blocklist.de。BlockList.de 是一个跟踪并且自动报告黑客IP的系统。

/etc/fail2ban/jail.local

[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

# 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

[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增加了合适的规则。

$ 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

DROP all -- 204.50.33.22 anywhere

DROP all -- 195.128.126.114 anywhere

保持最新更新

你可能现在拥有一个已经锁定并且准备投入使用的服务器,然而这并不是你安全之旅的终点。保持最新更新(并且总是首先在非产品环境下测试),总是关闭你不需要的端口,定期检查你的日志,并且由内而外了解你的服务器。

Ubuntu(Linux)下如何配置IP地址

07/13 11:14
一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 blacklist ipv6,然后查看修改结果: cat /etc/modprobe.d/blacklist.conf 3.设置IP(设置网卡eth0的IP地址和子网掩码) sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0 4.设置网关 sudo

linux服务器下LNMP安装与配置方法

07/05 01:55
现在很多朋友都选择了linux服务器下配置LNMP(linux+nginx+mysql+php),这里分享下LNMP安装与配置方法,需要的朋友可以参考下 Nginx与apache、lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-deve

阿里云使用Linux系统应用配置有哪些问题

05/21 17:47
Linux下如何进行FTP设置 ECS Linux服务器如何配置网站以及绑定域名 Ubuntu安装vncserver实现图形化访问 阿里云Docker镜像库 ECS linux中添加ftp用户,并设置相应的权限 CentOS6.5安装vncserver实现图形化访问 Linux SCP命令复制传输文件的用法 Mysql,phpmyadmin密码忘了怎么办 Linux下l2tp客户端xl2tpd的安装配置 使用SFTP方式传输文件 ECS Linux系统盘网站数据更换至数据盘 WDCP的报错处理

Ubuntu/Debian系统中 Linux服务器的初步配置流程

10/06 16:38
本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情。这主要是我自己的总结和备忘,如果有遗漏,欢迎大家补充。 下面的操作针对Debian/Ubuntu系统,其他Linux系统也类似,就是部分命令稍有不同。 第一步:root用户登录 首先,使用root用户登录远程主机(假定IP地址是128.199.209.242)。 ssh root@128.199.209.242 这时,命令行会出现警告,表示这是一个新的地址,存在安全风险。键入yes,表示接受。然后,就应该可以顺利登入

Ubuntu 11.0下配置Web服务器详细教程[ 图文]

04/14 02:26
近日,有消息爆出Linux桌面已经趋于“死亡”,众多Linux爱好者感到失望,但令人可喜的是Linux在服务器领域表现却尤为喜人,据IDC数据显示,部署了Linux系统的服务器占到20%的市场份额。其中Red Hat和Ubuntu在服务器市场表现抢眼,由它们搭建的Web服务器在企业中应用最为广泛。 同时,Ubuntu创始人表示近年来Ubuntu形式已经开始逆转,从2011年开始采用Ubuntu作为网页服务器的用户比RHEL更多,Ubuntu 在企业市场正不断扩张,相反RHEL却呈现下跌倾向。无疑

CentOS 6 的安全配置(CentOS Linux服务器安全设置)

11/05 13:19
一、系统安全记录文件 操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果您的系统是直接连到Internet,您发现有很多人对您的系统做Telnet/FTP登录尝试,可以运行”#more /var/log/secure | grep refused”来检查系统所受到的攻击,以便采取相应的对策,如使用SSH来替换Telnet/rlogin等。 二、启动和登录安全性 1.BIOS安全 设置BIOS密码且修改引导次序禁止从软盘启动系统。 2.用户口令 用户口令是Linux安全的一个基本起点,很多

阿里云Linux下FTP服务器搭配配置

04/27 22:28
阿里云服务器是国内目前 最好的一个云服务器了,不过价格方面也比较贵了,下面我们来给各位介绍在阿里云Linux下FTP服务器搭配配置了,大概方法 与linux下搭配ftp服务器区别不大,只是一些小细节了。 一、aliyun Linux(Redhat)安装vsftp软件 1.更新yum源 首先需要更新系统的yum源,便捷工具下载地址:update_source.zip。这里需要注意的是,目前文件无法传输,所以想要运行 update_source.sh 只能用文本打开,复制粘贴到阿里云服务器系统运行。

盘点十大最流行的Linux服务器发行版

04/29 21:44
随着Linux不断发展,Linux所支持的文件系统类型也在迅速扩充。很多的数据中心服务器上都运行着Linux,可以节省大量的许可证费用及维护费用。但伴随着Linux新版本的发行,其中每一个不同版本的Linux所支持的文件系统类型都有所不同。 那么,对于这种情况来说,Linux系统家族中也划分着针对不同的用户群,比如Ubuntu被认为Linux新用户最容易操作的平台,而Slackware Linux是需要经过有着一定应用基础的用户,CentOS是一个企业级的发行版,特别适合对稳定性,可靠性和功能要

打造轻巧的 Linux 服务器的步骤

03/09 07:01
一方面用来放置我们的站点,另一方面实验室放一台服务器,也为实验室的成员们提供一些额外的服务,方便科研和学习。 虽然做 Web 我是轻车熟路了,但倒腾 Linux 服务器我绝对还是个新手。虽然平时为了开发也没少倒腾过,但基本上都是调一下 Apache 或 PHP 之类的事情。所以下面写的东西只是个记录,不敢班门弄斧,方法也都是 Google 来的,如果您有什么意见建议,欢迎您提出来。 本文只写一下搭建基本服务器的部分。发行版我选择的是 Ubuntu,虽然我知道 CentOS 或是 RHEL 可能性