CentOS6.6 安全加固及性能优化

CentOS Linux是被很多企业广泛应用的OS,本文总结了一些常见的加固方法。

基本原则:

最小的权限+最小的服务=最大的安全

操作之前先备份;

为避免配置错误无法登录主机,请始终保持有一个终端已用root登录并不退出,在另一个终端中做配置修改。这样即使改错,也不至于因系统无法登录导致永远无法登录或恢复配置。

操作项:

一、注释掉系统不需要的用户和用户组

注意:不建议直接删除,当你需要某个用户时,自己重新添加会很麻烦。

   cp  /etc/passwd  /etc/passwdbak   #修改之前先备份

   vi /etc/passwd  #编辑用户,在前面加上#注释掉此行 

   #adm:x:3:4:adm:/var/adm:/sbin/nologin

   #lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

   #sync:x:5:0:sync:/sbin:/bin/sync

   #shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

   #halt:x:7:0:halt:/sbin:/sbin/halt

   #uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

   #operator:x:11:0

perator:/root:/sbin/nologin

   #games:x:12:100:games:/usr/games:/sbin/nologin

   #gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

   #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin    #注释掉ftp匿名账号 

  cp /etc/group   /etc/groupbak   #修改之前先备份

  vi /etc/group  #编辑用户组,在前面加上#注释掉此行

  #adm:x:4:root,adm,daemon

  #lp:x:7:daemon,lp

  #uucp:x:14:uucp

  #games:x:20:

  #dip:x:40:

二、关闭系统不需要的服务

使用命令 chkconfig|grep on 检查开机自启动的服务;

abrt-ccpp       0:off   1:off   2:off   3:on    4:off   5:on    6:off

abrtd           0:off   1:off   2:off   3:off   4:off   5:on    6:off

acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off

auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off

blk-availability        0:off   1:on    2:on    3:on    4:on    5:on    6:off

certmonger      0:off   1:off   2:off   3:on    4:on    5:on    6:off

cgconfig        0:off   1:off   2:off   3:off   4:off   5:off   6:off

cpuspeed        0:off   1:on    2:on    3:on    4:on    5:on    6:off

crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off

cups            0:off   1:off   2:on    3:on    4:on    5:on    6:off

haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off

ip6tables       0:off   1:off   2:on    3:off   4:on    5:on    6:off

iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off

irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off

kdump           0:off   1:off   2:off   3:off   4:on    5:on    6:off

lvm2-monitor    0:off   1:on    2:on    3:off   4:on    5:on    6:off

mcelogd         0:off   1:off   2:off   3:on    4:off   5:on    6:off

mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off

messagebus      0:off   1:off   2:on    3:on    4:on    5:on    6:off

netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off

netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off

network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off

portreserve     0:off   1:off   2:on    3:on    4:on    5:on    6:off

postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off

restorecond     0:off   1:off   2:off   3:off   4:off   5:off   6:off

rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off

rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off

rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off

sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off

udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off

服务说明:

auditdThe audit package contains the user space utilities for storing and searching the audit records generate by the audit subsystem in the Linux 2.6 kernel.

blk-availabilityControls availability of LVM2 block devices.

cgconfigStart cgconfigparser.

cgredThis is a daemon for automatically classifying processes into cgroups based on UID/GID.

cpuspeedThis program monitors the system's idle percentage and reduces or raises the CPUs' clock speeds and voltages accordingly to minimize power consumption when idle and maximize perfor-mance when needed.

crondThe daemon to execute scheduled commands.

ip6tablesIt's IPv6 packet filter administration.

iptablesIt's administration tool for IPv4 packet filtering and NAT.

lvm2-monitorMonitor LVM2 with using dmeventd.

netconsoleIt sends printk message from kernel on UDP.

netfsNFS clinet.

networkNetwork system.

postfixSMTP service daemon.

rdiscDetect routers in local subnets.

restorecondIt's the daemon that watches for file creation and then sets the default SELinux file context.

rsyslogIt reads and/or clears kernel message ring buffer; set console_loglevel.

saslauthdsaslauthd is a daemon process that handles plaintext authentication requests on behalf of the SASL library.

sshdOpenSSH sshd daemon.

udev-postMoves the generated persistent udev rules to /etc/udev/rules.d.

(见http://www.server-world.info/en/note?os=CentOS_6&p=initial_conf&f=4)

关闭不必要的服务

  service acpid stop;chkconfig acpid off    #电源进阶设定,常用在 Laptop 上

  service cpuspeed stop;chkconfig  cpuspeed  off   #停用控制CPU速度主要用来省电

  service cups stop;chkconfig cups off    #停用 Common UNIX Printing System 使系统支援印表机

  service ip6tables stop;chkconfig ip6tables off   #禁止IPv6

三、禁止非root用户执行/etc/rc.d/init.d/下的系统命令

  chmod -R 700 /etc/rc.d/init.d/* (chmod -R 755 /etc/rc.d/init.d/*    #恢复默认设置)

四、修改history命令记录

   cp /etc/profile   /etc/profilebak

   vi /etc/profile

   找到 HISTSIZE=1000 改为 HISTSIZE=50

五、调整文件描述符大小

   echo "ulimit -SHn 65535" >> /etc/rc.local

   /etc/security/limits.conf

   *     soft    nofile          65535 

*     hard    nofile          65535

*     soft    stack           unlimited

*     hard    stack           unlimited

六、同步系统时间

  cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

crontab -e

      0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

      chkconfig --list | grep ntp #看下服务情况

      chkconifg ntpd on

      service ntpd start 

七、内核参数优化

vi /etc/sysctl.conf    #末尾添加如下参数  (备注:内核不够熟,加上注解大家谨慎选择使用)

net.ipv4.tcp_syncookies = 1           #1是开启SYN Cookies,当出现SYN 等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,默认是0关闭  net.ipv4.tcp_tw_reuse = 1             #1是开启重用,允许将TIME_AIT sockets重新用于新的TCP连接,默认是0关闭                                                       

net.ipv4.tcp_tw_recycle = 5            #TCP失败重传次数,默认是15,减 少次数可释放内核资源                                                                               

net.ipv4.tcp_max_syn_backlog = 10240    #进入SYN包的最大请求队列,默认 是1024                                                                                             

net.core.netdev_max_backlog =  10240  #允许送到队列的数据包最大设备队 列,默认300                                                                                        

net.core.somaxconn = 2048              #listen挂起请求的最大数量,默认 128                                                                                               

net.core.wmem_default = 8388608        #发送缓存区大小的缺省值                                                                                                           

net.core.rmem_default = 8388608        #接受套接字缓冲区大小的缺省值 (以字节为单位)                                                                                    

net.core.rmem_max = 16777216           #最大接收缓冲区大小的最大值                                                                                                       

net.core.wmem_max = 16777216           #发送缓冲区大小的最大值                                                                                                           

net.ipv4.tcp_synack_retries = 2        #SYN-ACK握手状态重试次数,默认5                                                                                                   

net.ipv4.tcp_syn_retries = 2           #向外SYN握手重试次数,默认4                                                                                                       

net.ipv4.tcp_max_orphans = 3276800     #系统中最多有多少个TCP套接字不 被关联到任何一个用户文件句柄上,如果超出这个数字,孤儿连接将立即复位并打印警告信息                 

net.ipv4.tcp_mem = 94500000 915000000 927000000   

#net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力;                                                                                                                          

#net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段;                                                                                                                         

#net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。内存单位是页,可根据 物理内存大小进行调整,如果内存足够大的话,可适当往上调。上述内存单位是页,而不是字节。             

net.ipv4.ip_local_port_range = 20480  65535  #(表示用于向外连接的端口范围。缺省情况下很小:32768到61000  注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口! 

八、CentOS 系统优化  

      cp  /etc/profile  /etc/profilebak2

      vi /etc/profile      #在文件末尾添加以下内容

      ulimit -c unlimited

      ulimit -s unlimited

      ulimit -SHn 65535   

      source  /etc/profile    #使配置立即生效

      ulimit -a    #显示当前的各种用户进程限制

九、服务器禁止PING

      cp  /etc/rc.d/rc.local  /etc/rc.d/rc.localbak     

      vi  /etc/rc.d/rc.local        #在文件末尾增加下面这一行

      echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all       

      参数0表示允许   1表示禁止

十、去除系统相关信息 

  事先备份到安全的地方哈:) 

  echo "Welcome to Server" >/etc/issue 

  echo "Welcome to Server" >/etc/issue.net

  echo "Welcome to Server" >/etc/redhat-release

十一、SSH服务安全配置

     vi /etc/ssh/sshd_config   

     1. 禁用root远程登录 

  PermitRootLoginno

  PermitEmptyPasswords no #禁止空密码登录 

2.不要支持闲置会话,并配置 Idle Log Out Timeout 间隔:

ClientAliveInterval 600 # (Set to 600 seconds = 10 minutes)

ClientAliveCountMax 0

  3.禁用用户的 .rhosts 文件:

  IgnoreRhosts yes

  4.PasswordAuthentication no

5.配置 iptables,以便在 30 秒内仅允许在端口 2022 上有三个连接尝试:

Redhat iptables example (Update /etc/sysconfig/iptables):

-I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --set

  -I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 3 -j DR

6.ssh安全技巧之更改 SSH 端口

建议改成 10000 以上,以降低扫描到端口的机率。

  Port 18439

7.使用iptables允许特定的主机连接

作为TCP wrappers的一个代替品,你可以使用iptables来限制SSH访问(但可以同时使用这个两个的),这里有一个简单的例子,指出了如何允许一个特定的主机连接到你的SSH服务:

iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT

  保存后重启ssh服务。

十二、添加普通用户并进行sudo授权管理 

  useradd -d /home/goal user (指定home目录与用户名不同)

  passwd user  #设置密码  

  vi /etc/sudoers  #或visudo打开,添加user用户所有权 限  

  root    ALL=(ALL)       ALL

  user    ALL=(ALL)       ALL 

十三、安装安全补丁(经常更新为好)

yum install yum-security

检查安全更新

yum –security check-update

只安装安全更新

yum update –security

检查特定软件有无安全更新

yum list-security software_name

列出更新的详细信息

yum info-security software_name

十四、将 SSH 程序包和需要的库保持为最新:

yum update openssh-server openssh openssh-clients -y

十五、清空防火墙并设置规则

    iptables -F   #清楚防火墙规则

iptables -L   #查看防火墙规则

iptables -A INPUT -p tcp --dport 80 -j ACCEPT  

iptables -A INPUT -p tcp --dport 22 -j ACCEPT  

iptables -A INPUT -p tcp --dport 53 -j ACCEPT  

iptables -A INPUT -p udp --dport 53 -j ACCEPT  

iptables -A INPUT -p udp --dport 123 -j ACCEPT  

iptables -A INPUT -p icmp -j ACCEPT  

iptables -P INPUT DROP  

/etc/init.d/iptables save

十六、配置防火墙以接受仅来自已知网段的 SSH 连接:(慎用:如果那台主机挂了就惨了,这个真是比较安全的)

Update /etc/sysconfig/iptables (Redhat specific file) to accept connection only

from 192.168.100.0/24 and 209.64.100.5/27, enter:

-A RH-FW-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

-A RH-FW-1-INPUT -s 209.64.100.5/27 -m state --state NEW -p tcp --dport 22 -j ACCEPT 

十七、配置 iptables,以便在 30 秒内仅允许在端口 2022 上有三个连接尝试:(不是每个版本都可以,使用时需确认)

Redhat iptables example (Update /etc/sysconfig/iptables):

-I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --set

-I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 3 -j DR

十八、锁定关键文件系统

chattr +i /etc/passwd

chattr +i /etc/inittab

chattr +i /etc/group

chattr +i /etc/shadow

chattr +i /etc/gshadow


【参考资料】

http://blog.chinaunix.net/uid-26430172-id-3387855.html

http://wenku.baidu.com/view/beb4161158fb770bf68a552a.html

http://www.ibm.com/developerworks/cn/aix/library/au-sshsecurity/

http://os.51cto.com/art/200803/68174_all.htm

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/26/3100444.html

http://www.111cn.net/sys/linux/86318.htm

http://www.centoscn.com/CentOS/config/2013/1102/2034.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容