Linux System Reinforcement

目录

1.文件系统及访问权限
2. Linux日志审计
3. 帐号安全管理
4. 基础物理安全
5. 系统编译环境安全
6. 系统病毒、后门、rootkit安全
7. 系统端口、服务安全
8. 系统内核安全

1.文件系统及访问权限

Linux为每个文件都分配了一个文件所有者,称为"文件属主",并赋予文件主惟一的注册名

1. 对文件的控制取决于文件主或超级用户root(linux系统中的root用户有无条件的最高权限)
2. 文件或目录的创建者(属主)对所创建的文件或目录拥有特别使用权
文件的所有关系是可以改变的,文件或目录的所有权可以转让给其它用户,但只有文件主或root用户才有权改变文件的所有关系

linux下文件/目录的权限基本原理如下

1. 文件权限转移
文件的所有权标志是用户ID(UID)。chown命今可以更改某个文件或目录的所有权。例如,超级用户把自己的一个文件拷贝给用户cg,为了让用户cg能够存取这个文件,超级用户(root)应该把这个文件的属主设为cg,否则,用户cg就无法存取这个文件
chown [cfhvR] 用户 或 组[文件1] [文件2]....
    1) 用户可以是用户名或用户ID
    2) 文件是以空格分开的、要改变权限的文件列表,可以用通配符表示文件名
如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限

2. 文件的属主/属组
在Linux下,每个文件又同时属于一个用户组。当创建一个文件或目录时,系统就会赋予它一个用户组关系,用户组的所有成员都可以使用此文件或目录。
文件用户组关系的标志是GID。文件的GID只能由文件主或超级用户(root)来修改。chgrp命令可以改变文件或目录的拥有者或所属群组
chgrp  [cfhRv]  group文件名或目录
    1) group是用户组ID
    2) 文件名是以空格分开的,它支持通配符
Linux系统中的每个文件和目录都有访问许可权限(ACL),用它来确定谁可以通过何种方式对文件和目录进行访问及操作。访问权限规定三种不同类型的用户
    1) 文件主(owner)
    2) 同组用户(group)
    3) 可以访问系统的其它用户(others)
访问权限规定三种访问文件或目录的方式,即
    1) 读(r)
        1.1) 文件
        对于文件,读权限(r)表示只允许指定用户读其内容,而禁止对其做任何的更改操作,将所访问的文件内容作为输入的命令需要有读的权限,例如命令more、head、cat等
        1.2) 目录
        对于目录,读权限(r)可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许shell使用文件扩展名字符列出相匹配的文件名(即ll xxdir | grep xxx)
    2) 写(w)
        2.1) 文件
        写权限(w)表示允许指定用户打开并修改文件,例如命令cp、vi、mv等
        2.2) 目录
        写权限(w)表示允许从目录中删除或添加新的文件,通常只有目录主才有写权限
    3) 可执行(x)
        3.1) 文件
        执行权限(x)允许指定用户将该文件作为一个程序执行。可以使用"ls -l"查看一个文件的详细属性。
        3.2) 目录
        执行权限(x)允许在目录中查找,并能用cd命令将工作目录改到该目录。使用"ls -ld"命令可以查看一个目录的详细属性

Relevant Link:

http://www.cnblogs.com/LittleHann/p/3862652.html
http://www.2cto.com/Article/201205/129787.html

2. Linux日志审计

0x1: 系统级别的日志

Linux的日志文件用来记录整个操作系统使用状况,他们是黑客攻击的重点目标,linux系统中,大部分的日志都保存在/var/log(还有一些例外例如mysql、未读邮件等),所以作为一个Linux网络系统管理员要充分用好以下几个系统日志文件

1. /var/log/boot.log
系统的引导日志

2. /var/log/dmesg
核心(内核)启动日志

3. /var/log/messages: 系统报错日志
messages日志是核心系统日志文件。它包含了大量的运行时信息,例如
    1) 系统启动时的引导消息
    2) IO错误
    3) 网络错误信息
    4) 某个人的身份切换为root
    5) 如果服务正在运行,比如DHCP服务器,您可以在messages文件中观察它的活动
通常,/var/log/messages是我们在做故障诊断时首先要查看的文件 

4. /var/log/maillog
邮件系统日志

5. /var/log/xferlog
FTP系统日志

6. /var/log/secure
记录系统自开通以来所有用户的登录时间和地点,可以给系统管理员提供更多的参考

7. /var/log/wtmp
记录当前和历史上登录到系统的用户的登录时间、地点和注销时间等信息。和/var/log/lastlog一样,这个文件是一个二进制文件,需要用last命令查看
last -f /var/log/wtmp

8. /var/log/spooler
News日志

9. /var/log/rpmpkgs
RPM软件包

10. /var/log/boot.log: 引导日志
记录开机启动讯息,就是Linux系统开机自检过程显示的信息
dmesg | more

11. /var/log/cron: cron(定制任务日志)日志
该日志文件记录crontab守护进程crond所派生的子进程的动作(包括用户、登录时间和PID,以及派生出的进程的动作)
    1) CMD的一个动作是cron派生出一个调度进程的常见情况
    2) REPLACE(替换)动作记录用户对它的cron文件的更新
    3) RELOAD动作在REPLACE动作后不久发生,这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存
该文件可能会查到一些反常的情况

12. /var/log/lastlog
记录最后进入系统的用户信息,包括登录的时间、登录是否成功等信息。这个文件是一个2进制文件,需要用lastlog命令进行读取
    1) lastlog
    查看一下/var/log/lastlog文件中记录的所用账号的最后登录时间,再与自己的用机记录对比一下就可以发现该账号是否被黑客盗用,如果发现在某个时间段有一个自己不认可的帐号的进行了登录,则说明发现了可疑行为
    2) du -h /var/log/lastlog
    查看其lastlog保存空间占用情况
    3) echo "" > /var/log/lastlog
    清空lastlog的日志保存

以上几个文件都是由klogd、和syslogd进行记录的

1. klogd
通常klogd用来记录系统内核所产生的日志信息,也就是工作在系统内核态的进程所产生的日子记录

2. syslogd守护进程进行记录的
syslogd用来记录工作在用户态的进程的日志信息,这些程序包括以下几种进程
    1) 用户进程
    2) 网络服务器进程
    3) 多数的系统守护进程

因此,对于管理人员而言,通过及时检查syslogd记录的信息能够发现绝大多数的系统异常情况

syslogd负责发送、记录系统内核及工具所产生的信息。整个机制由以下几部分共同组成
    1) 系统调用syslog()

    2) 系统守护进程syslogd
    sys1ogd进程在系统启动时由/etc/rc.d/rc2.d/S12syslog启动。如果需要手工启动或停止syslogd,可以使用下面命令:
        2.1) /etc/rc.d/init.d/syslog start | stop

    3) 配置文件/etc/syslog.conf
    通过配置syslog.conf,可以灵活地对信息的发送和保存进行控制

当系统内核及工具产生信息时,通过调用syslog(),把信息送往syslogd,它再根据/etc/syslog.conf中的配置要求,这些信息分别做如下处理

1) 记录到系统日志中
2) 输出到系统控制台上
3) 转发给指定的用户
4) 通过网络转发给其它主机上的syslogd 

0x2: 用户级别的操作日志

1. 特权指令执行记录
除了系统登录记录和syslog记录之外,在linux系统里,使用自己的记录方式。系统每天都会自动检查系统的安全设置, 包括对SetUID、SetGID的执行文件的检查,其结果将输出到/var/log/setuid.today文件中,管理员可以与/var/log/security.yesterday文件对比,寻找系统安全设置的变化。

2. 硬件状态信息
在系统启动的时候,就将内核的检测信息输出到屏幕上,这些信息可以帮助用户分析系统中的硬件状态。一般使用dmesg命令来查看最后一次启动时输出的这个检测信息,这些信息被系统保存在/var/log/dmesg文件中
#cat /var/log/dmesg |more
Linux version 2.6.32-431.23.3.el6.centos.plus.i686 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Jul 29 23:27:50 UTC 2014
KERNEL supported cpus:
  Intel GenuineIntel
  AMD AuthenticAMD
  NSC Geode by NSC
  Cyrix CyrixInstead
  Centaur CentaurHauls
  Transmeta GenuineTMx86
  Transmeta TransmetaCPU
  UMC UMC UMC UMC
Disabled fast string operations
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009f400 (usable)
 BIOS-e820: 000000000009f400 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 000000007fef0000 (usable)
 BIOS-e820: 000000007fef0000 - 000000007feff000 (ACPI data)
 BIOS-e820: 000000007feff000 - 000000007ff00000 (ACPI NVS)
 BIOS-e820: 000000007ff00000 - 0000000080000000 (usable)
 BIOS-e820: 00000000f0000000 - 00000000f8000000 (reserved)
 BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
 BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
 BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
.....

3. Bash Shell执行记录
各种Bash(kshell、cshell)还会记录用户使用的命令历史,使用用户主目录下的文件来记录这些命令历史,通常这个文件的名字为
    1) .bash-history
    2) .history(csh)
    .. 

Relevant Link:

http://blog.chinaunix.net/uid-25120309-id-3359929.html
http://www.liufofu.com/201207524.html
http://blog.chinaunix.net/uid-26569496-id-3199434.html

3. 帐号安全管理

0x1: 账户安全

1. 锁定系统中多余的自建帐号
检查方法: 执行命令
    1) #cat /etc/passwd
      2) #cat /etc/shadow
查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户:bin、sys、adm、uucp、lp、nuucp、hpdb、www、daemon等可根据需要锁定登陆
在进行操作之前,需要与管理员确认此项操作不会影响到业务系统的登录,如果对操作后的风险不确定,则可以采用备份的思路
备份方法:
      1) #cp -p /etc/passwd /etc/passwd_bak
      2) #cp -p /etc/shadow /etc/shadow_bak
加固方法:
      1) 使用命令passwd -l <用户名>锁定不必要的账号
      2) 使用命令passwd -u <用户名>解锁需要恢复的账号
  
2. 设置系统口令策略
检查方法: 执行命令
     1) #cat /etc/login.defs | grep PASS查看密码策略设置
备份方法:
      1) cp -p /etc/login.defs /etc/login.defs_bak
加固方法:
      1) #vi /etc/login.defs修改配置文件
      PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
      PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
      PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
      PASS_MIN_LEN 9 #最小密码长度9
  
3. 禁用root之外的超级用户
检查方法:
      1) #cat /etc/passwd 查看口令文件,口令文件格式如下
备份方法:
      1) #cp -p /etc/passwd /etc/passwd_bak
加固方法:
      1) 使用命令passwd -l <用户名>锁定不必要的超级账户
      2) 使用命令passwd -u <用户名>解锁需要恢复的超级账户  

4. 限制能够su为root的用户
检查方法:
      1) #cat /etc/pam.d/su
    查看是否有auth required /lib/security/pam_wheel.so这样的配置条目
备份方法:
    1) #cp -p /etc/pam.d /etc/pam.d_bak
加固方法:
      1) #vi /etc/pam.d/su
      在头部添加:
      auth required /lib/security/pam_wheel.so group=wheel
      这样,只有wheel组的用户可以su到root
      #usermod -G10 test
    将test用户加入到wheel组
  
5. 检查shadow中空口令帐号
检查方法:
      1) #awk -F: ‘( == "") { print }‘ /etc/shadow
备份方法:
    1) cp -p /etc/shadow /etc/shadow_bak
加固方法:
    1) 对空口令账号进行锁定,或要求增加密码

0x2: 最小化服务

1. 停止或禁用与承载业务无关的服务
检查方法:
      1) runlevel
    查看当前init级别
      2) chkconfig --list
    查看所有服务的状态
备份方法:记录需要关闭服务的名称
加固方法:
      1) #chkconfig --level <服务名> on|off|reset
    设置服务在个init级别下开机是否启动

0x3: 数据访问控制

1. 设置合理的初始文件权限
检查方法:
      1) cat /etc/profile
    查看umask的值
备份方法:
      1) #cp -p /etc/profile /etc/profile_bak
加固方法:
      1) #vi /etc/profile
      umask=027
会修改新建文件的默认权限,如果该服务器是WEB应用,则此项谨慎修改

0x4: 网络访问控制

1. 使用SSH进行管理
检查方法:
      1) ps –aef | grep sshd
    查看有无此服务
备份方法:
加固方法:
      1) 使用命令开启ssh服务
      #service sshd start 

2. 设置访问控制策略限制能够管理本机的IP地址
检查方法:
      1) #cat /etc/ssh/sshd_config
    查看有无AllowUsers的语句
备份方法:
      1) #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
加固方法:
      1) #vi /etc/ssh/sshd_config
    添加以下语句
      AllowUsers *@10.138.*.* 此句意为: 仅允许10.138.0.0/16网段所有用户通过ssh访问
      保存后重启ssh服务
      2) #service sshd restart
值得注意的是,需要和管理员确认能够管理的IP段

3. 禁止root用户远程登陆
检查方法:
      1) #cat /etc/ssh/sshd_config
    查看PermitRootLogin是否为no
备份方法:
      1) #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
加固方法:
      1) #vi /etc/ssh/sshd_config
      PermitRootLogin no
      保存后重启ssh服务
      2) service sshd restart
"禁止root用户远程登陆"带来的直接后果就是root用户无法直接远程登录,需要用普通账号登陆后su

4. 限定信任主机
检查方法:
      1) #cat /etc/hosts.allow
    查看其中的主机
      2) #cat /$HOME/.rhosts
    查看其中的主机
备份方法:
      1) #cp -p /etc/hosts.allow /etc/hosts.allow_bak
      #cp -p /$HOME/.rhosts /$HOME/.rhosts_bak
加固方法:
      1) #vi /etc/hosts.allow
    删除其中不必要的主机
      2) #vi /$HOME/.rhosts
    删除其中不必要的主机 

5. 屏蔽登录banner信息
检查方法:
      1) #cat /etc/ssh/sshd_config
    查看文件中是否存在Banner字段,或banner字段为NONE
      2) #cat /etc/motd
    查看文件内容,该处内容将作为banner信息显示给登录用户。
备份方法:
      1) #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
      2) #cp -p /etc/motd /etc/motd_bak
加固方法:
      1) #vi /etc/ssh/sshd_config
      banner NONE
      2) #vi /etc/motd
      删除全部内容或更新成自己想要添加的内容 

6. 防止误使用Ctrl+Alt+Del重启系统
检查方法:
      1) #cat /etc/inittab | grep ctrlaltdel 查看输入行是否被注释
备份方法:
      1) #cp -p /etc/inittab /etc/inittab_bak
加固方法:
      1) #vi /etc/inittab
      在行开头添加注释符号"#"
      2) #ca::ctrlaltdel:/sbin/shutdown -t3 -r now

0x5: 用户鉴别

1. 设置帐户锁定登录失败锁定次数、锁定时间
检查方法:
      1) #cat /etc/pam.d/system-auth
    查看有无auth required pam_tally.so条目的设置
备份方法:
      1) #cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
加固方法:
      1) #vi /etc/pam.d/system-auth
      auth required pam_tally.so onerr=fail deny=6 unlock_time=300
    设置为密码连续错误6次锁定,锁定时间300秒
      2) 解锁用户 faillog -u <用户名> -r
当系统验证出现问题时,首先应当检查/var/log/messages或者/var/log/secure中的输出信息,根据这些信息判断用户账号的有效性

2. 修改帐户TMOUT值,设置自动注销时间
检查方法:
      1) #cat /etc/profile
    查看有无TMOUT的设置
备份方法:
      1) #cp -p /etc/profile /etc/profile_bak
加固方法:
      1) #vi /etc/profile
      增加
      TMOUT=600
    无操作600秒后自动退出 

3. Grub/Lilo密码
检查方法:
      1) #cat /etc/grub.conf|grep password
    查看grub是否设置密码
      2) #cat /etc/lilo.conf|grep password
    查看lilo是否设置密码
备份方法:
      1) #cp -p /etc/grub.conf /etc/grub.conf_bak
      2) #cp -p /etc/lilo.conf /etc/lilo.conf_bak
加固方法:为grub或lilo设置密码
  
4. 限制FTP登录
检查方法:
      1) #cat /etc/ftpusers
    确认是否包含用户名,这些用户名不允许登录FTP服务(只有你安装了ftp服务才会有这个文件)
备份方法:
      1) #cp -p /etc/ftpusers /etc/ftpusers_bak
加固方法:
      1) #vi /etc/ftpusers
    添加行,每行包含一个用户名,添加的用户将被禁止登录FTP服务

5. 设置Bash保留历史命令的条数
检查方法:
      1) #cat /etc/profile|grep HISTSIZE=
      2) #cat /etc/profile|grep HISTFILESIZE=
    查看保留历史命令的条数
备份方法:
      1) #cp -p /etc/profile /etc/profile_bak
加固方法:
      1) #vi /etc/profile
      修改HISTSIZE=5和HISTFILESIZE=5即保留最新执行的5条命令

0x6: 审计策略

1. 配置系统日志策略配置文件
检查方法:
      1) #ps –aef | grep syslog
    确认syslog是否启用
      2) #cat /etc/syslog.conf
    查看syslogd的配置,并确认日志文件是否存在
          2.1) 系统日志(默认)/var/log/messages
          2.2) cron日志(默认)/var/log/cron
          2.3) 安全日志(默认)/var/log/secure
备份方法:
      1) #cp -p /etc/syslog.conf
  
2. 为审计产生的数据分配合理的存储空间和存储时间
检查方法:
      1) #cat /etc/logrotate.conf
    查看系统轮询配置,有无

4. 基础物理安全

0x1: BIOS
我们应该总是在系统启动的时候设置一个BIOS密码和禁用从CD-ROM和软盘引导。这将防止一些人未经允许访问你的系统和更改BIOS设置

5. 系统编译环境安全

0x1: 禁用代码编译
我们可以禁用代码编译并且只把编译的权限分配给一个用户组
方法:

//1. 添加编译用户组
/usr/sbin/groupadd compiler
//2. 把常见的编译器所属组赋给编译用户组
cd /usr/bin
chgrp compiler *cc*
chgrp compiler *++*
chgrp compiler ld
chgrp compiler as

0x2: .history安全
这是一个避免删除.bash_history或重定向到/dev/null的好方法,目的是禁止清除或删除他最后执行的命令,黑客常常通过删除.history来隐藏自己的攻击痕迹,影响取证
方法:

chattr +a .bash_history
chattr +i .bash_history  

0x3: chmod危险文件

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

0x4: 指定允许root登陆的TTY设备

/etc/securetty文件允许你指定root可以从哪个TTY设备登录
方法:

vi /etc/securetty
//一个好的建议是,只留2个可信的连接
tty1
tty2

Relevant Link:

http://yonghui702.blog.163.com/blog/static/817183420110131102257/

6. 系统病毒、后门、rootkit安全

0x1: 检测Rootkit

关于rootkit的基本原理和防御策略请参阅另外几篇文章

http://www.cnblogs.com/LittleHann/p/3870974.html
http://www.cnblogs.com/LittleHann/p/3879118.html
http://www.cnblogs.com/LittleHann/p/3879961.html

7. 系统端口、服务安全

0x1: 关闭不用的服务

我们应该把任何未使用的服务关闭,可以在/etc/xinetd.d文件夹里找到
方法:

cd /etc/xinetd.d
grep disable *
//这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务

0x2: 检测监听的端口

检测是否有必要开放端口是非常重要的
方法:

netstat -tulp
lsof -i -n | egrep ‘COMMAND|LISTEN|UDP’
nmap!
//这3种方法都可以

8. 系统内核安全

0x1: 内核加固

sysctl.conf用来加固内核,目的是避免DOS和欺骗攻击
方法:

//1. 了解下当前配置的大概情况
sysctl -a
//2. 添加如下内容
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
14
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
15
# 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
//3. 重启后生效
sbin/sysctl -p
sysctl -w net.ipv4.route.flush=1

Copyright (c) 2014 LittleHann All rights reserved

Linux System Reinforcement

时间: 2024-10-08 22:23:37

Linux System Reinforcement的相关文章

Music player on Linux system for classical music: Audacious

The default music player on Debian 7.0 is Rhythmbox. At the first look, its appearance seems not so bad. Although it has the problem of displaying Chinese characters, this can be solved by changing the Exec line in /usr/share/applications/rhythmbox.d

Linux System Programming 学习笔记(八) 文件和目录管理

1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h>

Linux System Programming 学习笔记(十) 信号

1. 信号是软中断,提供处理异步事件的机制 异步事件可以是来源于系统外部(例如用户输入Ctrl-C)也可以来源于系统内(例如除0) 内核使用以下三种方法之一来处理信号: (1) 忽略该信号.SIGKILL和SIGSTOP不能被忽略. (2) 捕捉并且处理该信号.The kernel will suspend execution of the process's current code path and jump to a previously registered function. SIGK

Linux System Programming 学习笔记(五) 进程管理

1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity inside of a process the virtualization of memory is associated with the process, the threads all share the same memory address space 2. pid The idle pro

use entire drive|replace existing linux system|use free space

use entire drive|replace existing linux system|use free space 在装 Linux 的时候,到分割硬盘及格式化硬盘这步的时候,有几个选项,他们的意思及将执行的操作分别是: ( 1 ) Use entire drive (使用整个磁盘) 这个方案会删除硬盘上所有分割区,然后再重新分割硬盘.如果您硬盘上有您想保留的操作系统,请不要选择此项. ( 2 ) Replace exiting Linux system (替换掉现有的 Linux 系统

Linux System Programming 学习笔记(九) 内存管理

1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB 内存页分为 valid or invalid: A valid page is associated with an actual page of data,例如RAM或者磁盘上的文件 An invalid page is

Linux System Programming 学习笔记(七) 线程

1. Threading is the creation and management of multiple units of execution within a single process 二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序 进程是操作系统对 正在执行中的二进制文件的抽象:已加载的二进制.虚拟内存.内核资源 线程是进程内的执行单元 processes are running binaries, threads are the smal

Linux System.map文件【转】

转自:http://blog.csdn.net/ysbj123/article/details/51233618 当运行GNU链接器gld(ld)时若使用了"-M"选项,或者使用nm命令,则会在标准输出设备(通常是屏幕)上打印出链接映像(link map)信息,即是指由链接程序产生的目标程序内存地址映像信息.其中列出了程序段装入到内存中的位置信息.具体来讲有如下信息: 目标文件及符号信息映射到内存中的位置. 公共符号如何放置. 链接中包含的所有文件成员及其引用的符号. 通常我们会把发送

Linux System Programming 学习笔记(十一) 时间

1. 内核提供三种不同的方式来记录时间: Wall time (or real time):actual time and date in the real world Process time:the time that a process spends executing on a processor 包括用户时间user time 和 系统时间system time Monotonic time:use the system's uptime (time since boot) for t