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安全加固的更多相关文章

  1. linux安全加固浅谈

    难易程度:★★★阅读点:linux;python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必 ...

  2. linux安全加固(2)

    目录:1.BIOS2.SSH安全3.禁用telnet4.禁用代码编译5.ProFTP6.TCPwrappers7.创建一个SU组8.root通知9.history安全10.欢迎信息11.禁用所有特殊账 ...

  3. linux安全加固(1)

    Redhat是目前企业中用的最多的一类Linux,而目前针对Redhat攻击的黑客也越来越多了.我们要如何为这类服务器做好安全加固工作呢? 一. 账户安全 1.1 锁定系统中多余的自建帐号 检查方法: ...

  4. Linux操作系统加固

    1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤 使用命令 userdel <用户名> 删除不必要的账号. 使用命令 passwd -l <用 ...

  5. 阿里云服务器 ECS Linux操作系统加固

    1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤 使用命令 userdel <用户名> 删除不必要的账号. 使用命令 passwd -l <用 ...

  6. linux安全加固项目

    分享一个Linux加固脚本项目,可快速对服务器进行安全加固,顺便做下备忘,安全人员必须熟悉运维相关的知识! 支持的操作系统平台: Amazon 2013.03 Amazon 2013.09 Amazo ...

  7. Linux安全加固之中间件Tomcat

    (注:皆为参考操作配置) 这次是tomcat的Linux加固,分为身份鉴别.访问控制.安全审计.资源控制和入侵防范5个方面大部分加固基于xml配置文件进行修改,也应根据实际需求制定方案.寻找配置文件目 ...

  8. linux系统加固方案

    Linux主机操作系统加固规范 目  录 第1章      概述... 1 1.1        目的... 1 1.2        适用范围... 1 1.3        适用版本... 1 1 ...

  9. Linux安全加固手册

    1      身份鉴别 1.1         密码安全策略 操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换. 设置有效的密码策略,防止攻击者破解出密码 ...

随机推荐

  1. ruby 方法重载

    class MyClass def sayHello return "hello from MyClass" end def sayGoodbye return "Goo ...

  2. Spring AOP实现方式三之自动扫描注入【附源码】

    注解AOP实现  这里唯一不同的就是application 里面 不需要配置每个bean都需要配置了,直接自动扫描 注册,主要知识点是怎么通过配置文件得到bean, 注意类前面的@注解. 源码结构: ...

  3. freshStartTail 第一次启动时 抛弃旧的日志

    freshStartTail [on/off] (requires v8.18.0+) Default: off This is used to tell rsyslog to seek to the ...

  4. Android list刷新后仍然定位到原来的位置,解决。

    问题: 有一个list,点击item时会做一些事情,然后重新加载数据,此时希望点击重新刷新后item还在原来的位置,而不是跳转到开头. 实现如下: 1.listview添加监听setOnScrollL ...

  5. Binary to Text (ASCII) Conversion

    Binary to Text (ASCII) Conversion Description: Write a function that takes in a binary string and re ...

  6. Android开发之注解式框架ButterKnife在ADT中的设置

    使用注解式框架ButterKnife的时候,导入到ADT中,结果项目中注解的view无效,如点击button等无任何的反应. 然后在ButterKnife的官网查看到解决办法:http://jakew ...

  7. Eclipse中输入系统变量和运行参数

    在开发时,有时候可能需要根据不同的环境设置不同的系统参数,我们都知道,在使用java -jar命令时可以使用-D参数来设置运行时的系统变量,同样,在Eclipse中运行java程序时,我们怎么设置该系 ...

  8. POJ 3126 Prime Path 解题报告(BFS & 双向BFS)

    题目大意:给定一个4位素数,一个目标4位素数.每次变换一位,保证变换后依然是素数,求变换到目标素数的最小步数. 解题报告:直接用最短路. 枚举1000-10000所有素数,如果素数A交换一位可以得到素 ...

  9. ☀【window.self / window.parent / window.top】

    Js中的window.parent ,window.top,window.self 详解 √http://blog.csdn.net/zdwzzu2006/article/details/604763 ...

  10. PHP字符串操作常用函数

    /* * 确定字符串长度 * int strlen(string str) * 比较两个字符串 * 1.strcmp函数对两个字符串进行二进制安全的比较,并区分大小写 * int strcmp(str ...