linux安全加固
1 、 BIOS
你应该总是在系统启动的时候设置一个BIOS
密码和禁用从CD-ROM
和软盘引导,这将可以防止一些人未经允许访问你的系统和更改BIOS
设置
2
、sshd
服务
SSH
是一个协议,利用它可以登录到一个远程系统或远程执行系统命令,默认允许root
登录,并且sshv1
存在缺陷,我们应该在sshd_config
禁止root
访问和使用sshv2
来让ssh
更加安全
#vi /etc/ssh/sshd_config
Protocol 2
PermitRootLogin = no
#sshd /etc/rc.d/init.d/sshd restart
3
、
禁用
telnet
早期的Linux
默认开启telnet
服务,telnet,ftp,rlogin
都是明文传输的协议是容易被嗅探到的,这就是为什么推荐使用安全的版本(sftp,scp,ssh
)的原因,如果你必须要使用telnet
,那么至少应该隐藏banner
信息
#vi
/etc/xinetd.d/telnet
disable=yes
4
、
禁用代码编译
你可以禁用代码编译并且只把编译的权限分配给一个用户组
#
该组的成员可以编译代码
/usr/sbin/groupadd compiler
#
把常见的编译器所属组赋给编译用户组
chgrp compiler /usr/bin/*cc*
chgrp compiler /usr/bin/*++*
chgrp compiler /usr/bin/ld
chgrp compiler /usr/bin/as
#
设置mysqlaccess
的 访问
chgrp root mysqlaccess
#
设置权限
chmod 750 /usr/bin/*cc*
chmod 750 /usr/bin/*++*
chmod 750 /usr/bin/ld
chmod 750 /usr/bin/as
chmod 755 /usr/bin/mysqlaccess
#
把用户添加到组里
vi /etc/group
compiler:x:520:user1,user2
5
、ProFTP
#
修改proftpd.conf
来禁止root
登陆
vi /etc/proftpd.conf
Add RootLogin off
/sbin/service proftpd restart
6
、TCP wrappers
编辑hosts.allow
和hosts.deny
可以限制或允许访问inet
服务
vi
/etc/hosts.allow
#Approved IP addresses
ALL:192.168.0.1
ALL:192.168.5.2
#CSV uploader machine
proftpd:10.0.0
.5
#pop3 from antwhere
ipop3:ALL
vi /etc/hosts.deny
ALL:ALL EXCEPT localhostENY
7
、创建su
用户组
因为我们在SSH
禁止了root
用户访问并且禁用了telnet
,所有我们应该分配给一些用户su
权限来获取root
特权
vi /etc/group
,添加一行如下
wheel:x:10:root,user1,user2
chgrp wheel /bin/su
chmod o-rwx /bin/su
说明:或者直接使用pam
模块来做,再则也可以编译/etc/sudoers
来做
8
、root
通知
当一个具有root
权限的用户登录的时候发mail
,具体实施方法如下:
vi /root/.bashrc
,当有root
权限的用户登录时发生email
通知
echo ‘ALERT – Root Shell Access (Server Name) on:’ `date` `who` | mail -s “Alert: Root Access from `who | cut -d”(” -f2 | cut -d”)” -f1`” your@email.com
9
、history
安全
这是一个避免删除.bash_history
或重定向到/dev/null
的好主意,因此他不能清除或删除他最后执行的命令
chattr +a .bash_history
chattr +i .bash_history
获取用户的人会知道他的历史命令锁定并且要同意才可以使用服务
10
、使用欢迎信息
你必须提供一些信息让攻击者知道该系统不对公众开放,在国外有类似案件,攻击者入侵一个系统并且系统没有这些信息,这种情况下法院不能做任何裁决,因为系统说welcome
1
)删除/etc/redhat-release
2
)编辑/etc/issue
与/etc/motd
并显示警告信息
11
、禁用所有特殊账户
#
你应该从系统中删除所有默认用户和组
例如news,lp,sync,shutdown,uucp,games,halt
等
userdel name
groupdel name
#
锁定特定账户
/usr/sbin/usermod -L -s /bin/false user
12
、chmod
危险文件
这可能是限制不具有root
权限的用户执行下面这些命令的好主意
chmod 700 /bin/ping
chmod 700 /usr/bin/finger
chmod 700 /usr/bin/who
chmod 700 /usr/bin/w
chmod 700 /usr/bin/locate
chmod 700 /usr/bin/whereis
chmod 700 /sbin/ifconfig
chmod 700 /usr/bin/pico
chmod 700 /usr/bin/vi
chmod 700 /usr/bin/which
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/make
chmod 700 /bin/rpm
13
、指定允许root
登陆的TTY
设备
因为/etc/securetty
文件允许你指定root
可以从哪个TTY
设备登录
vi /etc/securetty
,然后只留2
个连接
tty1
tty2
14
、选择一个安全的密码
在/etc/login.defs
文件中定义了shadow
密码的具体配置,默认密码长度最短为5
字符,你应该至少设置为8
vi
/etc/login.defs
PASS_MIN_LEN
8
15
、检测Rootkit
用chkrootkit
或rkhunter
,以chkrootkit
为例
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.md5
md5sum chkrootkit.tar.gz
#
首先检查md5
校验值
tar -zxvf chkrootkit.tar.gz
cd chkrootkit
./configure && make sense
然后运行./chkrootkit
我们可以将其添加到contrab
使其每天自动扫描:
vi /etc/cron.daily/chkrootkit.sh
#!/bin/bash
#
输入chkrootkit
的安装目录
cd /root/chkrootkit/
#
输入你想收到检测报告的email
./chkrootkit | mail -s “Daily chkrootkit from Server Name” your@email.com
16
、安装补丁
你要经常检查更新以修复某些缺陷或系统稳定性的改进,否则你存在漏洞的系统将会不时的遭受新的攻击
#
列出可用更新
up2date -l
#
安装未排除的更新
up2date -u
#
安装包括排除的更
up2date -uf
17
、隐藏Apache
信息
你应该隐藏Apache
的banner
信息使攻击者不知道Apache
的版本,从而使他们难以利用漏洞
vi /etc/httpd/conf/httpd.conf
#
改变服务器签名
ServerSignature Off
service httpd restart
18
、隐藏php
信息
你应该隐藏php
的banner
信息,原因同上
vi php.ini
expose_php=Off
service apache restart
19
、关闭不用的服务
你应该把任何未使用的服务关闭,可以在/etc/xinetd.d
文件夹里找到
cd /etc/xinetd.d
grep disable * | column
-t
这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务
20
、检测监听的端口
检测是否有必要开放端口是非常重要的
netstat -tulp
或 lsof -i -n | egrep ‘COMMAND|LISTEN|UDP’
或 nmap
!
21
、关闭端口和服务
重点是关闭在系统启动时打开的不需要的端口,方法如下:
#
对于正在运行的服务,可以执行
chkconfig -list | grep on
#
禁用服务可以执行
chkconfig servicename off
#
然后停止正在运行的服务
/etc/init.d/service stop
22
、删除不用的rpm
包
首先应该清楚你的系统的作用,它是web,mail,file
服务器或其他,然后觉得哪些包是必要的,之后删除不需要的软件包,方法如下:
#
首先列出安装列表
rpm -qa
#
更详细的信息
rpm -qi rpmname
#
还可以检测删除包可能出现的冲突
rpm -e --test rpmname
23
、禁用危险的php
函数
你应该禁用php
的危险函数防止在网站上执行系统命令whereis php.ini
vi /usr/local/lib/php.ini
disable_functions = “symlink,shell_exec,exec,proc_close,proc_open,popen,
system,dl,passthru,escapeshellarg, escapeshellcmd”
24
、安装配置防火墙
高级策略防火墙(APF
)是一种IP
表(网络过滤),它是基于当今互联网部署服务器防火墙系统的基本需要和客户部署LINUX
安装的唯一需要而设计的。 它是最好的开源防火墙之一
1
)配置APF
防火墙方法:
wget http://www.r-fx.ca/downloads/apf-current.tar.gz
tar -zxvf apf-current.tar.gz
cd apf-0.9.7
-1
./install.sh
2
)vi /etc/apf/conf.apf
,一般配置如下
启用防火墙使用DShield.org
块列表
USE_DS=”1″
然后我将列出常规的配置和CPanel
配置方式,因为CPanel
是应该最广泛的虚拟主机管理软件
(1
)常规配置(DNS,Mail,Web,FTP)
Common ingress (inbound)
# Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD IG_TCP_CPORTS=”21,22,25,53,80,110,143,443,995″
# Common ingress (inbound) UDP ports IG_UDP_CPORTS=”53″
# Egress filtering [0 = Disabled / 1 = Enabled]
EGF=”1″
# Common egress (outbound) TCP ports
EG_TCP_CPORTS=”21,25,80,443,43″
# Common egress (outbound) UDP ports
EG_UDP_CPORTS=”20,21,53″
(2
)CPanel
配置
Common ingress (inbound) ports
# Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD IG_TCP_CPORTS=”21,22,25,53,80,110,143,443,2082,2083, 2086,2087,2095, 2096,3000_3500″
# Common ingress (inbound) UDP ports
IG_UDP_CPORTS=”53″
Common egress (outbound) ports
# Egress filtering [0 = Disabled / 1 = Enabled]
EGF=”1″
# Common egress (outbound) TCP ports
EG_TCP_CPORTS=”21,25,80,443,43,2089″
# Common egress (outbound) UDP ports
EG_UDP_CPORTS=”20,21,53″
之后启动防火墙:/etc/apf/apf -s
,如果运行良好我在回去修改配置文件,使DEVM=”0″
(3
)配置APF
的AntiDos
vi /etc/apf/ad/conf.antidos
,找到下面的内容并替换成你的资料
# Organization name to display on outgoing alert emails
CONAME=”Your Company”
# Send out user defined attack alerts [0=off,1=on]
USR_ALERT=”0″
# User for alerts to be mailed to
USR=you@yourco.com
你应把USR_ALERT
改为1
保存后重启APF
:/etc/apf/apf –r
To make the firewall start with the Operating System: chkconfig –level 2345 apf on
APF
开机自启动:chkconfig –level 2345 apf on
禁止一个IP
用/etc/apf/apf -d ip
或vi /etc/apf/deny_hosts.rules
允许一个IP
用/etc/apf/apf -a ip
或vi /etc/apf/deny_hosts.rules
25
、安装配置BFD
(暴力破解检测)
BFD
是一个用于分析应用日志和检测验证失败的模块化shell
脚本,而且安装配置和用法都是非常容易的。使用BFD
的原因很简单,其实在LINUX
领域几乎没有结合防火墙或实时设备来监控不验证和暴力攻击审计的程序。在用BFD
之前你必须安装APF
防火墙
wget http://www.r-fx.ca/downloads/bfd-current.tar.gz
tar -zxvf bfd-current.tar.gz
cd bfd-0.9
vi /usr/local/bfd/conf.bfd
#
把以下内容改为你的资料
# Enable/disable user alerts [0 = off; 1 = on]
ALERT_USR=”1″
# User alert email address
EMAIL_USR=”your@mail.com”
# User alert email; subject
SUBJ_USR=”Brute Force Warning for $HOSTNAME”
vi /usr/local/bfd/ignore.hosts
,然后把你的IP
设置成允许主机,避免意外的锁定自己
#
重启BFD
/usr/local/sbin/bfd -s
26
、内核加固(sysctl.conf
)
sysctl.conf
用来加固内核,目的是避免DOS
和欺骗攻击,具体的方法如下:
#
了解下当前配置的大概情况
sysctl -a
vi /etc/sysctl.conf
添加如下内容:
# Kernel sysctl configuration file for Red Hat Linux
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
#Prevent SYN attack
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Disables packet forwarding
net.ipv4.ip_forward=0
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.eth0.log_martians = 1
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Disables the magic-sysrq key
kernel.sysrq = 0
# Modify system limits for Ensim WEBppliance
fs.file-max = 65000
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
# Set maximum amount of memory allocated to shm to 256MB
kernel.shmmax = 268435456
# Improve file system performance
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
# Improve virtual memory performance
vm.buffermem = 90 10 60
# Increases the size of the socket queue (effectively, q0).
net.ipv4.tcp_max_syn_backlog = 1024
# Increase the maximum total TCP buffer-space allocatable
net.ipv4.tcp_mem = 57344 57344 65536
# Increase the maximum TCP write-buffer-space allocatable
net.ipv4.tcp_wmem = 32768 65536 524288
# Increase the maximum TCP read-buffer space allocatable
net.ipv4.tcp_rmem = 98304 196608 1572864
# Increase the maximum and default receive socket buffer size
net.core.rmem_max = 524280
net.core.rmem_default = 524280
# Increase the maximum and default send socket buffer size
net.core.wmem_max = 524280
net.core.wmem_default = 524280
# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 1440000
# Allowed local port range
net.ipv4.ip_local_port_range = 16384 65536
# Increase the maximum memory used to reassemble IP fragments
net.ipv4.ipfrag_high_thresh = 512000
net.ipv4.ipfrag_low_thresh = 446464
# Increase the maximum amount of option memory buffers
net.core.optmem_max = 57344
# Increase the maximum number of skb-heads to be cached
net.core.hot_list_length = 1024
## DO NOT REMOVE THE FOLLOWING LINE!
## nsobuild:20051206
#
重启后生效
/sbin/sysctl -p
sysctl -w net.ipv4.route.flush=1
27
、更改SSH
端口
更改SSH
默认端口号在一定程度上可以提高安全性
vi /etc/ssh/sshd_config
Port 22
改为其他端口
当然不要忘记把更改的端口加进防火墙,然后重启生效:/etc/init.d/ssh restart
,如果安装了APF
并把端口添加之后,还要重启APF:/etc/init.d/apf restart
28
、/tmp,/var/tmp,/dev/shm
分区的安全
/tmp,/var/tmp,/dev/shm
目录是不安全的,任何用户都可以执行脚本,最好的解决办法是挂载nocexec
和nosuid
选项的参数(
注意:不建议在CPanel
使用)
1
)/tmp
目录
cd /dev
#
创建 100M
(“count”)
的存储文件:
dd if=/dev/zero of=tmpMnt bs=1024 count=100000
#
设为一个扩展的文件系统
/sbin/mke2fs /dev/tmpMnt (“…is not a block special device. continue?”
回答yes)
#
备份现有临时文件
cp -R /tmp/ /tmp_backup
#
用noexec
挂载新文件系统:
mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp
chmod 0777 /tmp
#
把备份的文件拷贝回去
cp -R /tmp_backup/* /tmp/
#
删除备份
rm -rf /tmp_backup
#
修改/etc/fstab
添加下面的条目使其在引导时仍然有效
/dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0
2
)/var/tmp
目录
mv /var/tmp /var/tmpbak
ln -s /tmp /var/tmp
cp /var/tmpbak/* /tmp/
3
)/dev/shm
目录
vi
/etc/fstab
"none /dev/shm tmpfs defaults,rw 0 0"
改为 "none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0"
linux安全加固的更多相关文章
- linux安全加固浅谈
难易程度:★★★阅读点:linux;python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必 ...
- linux安全加固(2)
目录:1.BIOS2.SSH安全3.禁用telnet4.禁用代码编译5.ProFTP6.TCPwrappers7.创建一个SU组8.root通知9.history安全10.欢迎信息11.禁用所有特殊账 ...
- linux安全加固(1)
Redhat是目前企业中用的最多的一类Linux,而目前针对Redhat攻击的黑客也越来越多了.我们要如何为这类服务器做好安全加固工作呢? 一. 账户安全 1.1 锁定系统中多余的自建帐号 检查方法: ...
- Linux操作系统加固
1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤 使用命令 userdel <用户名> 删除不必要的账号. 使用命令 passwd -l <用 ...
- 阿里云服务器 ECS Linux操作系统加固
1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤 使用命令 userdel <用户名> 删除不必要的账号. 使用命令 passwd -l <用 ...
- linux安全加固项目
分享一个Linux加固脚本项目,可快速对服务器进行安全加固,顺便做下备忘,安全人员必须熟悉运维相关的知识! 支持的操作系统平台: Amazon 2013.03 Amazon 2013.09 Amazo ...
- Linux安全加固之中间件Tomcat
(注:皆为参考操作配置) 这次是tomcat的Linux加固,分为身份鉴别.访问控制.安全审计.资源控制和入侵防范5个方面大部分加固基于xml配置文件进行修改,也应根据实际需求制定方案.寻找配置文件目 ...
- linux系统加固方案
Linux主机操作系统加固规范 目 录 第1章 概述... 1 1.1 目的... 1 1.2 适用范围... 1 1.3 适用版本... 1 1 ...
- Linux安全加固手册
1 身份鉴别 1.1 密码安全策略 操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换. 设置有效的密码策略,防止攻击者破解出密码 ...
随机推荐
- JavaScript中的自调用函数
自调用函数 自调用函数(self-invoking funciton)就是函数定义完之后会立即运行的函数. 最常见的写法是: (function() { // function body... }() ...
- 转载:10个实用的但偏执的Java编程技术
在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用“防御性编程”,即 ...
- 转自 z55250825 的几篇关于FFT的博文(二)
题目大意:高精度乘法. fft的实现貌似有很多种,咱先写的是一种递归的fft,应该算是比较快的了吧.参考了 Evil君 的代码,那个运算符重载看的咱P党泪流满面. (没想到P竟然有运算符重载咩 ...
- 【转】我的WIN7分辨率是1920*1080,调低后字体模糊
原文网址:http://tieba.baidu.com/p/778306758 WIN7还有一个“使用XP风格DPI缩放”的选项,如果选中则只放大文字,不选会连对话框和文字全部放大 这么多层楼,只有这 ...
- ZOJ 3791 An Easy Game
思路:dp+记忆化搜索,设dp[n][m]表示s1与s2不同字符个数为n,还需要变m步的方法数,那么: dp[n][m] = (c[n][i]*c[N-n][K-i]) * dp[n-i+(K-i ...
- bzoj 2281 [Sdoi2011]黑白棋(博弈+组合计数)
黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色 ...
- Clean Code–Chapter 7 Error Handling
Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...
- 《HTML5与CSS3基础教程》笔记
以下笔记摘要页码基于 人民邮电出版社 2013年1月第1版 英文书名:HMTL5 and CSS3 Visual Quickstart Guide (Seven Edition) 前言 P2: 渐进增 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》
6.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...
- Storm系列(十五)架构分析之Executor-Spout
Spout实现mk-threads接口用于创建与Executor对应的消息循环主函数. defmulti mk-threads executor-selector Mk-threads函数的主消息循环 ...