大家都认为 Linux 默认是安全的,我大体是认可的 (这是个有争议的话题)。Linux默认确实有内置的安全模型。你需要打开它并且对其进行定制,这样才能得到更安全的系统。Linux更难管理,不过相应也更灵活,有更多的配置选项。

  对于系统管理员,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。这是我们关于“如何让Linux系统更安全” 或者 “加固Linux系统“之类话题的第一篇文章。本文将介绍 25个有用的技巧和窍门 ,帮助你让Linux系统更加安全。希望下面的这些技巧和窍门可以帮助你加强你的系统的安全。

  1. 物理系统的安全性

  配置BIOS,禁用从CD/DVD、外部设备、软驱启动。下一步,启用BIOS密码,同时启用GRUB的密码保护,这样可以限制对系统的物理访问。

通过设置GRUB密码来保护Linux服务器
  2. 磁盘分区

  使用不同的分区很重要,对于可能得灾难,这可以保证更高的数据安全性。通过划分不同的分区,数据可以进行分组并隔离开来。当意外发生时,只有出问题的分区的数据才会被破坏,其他分区的数据可以保留下来。你最好有以下的分区,并且第三方程序最好安装在单独的文件系统/opt下。

/
/boot
/usr
/var
/home
/tmp
/opt
  3. 最小包安装,最少漏洞

  你真的需要安装所有的服务么?建议不要安装无用的包,避免由这些包带来的漏洞。这将最小化风险,因为一个服务的漏洞可能会危害到其他的服务。找到并去除或者停止不用的服务,把系统漏洞减少到最小。使用‘chkconfig‘命令列出运行级别3的运行所有服务。

# /sbin/chkconfig --list |grep '3:on'
  当你发现一个不需要的服务在运行时,使用下面的命令停止这个服务。

# chkconfig serviceName off
  使用RPM包管理器,例如YUM或者apt-get 工具来列出所有安装的包,并且利用下的命令来卸载他们。

# yum -y remove package-name
# sudo apt-get remove package-name
5 chkconfig Command Examples
20 Practical Examples of RPM Commands
20 Linux YUM Commands for Linux Package Management
25 APT-GET and APT-CACHE Commands to Manage Package Management

  4. 检查网络监听端口

  在网络命令 ‘netstat‘ 的帮助下,你将能够看到所有开启的端口,以及相关的程序。使用我上面提到的 ‘chkconfig‘ 命令关闭系统中不想要的网络服务。

# netstat -tulpn
Linux 网络管理中的 20 条 Netstat 命令
  5. 使用 SSH(Secure Shell)

  Telnet 和 rlogin 协议只能用于纯文本,不能使用加密的格式,这或将导致安全漏洞的产生。SSH 是一种在客户端与服务器端通讯时使用加密技术的安全协议。

  除非必要,永远都不要直接登录 root 账户。使用 “sudo” 执行命令。sudo 由 /etc/sudoers 文件制定,同时也可以使用 “visudo” 工具编辑,它将通过 VI 编辑器打开配置文件。

  同时,建议将默认的 SSH 22 端口号改为其他更高的端口号。打开主要的 SSH 配置文件并做如下修改,以限制用户访问。

# vi /etc/ssh/sshd_config
  关闭 root 用户登录

PermitRootLogin no
  特定用户通过

AllowUsers username
  使用第二版 SSH 协议

Protocol 2
SSH 服务器安全维护五条最佳实践

  6. 保证系统是最新的

  得一直保证系统包含了最新版本的补丁、安全修复和可用内核。

# yum updates
# yum check-update
  7. 锁定 Cron任务

Cron有它自己内建的特性,这特性允许定义哪些人能哪些人不能跑任务。这是通过两个文件/etc/cron.allow 和 /etc/cron.deny 控制的。要锁定在用Cron的用户时可以简单的将其名字写到corn.deny里,而要允许用户跑cron时将其名字加到cron.allow即可。如果你要禁止所有用户使用corn,那么可以将“ALL”作为一行加到cron.deny里。

# echo ALL >>/etc/cron.deny
11 个linux Cron调度实例

  8.  禁止USB探测

很多情况下我们想去限制用户使用USB,来保障系统安全和数据的泄露。建立一个文件‘/etc/modprobe.d/no-usb‘并且利用下面的命令来禁止探测USB存储。

install usb-storage /bin/true
  9.打开SELinux

  SELinux(安全增强linux)是linux内核提供的一个强制的访问控制安全机制。禁用SELinux意味着系统丢掉了安全机制。要去除SELinux之前仔细考虑下,如果你的系统需要发布到网络,并且要在公网访问,你就要更加注意一下。

  SELinux 提供了三个基本的操作模式,他们是:

强制执行:这是默认是模式,用来启用和强制执行SELinux安全措略。
许可模式:这种模式下SELinux不会强制执行安全措略,只有警告和日志记录。这种模式在SELinux相关问题的故障排除时候非常有用。
关闭模式:SELinux被关闭。
  你可以使用命令行‘system-config-selinux‘, ‘getenforce‘ or ‘sestatus‘来浏览当前的SEliux的状态。

# sestatus
  如果是关闭模式,通过下面的命令开启SELinux

# setenforce enforcing
  你也可以通过配置文件‘/etc/selinux/config‘来进行SELinux的开关操作。

  10. 移除KDE或GNOME桌面

  没必要在专用的LAMP服务器上运行X Window桌面比如KDE和GNOME。可以移掉或关闭它们,以提高系统安全性和性能。打开/etc/inittab然后将run level改成3就可以关闭这些桌面。如果你将它彻底的从系统中移走,可以用下面这个命令:

# yum groupremove "X Window System"
  11. 关闭IPv6

  如果不用IPv6协议,那就应该关闭掉它,因为大部分的应用和策略都不会用到IPv6,而且当前它不是服务器必需的。可以在网络配置文件中加入如下几行来关掉它。

# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no
  12. 限制用户使用旧密码

  如果你不希望用户继续使用老密码,这一条很有用。老的密码文件位于 /etc/security/opasswd。你可以使用 PAM 模块实现。

  RHEL / CentOS / Fedora 中打开 ‘/etc/pam.d/system-auth‘ 文件。

# vi /etc/pam.d/system-auth
  Ubuntu/Debian/Linux Mint 中打开 ‘/etc/pam.d/common-password‘ 文件。

# vi /etc/pam.d/common-password
  在 ‘auth‘ 块中添加下面一行。

auth        sufficient    pam_unix.so likeauth nullok
  在 ‘password‘ 块添加下面一行,禁止用户重新使用其过去最后用过的 5个密码。

password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5
  服务器只记录最后的 5 个密码。如果你试图使用曾用的最后 5个老密码中的任意一个,你将看到如下的错误提示。

Password has been already used. Choose another.
  13. 如何检查用户密码过期?

  在 Linux 中,用户的密码以加密的形式保存在 ‘/etc/shadow‘ 文件中。要检查用户的密码是否过期,你需要使用 ‘chage‘ 命令。它将显示密码的最后修改日期及密码期限的细节信息。这些细节就是系统决定用户是否必须修改其密码的依据。

  要查看任一存在用户的老化信息,如 过期日 和 时长,使用如下命令。

#chage -l username
  要修改任一用户的密码老化,使用如下命令。

#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
  参数

-M 设置天数最大数字
-m 设定天数最小数字
-W 设定想要的天数
  14. 手动锁定或解锁用户账号

  锁定和解锁功能是非常有用的,你可以锁定一个账号一周或一个月,而不是将这个账号从系统中剔除。可以用下面这个命令锁定一个特定用户。

# passwd -l accountName
  提示:这个被锁定的用户仅对root用户仍然可见。这个锁定是通过将加密过的密码替换成(!)来实现的。如果有个想用这个账号来进入系统,他会得到类似下面这个错误的提示。

# su - accountName
This account is currently not available.
  解锁一个被锁定的账号时,用下面这个命令。这命令会将被替换成(!)的密码改回来。

# passwd -u accountName
  15. 增强密码

  有相当数量的用户使用很弱智的密码,他们的密码都可以通过字典攻击或者暴力攻击攻破。‘pam_cracklib‘模块存于在PAM 中,它可以强制用户设置复杂的密码。通过编辑器打开下面的文件。

# vi /etc/pam.d/system-auth
  在文件中增加一行,使用认证参数(lcredit, ucredit, dcredit  或者 ocredit 对应小写字母、大写字母,数字和其他字符)

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
  16. 启用Iptable(防火墙)

  高度推荐启用linux防火墙来禁止非法程序访问。使用iptable的规则来过滤入站、出站和转发的包。我们可以针对来源和目的地址进行特定udp/tcp端口的准许和拒绝访问。

Basic IPTables Guide and Tips
  17. 禁止Ctrl+Alt+Delete重启

  在大多数的linux发行版中,按下‘CTRL-ALT-DELETE’将会让你的系统重启。只说生产服务器上这是不是一个很好的做法,这可能导致误操作。

  这个配置是在‘ /etc/inittab‘文件,如果你打开这个文件,你可以看到下面类似的段落。默认的行已经被注释掉了。我们必须注释掉他。这个特定按键会让系统重启。

# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  18. 检查空密码帐号

  任何空密码的账户意味这可以让Web上任何无授权的用户访问,这是linux服务器的一个安全威胁。所以,确定所有的用户拥有一个复杂的密码并且不存在特权用户。空密码帐号是安全风险,可以被轻易的攻克。可以利用下面的命令来检查是否有空密码账户存在。

# cat /etc/shadow | awk -F: '($2==""){print $1}'
  19. 登录前显示SSH提示

  在ssh认证时候,使用一个法律和安全警示是很好的建议。关于SSH警示可以看下面的文章。

Display SSH Warning Message to Users

  20. 监视用户行为

  如果你有很多的用户,去收集每一个用户的行为和和他们的进程消耗的信息非常重要。可以随后和一些性能优化和安全问题处理时进行用户分析。但是如果监视和搜集用户行为信息呢 ?

  有两个很有用的工具‘psacct‘ 和 ‘acct‘可以用来监视系统中用户的行为和进程。这些工具在系统后台执行并且不断记录系统中每一个用户的行为和各个服务比如Apache, MySQL, SSH, FTP, 等的资源消耗。对这些工具更多的安装配置和使用信息,请访问下面的网址:

Monitor User Activity with psacct or acct Commands

  21. 定期查看日志

  将日志移动到专用的日志服务器里,这可避免入侵者轻易的改动本地日志。下面是常见linux的默认日志文件及其用处:

/var/log/message – 记录系统日志或当前活动日志。
/var/log/auth.log – 身份认证日志。
/var/log/kern.log – 内核日志。
/var/log/cron.log – Crond 日志 (cron 任务).
/var/log/maillog – 邮件服务器日志。
/var/log/boot.log – 系统启动日志。
/var/log/mysqld.log – MySQL数据库服务器日志。
/var/log/secure – 认证日志。
/var/log/utmp or /var/log/wtmp :登录日志。
/var/log/yum.log: Yum 日志。
  22. 重要文件备份

  在生产环境里,为了灾难恢复,有必要将重要文件备份并保存在安全的远程磁带保险库、远程站点或异地硬盘。

  23. NIC 绑定

  有两种类型的NIC绑定模式,需要在绑定接口用得到。

mode=0 – 循环赛模式
mode=1 – 激活和备份模式
  NIC绑定可以帮助我们避免单点失败。在NIC绑定中,我们把两个或者更多的网卡绑定到一起,提供一个虚拟的接口,这个接口设置ip地址,并且和其他服务器会话。这样在一个NIC卡down掉或者由于其他原因不能使用的时候,我们的网络将能保持可用。

  相关阅读 : Create NIC Channel Bonding in Linux

  24. 保持 /boot 只读

  linux内核和他的相关的文件都保存在/boot目下,默认情况下是可以读写的。把它设为了只读可以减少一些由于非法修改重要boot文件而导致的风险。

# vi /etc/fstab
  在文件最后增加下面的行,并且保存

LABEL=/boot     /boot     ext2     defaults,ro     1 2
  如果你今后需要升级内核的话,你需要修回到读写模式。

  25.不鸟ICMP和Broadcast请求

  在/etc/sysctl.conf中添加下面几行,屏蔽掉ping和broadcast请求。

Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1

Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1
  运行下面这一行加载修改或更新

#sysctl -p
  如果你觉得了上述安全小贴士很好用,或还有什么其它需要补充进去,请在下面的评论框里写写,不断追求进步的TecMint一如既往地愿意听到您的评论、建议以及讨论。

来自:http://www.admin10000.com/document/2273.html
背景:
  在Linux上或windows上有时接口调用时需要有一个延时(模拟和真实访问一样),于是在windows下和linux下都需要要这样的延时函数。

Windows下延时两秒示例:



Linux下延时两秒示例:
usleep - sleep some number of microseconds 它微妙:


Linux平台延时之sleep、usleep、nanosleep、select比较:
sleep的精度是秒
usleep的精度是微妙,不精确
select的精度是微妙,精确
struct timeval delay;
delay.tv_sec = 0;
delay.tv_usec = 20 * 1000; // 20 ms
select(0, NULL, NULL, NULL, &delay);

nanosleep的精度是纳秒,不精确
unix、linux系统尽量不要使用usleep和sleep而应该使用nanosleep,使用nanosleep应注意判断返回值和错误代码,否则容易造成cpu占用率100%。
上面提到usleep和nanosleep不精确的实验,参见这里:http://www.lslnet.com/linux/dosc1/18/linux-188816.htm
摘自:http://www.cppblog.com/kongque/archive/2011/01/18/138765.aspx
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
其中第一列是打开的句柄数,第二列是进程ID。可以根据ID号来查看进程名:
ps aef|grep 24204

是当前生效还是全局,http://www.linuxde.net/2013/03/13045.html

分析这段代码可以知道先读/etc/security/limits.conf,如果/etc/security/limits.d/目录下还有配置文件的话,也读进来,一起分析。这就意味/etc/security/limits.d/里面的文件里面的配置会覆盖/etc/security/limits.conf的配置。


  一般在/etc/security/limits.conf 中修改最大打开文件数和进程数,如:
    * soft noproc 102400
    * hard noproc 102400
    * soft nofile 102400
    * hard nofile 102400
    但是在centos 6.3下,方法不一样了
    首先在/etc/security/limits.conf中修改最大文件数和进程数
    *   soft   nofile   102400
    
    *   hard  nofile   102400
  
    然后在/etc/security/limits.d/90-nproc.conf中修改最大文件数和进程数
    *   soft   nproc   102400
    *   hard  nproc   102400
  

阅读全文
为了vim更好的支持python写代码,修改tab默认4个空格有两种设置方法:

1. vim /etc/vimrc
set ts=4
set sw=4

举个例子,在多人一起开发项目时,为了使代码风格尽量保持一致,一般不允许在代码使用TAB符,而以4个空格代之。我们可以编辑一个文件,包含下面的内容:
set shiftwidth=4
set expandtab

然后把下面的命令加入到.vimrc中:
autocmd FileType c,cpp set shiftwidth=4 | set expandtab

就可以只在编辑c和cpp文件时实行这种设置了

http://blog.sina.com.cn/s/blog_6f3d37ff0101aat6.html
===========================================
vim显示空格,及tab字符 vim 多行注释(转)
1、显示 TAB 键

文件中有 TAB 键的时候,你是看不见的。要把它显示出来:

:set list

现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字符在哪里。
这样做的一个缺点是在有很多 TAB 的时候看起来很丑。如果你使用一个有颜色的终端,或者使用 GUI 模式,Vim 可以用高亮显示空格和TAB。
使用 ‘listchars’ 选项:

:set listchars=tab:>-,trail:-

现在,TAB会被显示成 ">—" 而行尾多余的空白字符显示成 "-"。看起来好多了,是吧?

————————————————————————————

2、让vim显示行尾的空格

fedora 9系统下
在/etc/vimrc文件添加如下两行
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/

实践证明在centos下的/root/.vimrc里加上也OK,行尾空格变红。-add:2014-10-09

————————————————————————————

http://www.cnblogs.com/chenwenbiao/archive/2011/10/26/2225467.html
背景:前两天对外包的PHP返回慢作了一个xdebug的统计,后来尽管加上了那个rm的crontab,但是后来发现日志依旧在,还是运维发现,上了30G了。
后来查了下crontab的日志文件,发现:


配置:
一:Crontab定时删除,1小时删除一次:


三分钟一清,试过一小时一清,都3G左右大小了:


二:应该是生成的xdebug日志文件太多了造成的(1小时一次有点长了),这个文件删除不了:

出现:Argument list too long。

三:网上找了下,摘录如下:
cache目录,谁知道输入
rm *
的命令后,大概几秒后屏幕就跳出
/bin/rm: argument list too long
条件反射动作,上百度和google查找,找到解决方法和原因,原因是一个文件夹下文件太多,使用rm删除就会出现/bin/rm: Argument list too long错误.
解决方法:http://hintcnuie.javaeye.com/blog/431354
按网址上面写的输入
ls | xargs -n 10 rm -fr ls
就解决了,这句解释为:输出所有的文件名(用空格分割) xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数也就是说将所有文件名10个为一组,由rm -rf删除,这样就不会超过命令行的长度了.
另外找到用脚本的方法:
for loop in `ls 目录路径`
do
rm -f $loop
done
注意:$loop是删除的文件名,确保路径是否正确。
但这个还没有实验过。
来自:http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0614/1538.html
第二种方法:
当某个文件夹下的文件太多,不能使用rm删除
# rm * -rf
-bash: /bin/rm: Argument list too long
网上找了个方法,贴上来给大家分享
find PATH -name *.mp3 -exec rm {} \;
如,要删除 /tmp/123/abc 目录下的
find  /tmp/123/abc ‘*’ -exec rm {} \;
如当前目录为 /tmp/123 ,想删除 /tmp/123/abc 下的
find  ./abc  -name ‘*’ -exec rm {} \;
  大家可以自己试试,不过要小心处理,别删错重要文件了!!!
来自:http://linux.chinaitlab.com/administer/805334.html
https://github.com/tsaleh/vim-align
能满足各种方式的对齐。真心不错呢
背景:
外包把代码放到我们的测试机上,有可能出现这样那样的调用问题,尽管前面说过要注意host配置的问题并记录,但是往往出现在上到测试机时,忘记了,于是用下tcpdump来抓包,可以实现有效的对其跨系统的接口进行跟踪,并找到问题之所在。
零:使用,方法一:
vi /root/.bashrc  

生效:
source /root/.bashrc
方法二(优点这个导出只是传的参数以&符号分割,而返回则全是body里的内容,相当的适合用作接口调试参数,用curl来进行组装访问。):

参考其优点细说在:http://jackxiang.com/post/7344/
特别说明:
tcpdump命令默认捕获包总长度是96字节,如图所示,我们只要在抓包命令里加一个参数 -s 0 即可捕获完整数据的数据包。
/usr/local/sbin/tcpdump -i any -p -s 0 -w /tmp/capture.pcap

一:安装
官网:http://www.tcpdump.org
下载两个包,注意配套,我的是:
http://www.tcpdump.org/release/libpcap-1.4.0.tar.gz
http://www.tcpdump.org/release/tcpdump-4.3.0.tar.gz
Add Time:2014-01-27,上面旧版本没问题,新的有问题:
wget http://www.tcpdump.org/release/tcpdump-4.5.1.tar.gz
wget http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz
1 下载了libpcap-1.5.2.tar.gz。
2 tar -vxf libpcap-1.5.2.tar.gz
3 ./configure
4 make 发生错误。
1)安装:libpcap
cd /data/codesdev/libpcap/libpcap-1.6.1
./configure&&make && make install
理论上一次能过,但是往往会出现新的问题,如下:
[root@master libpcap-1.5.2]# make
gcc -fpic -I.  -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include   -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -g -O2 -c ./pcap-dbus.c
./pcap-dbus.c: In function ‘dbus_write’:
./pcap-dbus.c:111: 错误:‘DBUS_ERROR_INIT’ 未声明 (在此函数内第一次使用)
./pcap-dbus.c:111: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
./pcap-dbus.c:111: 错误:所在的函数内只报告一次。)
./pcap-dbus.c: In function ‘dbus_activate’:
./pcap-dbus.c:165: 错误:‘DBUS_ERROR_INIT’ 未声明 (在此函数内第一次使用)
make: *** [pcap-dbus.o] 错误 1
按装dbus:
http://www.freedesktop.org/wiki/Software/dbus/
问题答案未实践来自:http://bbs.csdn.net/topics/390693013
######################我的情况如下######################
cc -fpic -I.  -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include   -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -g -O2 -c ./pcap-linux.c
gcc -fpic -I.  -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include   -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -g -O2 -c ./pcap-usb-linux.c
gcc -fpic -I.  -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include   -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -g -O2 -c ./pcap-dbus.c
./pcap-dbus.c: In function ‘dbus_write’:
./pcap-dbus.c:111: error: ‘DBUS_ERROR_INIT’ undeclared (first use in this function)
./pcap-dbus.c:111: error: (Each undeclared identifier is reported only once
./pcap-dbus.c:111: error: for each function it appears in.)
./pcap-dbus.c: In function ‘dbus_activate’:
./pcap-dbus.c:165: error: ‘DBUS_ERROR_INIT’ undeclared (first use in this function)
make: *** [pcap-dbus.o] Error 1
#########################################################################
http://dbus.freedesktop.org/releases/dbus/

2)安装tcpdump:
cd /data/codesdev/libpcap/tcpdump-4.6.1
./configure&&make && make install

在centos6.4上安装后如下:
tcpdump --version
tcpdump version 4.6.1
libpcap version 1.6.1
OpenSSL 1.0.1e-fips 11 Feb 2013

二:通过tcpdump抓取HTTP包的方法,实践Ok:
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745 为"GET"前两个字母"GE"
0x4854 为"HTTP"前两个字母"HT"
来自:http://zhumeng8337797.blog.163.com/blog/static/100768914201291110503529/
经过实践是可以的,特别是对接口的调试这一块很是有用,特记录如下:

解释:
0x4745 为"GET"前两个字母"GE"
0x4854 为"HTTP"前两个字母"HT"
实践如下:
[root@localhost ~]# tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854  -w /tmp/capture.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
8 packets captured
8 packets received by filter
0 packets dropped by kernel
[root@localhost ~]# sz /tmp/capture.pcap
[/codes]


三:通过网卡eth1来监听端口80发出去的host包到192.168.109.8的报文:
TcpDump位置: /usr/local/sbin/tcpdump
  
(0)最常用的:

(1)捕获队列的Http请求,不知道是哪个网卡于是得:-i any,根据端口和IP进行捕获:
curl "http://198.168.109.*:1218?charset=utf8&name=playRecord&opt=get",也就是目标是:198.168.109.*
生成如下捕获的tcpdump命令,经测试捕获是Ok的且可以用wireshark打开并查看到http的包:

如监控队列:

(2)加上源地址IP进行捕获:

所有包都截获后sz下来,并用Windows下的wireshark界面进行过滤查看http的包:


实践完全Ok,用wireshark能看到,并能导出:

wireshark界面使用备案Url:http://www.jackxiang.com/post/6262/

四:抓取发往某个指定IP的http get包数据指定文件进行输出package,这个也是下载到Windows下用wireshark界面过滤查看,实践用wireshark能看到:


实践如下:
[root@localhost ~]# tcpdump -XvvennSs 0 -i eth0 port 80 and dst host "192.168.109.8" and tcp[20:2]=0x4745 or tcp[20:2]=0x4854  -w /tmp/capture.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
Got 4

实践用wireshark打开能看到这些ip的http,实践Ok。

五:如何添加编译好的Tcpdump到到环境变量PATH中的方法:
http://www.jackxiang.com/post/1792/

阅读全文
MEMWATCH 由 Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具。只要在代码中添加一个头文件并在 gcc 语句中定义了 MEMWATCH 之后,您就可以跟踪程序中的内存泄漏和错误了。MEMWATCH 支持 ANSI C,它提供结果日志记录,能检测双重释放(double-free)、错误释放(erroneous free)、没有释放的内存(unfreed memory)、溢出和下溢等等。

使用方法:http://hi.baidu.com/nullzone/item/ff7e60fdeae5c0cc521c262d
更多实践:http://hi.baidu.com/gz_gzhao/item/017262f23a5c7008c7dc4563

像Node这样的脚本型也有内存的泄漏问题:
http://www.oschina.net/translate/tracking-down-memory-leaks-in-node-js-a-node-js-holiday-season
进入BIOS设置页面之后,可以找到一个叫“Hardware Monitor”或“PC Health”的选项(如笔者的机器是“Power > Hardware Monitor”。
在BIOS看CPU温度、转速和电压

  点PC Health Status

  CPU Temperature是CPU的温度

  CPU Fan是CPU风扇转速

  System Fan是机箱风扇转速


1、开机时按DEL进入BIOS设置(显示器上有提示进入办法,但多数是按DEL);
2、选择CPU或硬件信息栏(不同型号BIOS显示的不一样,可以一个个都选一遍)。
3、当能看到“CPU temprature”即为CPU当然温度,有些还能看到CPU风扇、系统风扇等的转速。
背景:
     如何更改linux终端显示颜色?深蓝色的目录背景是黑色,很不爽。
有兄弟有现成的调色请稍给兄弟,如:
PS1='[\[\e[32;40m\]\u@\h \w \t]$ '
类似的,目录Ok的,有现成的兄弟,给个出来。
我在群里问很多朋友,都说我这个目录的颜色有点奇怪,他们的蓝色在黑色下面能看得很清楚,也有兄弟建议说修改SecureCRT里的会话选项-外观-窗口和文本外观-当前颜色方案-选:traditional  点编辑:属性,前景/背景对背景颜色作调整。(但我还是喜欢黑色:超级黑,高级黑无限黑,终极黑,极品黑,宇宙黑),【后来我发现有可能是全局选项,本文后面有这个设置,我设置了下感觉不是很符合要求,目录不知道怎么设置,建议以实践为准。】,找了篇文章,感觉和我的想法差不多,先转了再说,试试还成功了。

我的实践成功步骤如下:
1)vi /etc/DIR_COLORS
DIR 01;34       # directory  
定位位置:
FILE 00         # normal file
DIR 01;34       # directory
LINK 01;36      # symbolic link
FIFO 40;33      # pipe

修改为:
DIR 01;36       # directory
2)使改动生效方法:
eval `dircolors /etc/DIR_COLORS`  //命令中的`符号为键盘~符号下面的那个

3)登录生效:如果再登录一次,发现它还是蓝色,不是浅蓝,于是得在登录时实现自动运行,如下。
vi ~/.bashrc


立即生效:source ~/.bashrc  
附录:
Linux登录终端时显示本机IP地址在前面,一样修改~/.bashrc,在虛尾添加:


linux终端中,目录的显示颜色是蓝色,看起来很是不方便。阅读全文
背景: 我也想升级一把,如果直接上6.4,以前6.3里面的vim配置,服务器等重新安,太麻烦了。
-------------------------------------------------------------------------------------------------------------------------------
最后,发现我的那个已经升级了,不用去修改grub,参考:http://tieba.baidu.com/p/2249307319
阅读全文
cat /proc/361/limits |grep files
Max open files            1024                 4096                 files    

一:SecureCRT 自动登录脚本:
常常会登录跳板机,里面的一些用户名和密码每次要重新输入,于是否,这就需要用一些捕获电脑输出(如输入用户名后会提示输入密码)的脚本,如果是自己先在跳板机会,执行脚本也成,这样用快捷键:alt+s R 参数后找到编辑好的脚本后,就可以自动登录到外网,还可以sudo成root等,但这个快捷命令有它的好处,如外面有多台,这时可以把多个自动登陆脚本放到不同文件,用上面的快捷键进行多次,但是只有一台时,用快捷键就有些麻烦,于是否,secureCRT有一个界面供我们使用,如下:
alt + B找到跳板机的那个IP,后在上面点右键,后连接下面有一个登陆动作->选 自动登录,选 上发送初始回车,下面有一行:
预期                                                    发送                                                            隐藏
[xiangdong@localhost ~]                       ssh -l xiangdong 192.168.109.8                       可勾选/不勾选也成
xiangdong@192.168.109.8's password:   xiangdong
[xiangdong@test ~]                             sudo -s
Password:                                           xiangdong
以上就实现了如果登录跳板机,上面的脚本就会执行并自动登陆到外网那一台机器并sudo成root权限。这样一登录跳板机就上了外面的配置机器,极其方便,如果你在全局设置里->常规->默认会话->使用自动会话,添加这个跳板机为打开SecureCRT就自动登录后,更灰常的方便喽,嘿嘿。

注意:在登录xiangdong后有可能会有shell提示:
-bash: ulimit: open files: cannot modify limit: Operation not permitted

-bash: ulimit: open files: cannot modify limit: Operation not permitted
[xiangdong@test ~]

是因为:
vi /etc/profile里有一行:ulimit -n 200000 ,这个句柄权限是不能让我这个权限设置的,于是否,提示权限不够。
这里因java需要大量的句柄,所以修改大了很多,在此点特别备注,后面要捕获的,还是那个:[xiangdong@test ~],即可。
特别注意:这个脚本如果没有捕获到会一直捕获,直到捕获到,或这个shell终端挂掉,否则,再想运行其它脚本时选脚本时会变灰,没法再选。

二、解决普通用户ssh连接linux服务器是总是提示:ulimit: open files: cannot modify limit: Operation not permitted
vi /etc/profile  //这个文件每个用户都会执行它
ulimit -S -c 0 > /dev/null 2>&1  //实践发现这个放在/etc/profile里不会报

//下面这样的如果不以root去执行肯定会报:cannot modify limit: Operation not permitted
ulimit -n 200000
ulimit -HSn 65536                                                                                                                                            
ulimit -HSn 65536
ulimit -n 200000

su 普通用户后:
[xiangdong@localhost ~]$ source /etc/profile
-bash: ulimit: open files: cannot modify limit: Operation not permitted
去掉后就OK了,当时有两个,发现去了还是有,一查才是跳板机上还有一样的问题,再次去掉就好了。
特别注意:有时会有定时脚本会往这个/etc/profile里写,如再次出现得查一下是从哪儿写过来的。
背景:近来发现一内网的IP如:192.168.1.8 这样的,居然可以通过配置另外一个Host进行外网的访问,刚开始以为是Nginx作的反向代理,如果要加一个虚拟机的域名还得再添加一次Nginx的反向代理,也就是添加一个Nginx的反向代理的配置,于是否,也就向运维了解了下情况,说是因F5作了四层代理给那台内网IP了(确定了下:四层),不是用的Nginx,只需要自己在92.168.1.8上加一个域名就可以了,这样一来,就不像Nginx代理那样需要设置一次nginx.conf,并nginx -s reload一下,扯多了,停:这里涉及到四层代理 ,于是就有下面的文章了,如下:

负载均衡设备也常被称为"四到七层交换机",那补充:
所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。
换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;
四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。
===================================================================================================================
所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。
比如四层的负载均衡,就是通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
七层的负载均衡,就是在四层的基础上(不能空中楼阁,没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个WEB服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
么四层和七层两者到底区别在哪里?
负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。
1、负载均衡分为L4 switch(四层交换),即在OSI第4层工作,就是TCP层啦。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:
LVS,F5
2、另一种叫做L7 switch(七层交换),OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子:
haproxy,MySQL Proxy
注意:上面的很多Load Balancer既可以做四层交换,也可以做七层交换。
如果单纯要做HTTP的负载均衡,用haproxy好了。性能很强。
另外,F5和Alteon这样的硬件LB是LVS等软件赶不上。

来自摘抄,其更多内容查看:http://blog.csdn.net/21aspnet/article/details/6583762
__________案例是七层上某个URL访问有问题,而转成4层就好了,也就是说七层上可以对某位上URI作过滤,不让你访问就是____________
TCP(传输层)
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。

IP地址(网络层)
在Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机。为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样,才不至于在传输资料时出现混乱。
Internet的网络地址是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。
我们都已经知道,Internet是由几千万台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。
在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1,这种书写方法叫做点数表示法。


http://www.2cto.com/net/201310/252965.html
DD命令复制磁盘文件:
linux下使用dd命令复制磁盘
# dd if=/dev/sdc of=/dev/sdd bs=2M status=progress



服务器磁盘坏块检查:


badblocks -s -v /dev/sdb  
实践如下:

====================================================
linux dd指令用法中参数bs,count:
bs=600 count=1,备份第一块为600个字节的区域
若显示0+0,表示备份的空间不到一块指定大小的区域.(大小默认好象为512个字节)
bs=512 count=2,备份前2块总共为1024个字节的区域
屏幕上显示2+1,表示备份了2个块,1表示文件被整个备份了
屏幕上显示2+0,表示备份了2个块,0表示文件没被整个备份

cat /tmp/sdbbadblocks.log
774968152 774968153 774968154 774968155 774968900 774968901 774968902 774968903 774969648 774969649 774969650 774969651 774970396 774970397 774970398 774970399 774971144 774971145 774971146 774971147 774971892 774971893 774971894 774971895 774973516 774973517 774973518 774973519
写入:
badblocks -w -f /dev/sda 774968152 774968153 774968154 774968155 774968900 774968901 774968902 774968903 774969648 774969649 774969650 774969651 774970396 774970397 774970398 774970399 774971144 774971145 774971146 774971147 774971892 774971893 774971894 774971895 774973516 774973517 774973518 774973519

badblocks是Linux下常用的坏道修复工具。当你觉得硬盘上可能有坏道,或者是SMART数据显示有坏道的时候,都可以用badblocks来检查一下。

假设我们要检查的硬盘是/dev/sdb

$sudo badblocks -s -v -o sdbbadblocks.log /dev/sdb

这样就可以对硬盘进行只读扫描,自动获取硬盘块数目并扫描全部块,将扫描日志输出到屏幕同时记录在sdbbadblocks.log文件中。

由于扫描速度比较低,一次不一定能扫完,可以分多次进行。

sudo badblocks -s -v -o sdbbadblocks.log /dev/sdb END START

将END和START换成结束和开始的块的编号就可以了。

如果找到了坏道,可以进行写入扫描进行修复。写入扫描遇到坏道的时候会自动重映射。写入扫描会覆盖原有数据,所以请先备份。写入扫描速度很低,所以应该只扫描只读扫描时候发现错误的部分。

$sudo badblocks -w -s /dev/sdb END START

背景:Unix上传文件如果是分块断点上传,需要合并文件,如果是想做测试,需要分割文件。
我們得到了一个文件/root/sdb.bad :

16435904

sdb 有1个坏块

先用dd尽量备份坏块

6.dd if=/dev/sdb bs=4096 skip=16435904 of=/tmp/15435904.dat count=1

如果显示读取字节数是0就多试几次, 不行就可能丢失此块数据, 倒是不用担心,一般不会有太大问题.

用badblocks的写测试功能,对这些坏块进行重写(注意! -w写测试会覆盖数据):

7.badblocks -w -f /dev/sdb2 16435904 16435904

如果前面的操作有成功的备份/tmp/15435904.dat, 就把它写回:

8.dd if=/tmp/15435904.dat of=/dev/sdb seek=15435904 bs=4096 count=1

其实我们不需要等待badblocks扫描完成, 就可以进行修复。

badblocks是对块设备进行处理, 所以可以实现对挂载中的系统进行处理。

在修复前后,利用smartctl 对磁盘进行long测试

# smartctl -l selftest /dev/sdb
阅读全文
分页: 34/40 第一页 上页 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 下页 最后页 [ 显示模式: 摘要 | 列表 ]