如何保证Linux服务器的安全.docx
- 文档编号:8488389
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:10
- 大小:19.71KB
如何保证Linux服务器的安全.docx
《如何保证Linux服务器的安全.docx》由会员分享,可在线阅读,更多相关《如何保证Linux服务器的安全.docx(10页珍藏版)》请在冰豆网上搜索。
如何保证Linux服务器的安全
如何保证Linux服务器的安全
很少见有人马上为一台新安装的服务器做安全措施,然而我们生活所在的这个社会使得这件事情是必要的。
不过为什么仍旧这么多人把它拖在最后?
我也做过相同的事,这通常可以归结为我们想要马上去折腾那些有趣的东西。
希望这篇文章将向大家展示,确保服务器安全没有你想得那样难。
在攻击开始后,俯瞰你的“堡垒”,也相当享受。
这篇文章为Ubuntu12.04.2LTS而写,你也可以在任何其他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
$sudoaddgroupadmin
Addinggroup'admin'(GID1001)
Done.
$sudoadduserspenserj
Addinguser`spenserj'...
Addingnewgroup`spenserj'(1002)...
Addingnewuser`spenserj'(1001)withgroup`spenserj'...
Creatinghomedirectory`/home/spenserj'...
Copyingfilesfrom`/etc/skel'...
EnternewUNIXpassword:
RetypenewUNIXpassword:
passwd:
passwordupdatedsuccessfully
Changingtheuserinformationforspenserj
Enterthenewvalue,orpressENTERforthedefault
FullName[]:
SpenserJones
RoomNumber[]:
WorkPhone[]:
HomePhone[]:
Other[]:
Istheinformationcorrect?
[Y/n]y
$sudousermod-a-Gadminspenserj
你也将希望在你电脑上创建一个私有key,并且在服务器上禁用讨厌的密码验证。
1
2
$mkdir~/.ssh
$echo"ssh-rsa[yourpublickey]">~/.ssh/authorized_keys
/etc/ssh/sshd_config
1
2
3
4
PermitRootLoginno
PermitEmptyPasswordsno
PasswordAuthenticationno
AllowUsersspenserj
重新加载SSH,使用修改生效,之后尝试在一个新会话中登陆来确保所有事情正常工作。
如果你不能登陆,你将仍然拥有你的原始会话来做修改。
1
2
3
$sudoservicesshrestart
sshstop/waiting
sshstart/running,process1599
更新服务器
既然你是访问服务器的唯一用户,你就不用担心黑客鬼鬼祟祟进入,再次正常呼吸。
当有一些针对你服务器的更新时,正是修补的机会,所以动手吧,就现在。
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
$sudoapt-getupdate
...
Hitprecise-updates/universeTranslation-en_CA
Hitprecise-updates/universeTranslation-en
Hitprecise-backports/mainTranslation-en
Hitprecise-backports/multiverseTranslation-en
Hitprecise-backports/restrictedTranslation-en
Hitprecise-backports/universeTranslation-en
Fetched3,285kBin5s(573kB/s)
Readingpackagelists...Done
$sudoapt-getupgrade
Readingpackagelists...Done
Buildingdependencytree
Readingstateinformation...Done
Thefollowingpackageshavebeenkeptback:
linux-headers-generic-lts-quantallinux-image-generic-lts-quantal
Thefollowingpackageswillbeupgraded:
accountsserviceapportaptapt-transport-httpsapt-utilsaptitudebash...
73upgraded,0newlyinstalled,0toremoveand2notupgraded.
Needtoget61.0MBofarchives.
Afterthisoperation,151kBofadditionaldiskspacewillbeused.
Doyouwanttocontinue[Y/n]?
Y
...
Settinguplibisc83(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settinguplibdns81(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settinguplibisccc80(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settinguplibisccfg82(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settinguplibbind9-80(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settingupliblwres80(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settingupbind9-host(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settingupdnsutils(1:
9.8.1.dfsg.P1-4ubuntu0.6)...
Settingupiptables(1.4.12-1ubuntu5)...
...
安装防火墙
安装现在正最流行的防火墙软件?
好,行动吧。
那就配置一个防火墙。
之后你总是可以增加另一个异常,几分钟额外的工作并不会折腾死你。
Iptables在Ubuntu里预装了,所以去设置一些规则吧。
1
$sudomkdir/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
:
INPUTDROP[0:
0]
:
FORWARDDROP[0:
0]
:
OUTPUTDROP[0:
0]
#Acceptanyrelatedorestablishedconnections
-IINPUT1-mstate--stateRELATED,ESTABLISHED-jACCEPT
-IOUTPUT1-mstate--stateRELATED,ESTABLISHED-jACCEPT
#Allowalltrafficontheloopbackinterface
-AINPUT-ilo-jACCEPT
-AOUTPUT-olo-jACCEPT
#AllowoutboundDHCPrequest-Somehosts(Linode)automaticallyassigntheprimaryIP
#-AOUTPUT-pudp--dport67:
68--sport67:
68-jACCEPT
#OutboundDNSlookups
-AOUTPUT-oeth0-pudp-mudp--dport53-jACCEPT
#OutboundPINGrequests
-AOUTPUT-picmp-jACCEPT
#OutboundNetworkTimeProtocol(NTP)request
-AOUTPUT-pudp--dport123--sport123-jACCEPT
#SSH
-AINPUT-ieth0-ptcp-mtcp--dport22-mstate--stateNEW-jACCEPT
#OutboundHTTP
-AOUTPUT-oeth0-ptcp-mtcp--dport80-mstate--stateNEW-jACCEPT
-AOUTPUT-oeth0-ptcp-mtcp--dport443-mstate--stateNEW-jACCEPT
COMMIT
通过iptables-apply命令为规则集生效。
如果你丢失连接,修补你的规则,在继续之前再试一下
1
2
3
4
$sudoiptables-apply/etc/iptables/rules
Applyingnewruleset...done.
CanyouestablishNEWconnectionstothemachine?
(y/N)y
...thenmyjobisdone.Seeyounexttime.
创建文件/etc/network/if-pre-up.d/iptables,然后写入下面内容。
当你启动服务器的时候,将自动载入你的iptables规则。
/etc/network/if-pre-up.d/iptables
1
2
#!
/bin/sh
iptables-restore
现在给它执行权限,执行文件,以确保它正常载入
1
2
$sudochmod+x/etc/network/if-pre-up.d/iptables
$sudo/etc/network/if-pre-up.d/iptables
用Fail2ban处理潜在黑客
当谈到安全的时,Fail2ban是我最喜欢的工具之一,它将监控你的日志文件,并且可以临时禁止那些正在滥用你资源,或者正在强制肆虐你的SSH连接,或者正在dos攻击你web服务器的用户。
InstallFail2ban
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sudoapt-getinstallfail2ban
[sudo]passwordforsjones:
Readingpackagelists...Done
Buildingdependencytree
Readingstateinformation...Done
Thefollowingextrapackageswillbeinstalled:
gaminlibgamin0python-centralpython-gaminpython-supportwhois
Suggestedpackages:
mailx
ThefollowingNEWpackageswillbeinstalled:
fail2bangaminlibgamin0python-centralpython-gaminpython-supportwhois
0upgraded,7newlyinstalled,0toremoveand2notupgraded.
Needtoget254kBofarchives.
Afterthisoperation,1,381kBofadditionaldiskspacewillbeused.
Doyouwanttocontinue[Y/n]?
y
...
虽然Fail2ban安装一个默认配置(/etc/fail2ban/jail.conf),但我们希望在/etc/fail2ban/jail.local写配置,所以把它拷贝到那儿。
1
sudocp/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"canbeanIPaddress,aCIDRmaskoraDNShost
ignoreip=127.0.0.1/8
bantime=600
maxretry=3
#"backend"specifiesthebackendusedtogetfilesmodification.Available
#optionsare"gamin","polling"and"auto".
#yoh:
ForsomereasonDebianshippedpython-gamindidn'tworkasexpected
#ThisissueleftToDo,sopollingisdefaultbackendfornow
backend=auto
#
#Destinationemailaddressusedsolelyfortheinterpolationsin
#jail.{conf,local}configurationfiles.
destemail=root@localhost,fail2ban@blocklist.de
这有一些其他的你想检查的配置,尽管缺省配置已经相当不错了,所以,快速浏览这些,直到你读到Actions章节。
Actions
Actions允许你对恶意行为作出反应,然而当我们想要它禁止和发邮件的时候,默认是禁用了iptables。
值得感谢的是,有一个预配置文件action_wml,它恰恰是做这个的。
/etc/fail2ban/jail.local
1
2
3
4
#Choosedefaultaction.Tochange,justoverridevalueof'action'withthe
#interpolationtothechosenactionshortcut(e.g.action_mw,action_mwl,etc)injail.local
#globally(section[DEFAULT])orperspecificsection
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
$sudoservicefail2banrestart
*Restartingauthenticationfailuremonitorfail2ban
...done.
$sudoiptables-L
ChainINPUT(policyDROP)
targetprotoptsourcedestination
fail2ban-ssh-ddostcp--anywhereanywheremultiportdportsssh
fail2ban-sshtcp--anywhereanywheremultiportdportsssh
...
Chainfail2ban-ssh(1references)
targetprotoptsourcedestination
RETURNall--anywhereanywhere
Chainfail2ban-ssh-ddos(1references)
targetprotoptsourcedestination
RETURNall--anywhereanywhere
在任何时间,你都可以使用sudoiptables-L来列出你的规则,随后列出所有当前禁止的IP。
此时,Fail2ban正在处理两个恶意的用户。
BannedIPs
1
2
DROPall--204.50.33.22anywhere
DROPall--195.128.126.114anywhere
保持最新更新
你可能现在拥有一个已经锁定并且准备投入使用的服务器,然而这并不是你安全之旅的终点。
保持最新更新(并且总是首先在非产品环境下测试),总是关闭你不需要的端口,定期检查你的日志,并且由内而外了解你的服务器。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 保证 Linux 服务器 安全