Monthly Archives: 9月 2017

9月 28th, 2017

IPTables 包括一组内置和由用户定义规则的「链」,管理员可以在「链」上附加各种数据包处理规则。

  • FILTER 默认过滤表,内建的链有:
    • INPUT:处理流入本地的数据包
    • FORWARD:处理通过系统路由的数据包
    • OUTPUT:处理本地流出的数据包
  • NAT 实现网络地址转换的表,内建的链有:
    • PREROUTING:处理即将接收的数据包
    • OUTPUT:处理本地产生的数据包
    • POSTROUTING:处理即将传出的数据包
  • MANGLE 此表用于改变数据包,共 5 条链:
    • PREROUTING:处理传入连接
    • OUTPUT:处理本地生成的数据包
    • INPUT:处理报文
    • POSTROUTING:处理即将传出数据包
    • FORWARD:处理通过本机转发的数据包

接下来我们将由简入难介绍 25 条 Linux 管理员最常会用到的 IPTables 规则。

1、启动、停止和重启IPTables

虽然 IPTables 并不是一项服务,但在 Linux 中还是可以像服务一样对其状态进行管理。

基于SystemD的系统

systemctl start iptables
systemctl stop iptables
systemctl restart iptables

基于SysVinit的系统

 /etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart
2、查看IPtables防火墙策略

你可以使用如下命令来查看 IPtables 防火墙策略:

 iptables -L -n -v

以上命令应该返回数据下图的输出:

20条IPTables防火墙规则用法!20条IPTables防火墙规则用法!

以上命令是查看默认的 FILTER 表,如果你只希望查看特定的表,可以在 -t 参数后跟上要单独查看的表名。例如只查看 NAT 表中的规则,可以使用如下命令:

 iptables -t nat -L -v –n
3、屏蔽某个IP地址

如果你发布有某个 IP 向服务器导入攻击或非正常流量,可以使用如下规则屏蔽其 IP 地址:

 iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

注意需要将上述的 XXX 改成要屏蔽的实际 IP 地址,其中的 -A 参数表示在 INPUT 链的最后追加本条规则。(IPTables 中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)

如果你只想屏蔽 TCP 流量,可以使用 -p 参数的指定协议,例如:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
4、解封某个IP地址

要解封对 IP 地址的屏蔽,可以使用如下命令进行删除:

 iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

其中 -D 参数表示从链中删除一条或多条规则。

5、使用IPtables关闭特定端口

很多时候,我们需要阻止某个特定端口的网络连接,可以使用 IPtables 关闭特定端口。

阻止特定的传出连接:

 iptables -A OUTPUT -p tcp --dport xxx -j DROP

阻止特定的传入连接:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT
6、使用Multiport控制多端口

使用 multiport 我们可以一次性在单条规则中写入多个端口,例如:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
7、在规则中使用 IP 地址范围

在 IPtables 中 IP 地址范围是可以直接使用 CIDR 进行表示的,例如:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
8、配置端口转发

有时我们需要将 Linux 服务器的某个服务流量转发到另一端口,此时可以使用如下命令:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

上述命令会将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口。

9、屏蔽HTTP服务Flood攻击

有时会有用户在某个服务,例如 HTTP 80 上发起大量连接请求,此时我们可以启用如下规则:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

上述命令会将连接限制到每分钟 100 个,上限设定为 200。

10、禁止PING

对 Linux 禁 PING 可以使用如下规则屏蔽 ICMP 传入连接:

iptables -A INPUT -p icmp -i eth0 -j DROP
11、允许访问回环网卡

环回访问(127.0.0.1)是比较重要的,建议大家都开放:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
12、屏蔽指定MAC地址

使用如下规则可以屏蔽指定的 MAC 地址:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
13、限制并发连接数

如果你不希望来自特定端口的过多并发连接,可以使用如下规则:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

以上规则限制每客户端不超过 3 个连接。

14、清空IPtables规则

要清空 IPtables 链可以使用如下命令:

iptables -F

要清空特定的表可以使用 -t 参数进行指定,例如:

iptables -t nat –F
15、保存IPtables规则

默认情况下,管理员对 IPtables 规则的操作会立即生效。但由于规则都是保存在内存当中的,所以重启系统会造成配置丢失,要永久保存 IPtables 规则可以使用 iptables-save 命令:

iptables-save > ~/iptables.rules

保存的名称大家可以自己改。

16、还原IPtables规则

有保存自然就对应有还原,大家可以使用 iptables-restore 命令还原已保存的规则:

iptables-restore < ~/iptables.rules
17、允许建立相关连接

随着网络流量的进出分离,要允许建立传入相关连接,可以使用如下规则:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

允许建立传出相关连接的规则:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
18、丢弃无效数据包

很多网络攻击都会尝试用黑客自定义的非法数据包进行尝试,我们可以使用如下命令来丢弃无效数据包:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
19、IPtables屏蔽邮件发送规则

如果你的系统不会用于邮件发送,我们可以在规则中屏蔽 SMTP 传出端口:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
20、阻止连接到某块网卡

如果你的系统有多块网卡,我们可以限制 IP 范围访问某块网卡:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

源地址可以是 IP 或 CIDR。

原文来自:https://www.sysgeek.cn/iptables-firewall-rules-examples/

本文地址:http://www.linuxprobe.com/20iptables.html

9月 28th, 2017

CentOS 7 vs CentOS 6的不同
(1)桌面系统
[CentOS6] GNOME 2.x
[CentOS7] GNOME 3.x(GNOME Shell)

(2)文件系统
[CentOS6] ext4
[CentOS7] xfs

(3)内核版本
[CentOS6] 2.6.x-x
[CentOS7] 3.10.x-x

(4)启动加载器
[CentOS6] GRUB Legacy (+efibootmgr)
[CentOS7] GRUB2

(5)防火墙
[CentOS6] iptables
[CentOS7] firewalld

(6)默认数据库
[CentOS6] MySQL
[CentOS7] MariaDB

(7)文件结构
[CentOS6] /bin, /sbin, /lib, and /lib64在/下
[CentOS7] /bin, /sbin, /lib, and /lib64移到/usr下

(8)主机名
[CentOS6] /etc/sysconfig/network
[CentOS7] /etc/hostname

(9)时间同步
[CentOS6]
$ ntp
$ ntpq -p

[CentOS7]
$ chrony
$ chronyc sources

(10)修改时间
[CentOS6]
$ vim /etc/sysconfig/clock
ZONE=”Asia/Tokyo”
UTC=fales
$ sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

[CentOS7]
$ timedatectl set-timezone Asia/Tokyo
$ timedatectl status

(11)修改地区
[CentOS6]
$ vim /etc/sysconfig/i18n
LANG=”ja_JP.utf8″
$ /etc/sysconfig/i18n
$ locale

[CentOS7]
$ localectl set-locale LANG=ja_JP.utf8
$ localectl status

(12)服务相关

1)启动停止
[CentOS6]
$ service service_name start
$ service service_name stop
$ service sshd restart/status/reload

[CentOS7]
$ systemctl start service_name
$ systemctl stop service_name
$ systemctl restart/status/reload sshd

自启动
[CentOS6]
$ chkconfig service_name on/off

[CentOS7]
$ systemctl enable service_name
$ systemctl disable service_name

服务一览
[CentOS6]
$ chkconfig –list

[CentOS7]
$ systemctl list-unit-files
$ systemctl –type service

强制停止
[CentOS6]
$ kill -9 <PID>

[CentOS7]
$ systemctl kill –signal=9 sshd

(13)网络

1)网络信息
[CentOS6]
$ netstat
$ netstat -I
$ netstat -n

[CentOS7]
$ ip n
$ ip -s l
$ ss

2)IP地址MAC地址
[CentOS6]
$ ifconfig -a

[CentOS7]
$ ip address show

3)路由
[CentOS6]
$ route -n
$ route -A inet6 -n

[CentOS7]
$ ip route show
$ ip -6 route show

(14)重启关闭

1)关闭
[CentOS6]
$ shutdown -h now

[CentOS7]
$ poweroff
$ systemctl poweroff

2)重启
[CentOS6]
$ reboot
$ shutdown -r now

[CentOS7]
$ reboot
$ systemctl reboot

3)单用户模式
[CentOS6]
$ init S

[CentOS7]
$ systemctl rescue

4)启动模式
[CentOS6]
[GUICUI]
$ vim /etc/inittab
id:3:initdefault:
[CUIGUI]
$ startx

[CentOS7]
[GUICUI]
$ systemctl isolate multi-user.target
[CUIGUI]
$systemctl isolate graphical.target
默认
$ systemctl set-default graphical.target
$ systemctl set-default multi-user.target
当前
$ systemctl get-default

参考:
http://urashita.com/archives/1538
http://qiita.com/sion_cojp/items/115e1671fcbc8f214aee
https://www.upken.jp/kb/cent6-cent7.html

CentOS 7のWebサーバー構築に関わる変更点

9月 28th, 2017

CentOS Linux 系统默认是打开6个控制台,分别可以用 ALT+F1 到 ALT+F6 进行访问,6个控制台默认都驻留在内存中,用 ps -aux 可以查看:

 

# ps -aux | grep tty

Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ

root 1048 0.0 0.0 1980 484 tty1 ss+ 04:49 0:00 /sbin/mingetty /dev/tty1

root 1050 0.0 0.0 1980 484 tty2 Ss+ 04:49 0:00 /sbin/mingetty /dev/tty2

root 1052 0.0 0.0 1980 484 tty3 Ss+ 04:49 0:00 /sbin/mingetty /dev/tty3

root 1054 0.0 0.0 1980 484 tty4 Ss+ 04:49 0:00 /sbin/mingetty /dev/tty4

root 1056 0.0 0.0 1980 480 tty5 Ss+ 04:49 0:00 /sbin/mingetty /dev/tty5

root 1058 0.0 0.0 1980 476 tty6 Ss+ 04:49 0:00 /sbin/mingetty /dev/tty6

root 1133 0.0 0.1 4328 728 pts/0 S+ 05:44 0:00 grep tty

 

事实上没必要需要使用这么多,CentOS 6.0 开始 TTY 的配置由 /etc/inittab 更改为 /etc/init/start-ttys.conf,执行以下命令可将默认6个 TTY 改为2个:

 

找到 tty [1-6] 改成 tty [1-2]

 

# vim /etc/init/start-ttys.conf

#

# This service starts the configured number of gettys.

start on stopped rc runlevel=[2345]

env ACTIVE_CONSOLES=/dev/tty[1-2]

env X_TTY=/dev/tty1

task

script

. /etc/sysconfig/init

for tty in $(echo $ACTIVE_CONSOLES) ; do

[ “$RUNLEVEL” = “5” -a “$tty” = “$X_TTY” ] && continue

initctl start tty TTY=$tty

done

end script

 

在打开 /etc/sysconfig/init

 

找到

 

ACTIVE_CONSOLES=/dev/tty[1-6]

 

修改为:

 

ACTIVE_CONSOLES=/dev/tty[1-2]

 

重启即可!

TAGS: ,
9月 28th, 2017
当你查看你的 SSH 服务日志,可能你会发现充斥着一些不怀好意的尝试性登录。这里有 5 条常规建议(和一些个别特殊策略)可以让你的 OpenSSH 会话更加安全。
强化密码登录

密码登录很方便,因为你可以从任何地方的任何机器上登录。但是它们在暴力攻击面前也是脆弱的。尝试以下策略来强化你的密码登录。

  • 使用一个密码生成工具,例如 pwgen。pwgen 有几个选项,最有用的就是密码长度的选项(例如,pwgen 12产生一个12位字符的密码)
  • 不要重复使用密码。忽略所有那些不要写下你的密码的建议,然后将你的所有登录信息都记在一个本子上。如果你不相信我的建议,那总可以相信安全权威 Bruce Schneier 吧。如果你足够细心,没有人能够发现你的笔记本,那么这样能够不受到网络上的那些攻击。
  • 你可以为你的登录记事本增加一些额外的保护措施,例如用字符替换或者增加新的字符来掩盖笔记本上的登录密码。使用一个简单而且好记的规则,比如说给你的密码增加两个额外的随机字符,或者使用单个简单的字符替换,例如 “#” 替换成 “*”。
  • 为你的 SSH 服务开启一个非默认的监听端口。是的,这是很老套的建议,但是它确实很有效。检查你的登录;很有可能 22 端口是被普遍攻击的端口,其他端口则很少被攻击。
  • 使用 Fail2ban 来动态保护你的服务器,是服务器免于被暴力攻击。
  • 使用不常用的用户名。绝不能让 root 可以远程登录,并避免用户名为“admin”。
解决 Too Many Authentication Failures 报错

当我的 ssh 登录失败,并显示“Too many authentication failures for carla”的报错信息时,我很难过。我知道我应该不介意,但是这报错确实很碍眼。而且,正如我聪慧的奶奶曾经说过,伤痛之感并不能解决问题。解决办法就是在你的(客户端的)

~/.ssh/config

文件设置强制密码登录。如果这个文件不存在,首先创个

~/.ssh/

目录。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

然后在一个文本编辑器创建

~/.ssh/confg

文件,输入以下行,使用你自己的远程域名替换 HostName。

HostName remote.site.com
PubkeyAuthentication=no

(LCTT 译注:这种错误发生在你使用一台 Linux 机器使用 ssh 登录另外一台服务器时,你的 .ssh 目录中存储了过多的私钥文件,而 ssh 客户端在你没有指定 -i 选项时,会默认逐一尝试使用这些私钥来登录远程服务器后才会提示密码登录,如果这些私钥并不能匹配远程主机,显然会触发这样的报错,甚至拒绝连接。因此本条是通过禁用本地私钥的方式来强制使用密码登录——显然这并不可取,如果你确实要避免用私钥登录,那你应该用 -o PubkeyAuthentication=no 选项登录。显然这条和下两条是互相矛盾的,所以请无视本条即可。)

使用公钥认证

公钥认证比密码登录安全多了,因为它不受暴力密码攻击的影响,但是并不方便因为它依赖于 RSA 密钥对。首先,你要创建一个公钥/私钥对。下一步,私钥放于你的客户端电脑,并且复制公钥到你想登录的远程服务器。你只能从拥有私钥的电脑登录才能登录到远程服务器。你的私钥就和你的家门钥匙一样敏感;任何人获取到了私钥就可以获取你的账号。你可以给你的私钥加上密码来增加一些强化保护规则。

使用 RSA 密钥对管理多个用户是一种好的方法。当一个用户离开了,只要从服务器删了他的公钥就能取消他的登录。

以下例子创建一个新的 3072 位长度的密钥对,它比默认的 2048 位更安全,而且为它起一个独一无二的名字,这样你就可以知道它属于哪个服务器。

$ ssh-keygen -t rsa -b 3072 -f id_mailserver

以下创建两个新的密钥,

id_mailserver

id_mailserver.pub
id_mailserver

是你的私钥–不要传播它!现在用

ssh-copy-id

命令安全地复制你的公钥到你的远程服务器。你必须确保在远程服务器上有可用的 SSH 登录方式。

$ ssh-copy-id -i  id_rsa.pub user@remoteserver

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
user@remoteserver's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user@remoteserver'"
and check to make sure that only the key(s) you wanted were added.

ssh-copy-id 会确保你不会无意间复制了你的私钥。从上述输出中复制登录命令,记得带上其中的单引号,以测试你的新的密钥登录。

$ ssh 'user@remoteserver'

它将用你的新密钥登录,如果你为你的私钥设置了密码,它会提示你输入。

取消密码登录

一旦你已经测试并且验证了你的公钥可以登录,就可以取消密码登录,这样你的远程服务器就不会被暴力密码攻击。如下设置你的远程服务器

/etc/sshd_config

文件。

PasswordAuthentication no

然后重启服务器上的 SSH 守护进程。

设置别名 — 这很快捷而且很酷

你可以为你的远程登录设置常用的别名,来替代登录时输入的命令,例如

ssh -u username -p 2222 remote.site.with.long-name

你可以使用

ssh remote1

你的客户端机器上的 ~/.ssh/config文件可以参照如下设置

Host remote1
HostName remote.site.with.long-name
Port 2222
User username
PubkeyAuthentication no

如果你正在使用公钥登录,可以参照这个:

Host remote1
HostName remote.site.with.long-name
Port 2222
User username
IdentityFile  ~/.ssh/id_remoteserver

OpenSSH 文档 很长而且详细,但是当你掌握了基础的 SSH 使用规则之后,你会发现它非常的有用,而且包含很多可以通过 OpenSSH 来实现的炫酷效果。

原文来自:https://linux.cn:443/article-7683-1.html

本文地址:http://www.linuxprobe.com/five-safety-advice.html

TAGS: ,
9月 28th, 2017

命令解释


  • Linux系统可以通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高.

  • 使用SSHClient客户端连接到远程Linux系统。使用top命令查看系统的当前运行的情况。如图对top命令执行的结果做了简单的图解,下面针对每一项做详细的解释。

  • top命令的第一行“top – 19:56:47 up 39 min, 3 users, load average: 0.00, 0.00, 0.00”显示的内容依次为“系统当前时间 、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15分钟前到现在的平均值【这三个一般会小于1,如果持续高于5,请仔细查看那个程序影响系统的运行】”

  • top命令的第二行“Tasks: 120 total, 2 running, 118 sleeping, 0 stopped, 0 zombie”显示的内容依次“所有启动的进程数”、“正在运行的进程数”、“挂起的进程数”、“停止的进程数”、“僵尸进程数”。

  • top命令的第三行“Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st”显示的内容依次为“用户空间占用CPU百分比”、“内核空间占用CPU百分比”、“用户空间内改变过优先级的进程占用CPU百分比”、“空闲CPU百分比”、“等待输入输出CPU时间百分比”、“CPU服务于硬件中断所耗费的时间总额”、“CPU服务软中断所耗费的时间总额”、“Steal Time

  • top命令第四行“Mem: 508820k total, 480172k used, 28648k free, 41944k buffers”显示内容依次为“物理内存总量”、“已使用的物理内存”、“空闲物理内存”、“内核缓存内存量”。

  • top命令第5行“Swap: 392184k total, 0k used, 392184k free, 259152k cached”显示内容依次为“交换区总量”、“已使用交互区总量”、“空闲交换区总量”、“缓冲的交换区总量”。

  • top命令第5行“PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ”显示内容依次为“进程ID”、“进程所有者”、“优先级”、“nice值,负值表示高优先级,正值表示低优先级”、“进程使用的虚拟内存总量”、“进程使用的、未被换出的物理内存大小”、“共享内存大小”、“进程状态”、“上次更新到现在的CPU时间占用百分比”、“进程使用的物理内存百分比”、“进程使用CPU总时间”、“命令名、命令行”。

 

 

常用操作

top   //每隔5秒显式所有进程的资源占用情况
top -d 2  //每隔2秒显式所有进程的资源占用情况
top -c  //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
TAGS: ,
9月 28th, 2017

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数

# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

 

# 查看物理CPU个数cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l

 

# 查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep “cpu cores”| uniq

 

# 查看逻辑CPU的个数cat /proc/cpuinfo| grep “processor”| wc -l

  1. 查看CPU的主频
    #cat /proc/cpuinfo |grep MHz|uniq

 

uname -a

Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux

(查看当前操作系统内核信息)

 

cat /etc/issue | grep Linux

Red Hat Enterprise Linux AS release 4 (Nahant Update 5)

(查看当前操作系统发行版信息)

 

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

8  Intel(R) Xeon(R) CPU            E5410   @ 2.33GHz

(看到有8个逻辑CPU, 也知道了CPU型号)

 

cat /proc/cpuinfo | grep physical | uniq -c

4 physical id      : 0

4 physical id      : 1

(说明实际上是两颗4核的CPU)

 

getconf LONG_BIT

32

(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

 

cat /proc/cpuinfo | grep flags | grep ‘ lm ‘ | wc -l

8

(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

 

 

 

 

 

如何获得CPU的详细信息:

linux命令:cat /proc/cpuinfo

用命令判断几个物理CPU,几个核等:

逻辑CPU个数:
# cat /proc/cpuinfo | grep “processor” | wc -l

物理CPU个数:
# cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l

每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep “cpu cores” | wc -l

是否为超线程?
如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。

每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep “siblings”

 

TAGS: ,
9月 28th, 2017

1.      首先挂载CentOS6.5镜像

mkdir/mnt/cdrom

mount/dev/cdrom /mnt/cdrom

2.      修改repo文件

Vi/etc/yum.repos.d/yum.repo

[local]

Name=local

Baseurl=file:///mnt/cdrom/Server

Enabled=1

Gpgcheck=0

3.      Yum clean all

Yum install gcc*

 

4.      卸载系统自带的openssh,卸载之前先停止sshd服务,再用rpm删除,同时清除系统/etc/ssh目录

[root@CentOS tmp]# service sshd stop

Stopping sshd:                                            [  OK  ]

[root@CentOS tmp]# rpm -qa openssh

openssh-5.3p1-94.el6.x86_64

[root@CentOS tmp]# rpm -e –nodeps openssh-server

[root@CentOS tmp]# rpm -e –nodeps openssh-clients

[root@CentOS tmp]# rpm -e –nodeps openssh-askpass

[root@CentOS tmp]# rpm -e–nodeps openssh

[root@CentOS tmp]# rm -rf /etc/ssh

重启!!!

5.      上传zlib,安装zlib

[root@CentOS tmp]# tar -xvf zlib-1.2.8.tar.gz

[root@CentOS tmp]# cd zlib-1.2.8

[root@CentOS zlib-1.2.8]# ./configure –prefix=/usr/local/zlib &&make && make install

 

6.      上传openssl文件,解压,文件夹下打开console

./config –prefix=/usr/local/openssl && make && make install

 

7.      上传openssh文件,解压,

./configure–prefix=/usr/ –sysconfdir=/etc/ssh –with-ssl-dir=/usr/local/openssl–with-zlib=/usr/local/zlib –with-md5-passwords –without-hardening &&make && make install

 

8.      修改配置文件

[root@CentOSopenssh-6.6p1]# cp contrib/redhat/sshd.init /etc/init.d/sshd

[root@CentOSopenssh-6.6p1]# chmod +x /etc/init.d/sshd 一般自带x权限

不用再修改文件了

[root@CentOSopenssh-6.6p1]#rpm -qa openssh

openssh-5.3p1-122.el6.x86_64

9.      加入到系统服务

 

[root@CentOSopenssh-6.6p1]# chkconfig –add sshd

[root@CentOSopenssh-6.6p1]# service sshd start

 

10.   检查版本

ssh -V   注意大写

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

TAGS: ,
9月 28th, 2017

VNC( Virtual Network Computing)允许Linux系统,实现可以像Windows中的远程桌面访问那样访问Linux桌面。本文配置是在rhel7.3服务器环境下运行。

首先查看服务器是否安装了VNC

[root@test ~]# rpm -qa tigervnc tigervnc-server

没安装的话会直接出现

package tigervnc is not installed

package tigervnc-server is not installed

如果没有安装X-Windows 桌面的话要先安装Xwindows,VNC需要服务器运行在图形界面。

[root@test ~]# yum check-update

[root@test ~]# yum groupinstall “X Window System”

[root@test ~]# yum install gnome-classic-session gnome-terminal nautilus-open-terminal

control-center liberation-mono-fonts

[root@test ~]# unlink /etc/systemd/system/default.target

[root@test ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

[root@test ~]# reboot

1、安装VNC packages:

[root@test ~]# yum install -y tigervnc-server

2、修改配置信息,在/etc/systemd/system/下建立文件夹vncserver@:1.service

把example config 文件从/lib/systemd/system/vncserver@.service复制过来

[root@test ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

然后打开这个配置文件/etc/systemd/system/vncserver@:1.service,替换掉默认用户名

将这行里的USER

ExecStart=/sbin/runuser -l <USER> -c “/usr/bin/vncserver %i”

PIDFile=/home/<USER>/.vnc/%H%i.pid

替换成root

ExecStart=/sbin/runuser -l root -c “/usr/bin/vncserver %i”

PIDFile=/root/.vnc/%H%i.pid

如果是其他用户的话,将USER替换即可

ExecStart=/sbin/runuser -l <USER> -c “/usr/bin/vncserver %i”

PIDFile=/home/<USER>/.vnc/%H%i.pid

3、重加载 systemd

[root@test ~]# systemctl daemon-reload

4、为VNC设置密码

[root@test ~]# vncpasswd

如果有iptable防火墙的话,可以放行VNC的端口

vim /etc/sysconfig/iptables

在合适位置加上

-A INPUT -m state –state NEW -m tcp -p tcp –dport 5900:5903 -j ACCEPT

然后重启iptable

service iptables restart

如果是用rhel 7.3 默认防火墙,则需要

[root@test~]# firewall-cmd –permanent –add-service vnc-server

[root@test~]# systemctl restart firewalld.service

5、设置默认启动并开启VNC

[root@test ~]# systemctl enable vncserver@:1.service

[root@test ~]# systemctl start vncserver@:1.service

这样就配置好了,然后在Windows 客户端下载一个VNC Viewer 的软件,就可以VNC图形远程连接了。

TAGS: ,
9月 28th, 2017

在虚拟化环境中使用 VAAI ATS 检测信号时,ESXi 5.5 Update 2 或 ESXi 6.0 主机失去与 VMFS5 数据存储的连接,会造成ESXI失联,但其上的虚拟机仍可以PING通,业务不受影响,但有一定延时。

    要解决此问题,可以通过在 ESXi 内核中禁用 ATS 检测信号,将检测信号相关的活动恢复为旧方法。

对于 VMFS5 数据存储

1、首先登陆exsi的命令行

执行
# esxcli system settings advanced set -i 0 -o /VMFS3/UseATSForHBOnVMFS5

禁用ATS

2、查询状态

[root@CP05I1008:~] esxcli system settings advanced list -o /VMFS3/UseATSForHBonVMFS5
Path: /VMFS3/UseATSForHBOnVMFS5
Type: integer
Int Value: 0
Default Int Value: 1
Min Value: 0
Max Value: 1
String Value:
Default String Value:
Valid Characters:
Description: Use ATS for HB on ATS supported VMFS5 volumes

启用ATS

# esxcli system settings advanced set -i 1 -o /VMFS3/UseATSForHBOnVMFS5

对于 VMFS3 数据存储

禁用ATS

# esxcli system settings advanced set -i 0 -o /VMFS3/UseATSForHBOnVMFS3

查询状态

[root@CP05I1009:~] esxcli system settings advanced list -o /VMFS3/UseATSForHBonVMFS3
Path: /VMFS3/UseATSForHBOnVMFS3
Type: integer
Int Value: 0
Default Int Value: 1
Min Value: 0
Max Value: 1
String Value:
Default String Value:
Valid Characters:
Description: Use ATS for HB on ATS supported VMFS3 volumes

启用ATS

# esxcli system settings advanced set -i 1 -o /VMFS3/UseATSForHBOnVMFS3

下面是禁用 ATS 检测信号处理的影响:

  • 不会影响获取 HB 插槽(启动检测信号)。
  • 此更改会影响定期/常规检测信号更新。
  • 使用普通 SCSI 读取和写入恢复 ESXi 主机中的检测信号相关活动,以更新其在 VMFS 数据存储上的检测信号。

注意

  • 此更改会立即生效,无需重新引导。
  • 无论 VMFS 版本为何,这些选项的根节点均为/VMFS3。选项的最后一个字符与相应的 VMFS 版本匹配。
9月 28th, 2017

背景

平时与开发交流,或在论坛回答问题时,发现这个问题被问及的频率非常高,例如: 程序中报错“MySQL server has gone away”是什么意思? 如何避免? 因此,感觉有必要总结一下发生这个问题的原因。

正好看到一篇外文blog总结的比较好,就翻译过来了,分享给大家。

原因一: MySQL 服务宕了

判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长:

  1. $ mysql -uroot -p -e “show global status like ‘uptime’;”+—————+——-+
  2. | Variable_name | Value |
  3. +—————+——-+
  4. | Uptime | 68928 |
  5. +—————+——-+
  6. 1 row in set (0.04 sec)

或者查看MySQL的报错日志,看看有没有重启的信息:

  1. $ tail /var/log/mysql/error.log
  2. 130101 22:22:30 InnoDB: Initializing buffer pool, size = 256.0M
  3. 130101 22:22:30 InnoDB: Completed initialization of buffer pool
  4. 130101 22:22:30 InnoDB: highest supported file format is Barracuda.
  5. 130101 22:22:30 InnoDB: 1.1.8 started; log sequence number 63444325509
  6. 130101 22:22:30 [Note] Server hostname (bind-address): ‘127.0.0.1’; port: 3306
  7. 130101 22:22:30 [Note]   – ‘127.0.0.1’ resolves to ‘127.0.0.1’;
  8. 130101 22:22:30 [Note] Server socket created on IP: ‘127.0.0.1’.
  9. 130101 22:22:30 [Note] Event Scheduler: Loaded 0 events
  10. 130101 22:22:30 [Note] /usr/sbin/mysqld: ready for connections.
  11. Version: ‘5.5.28-cll’  socket: ‘/var/lib/mysql/mysql.sock’  port: 3306  MySQL Community Server (GPL)

如果uptime数值很大,表明MySQL服务运行了很久了,说明最近服务没有重启过。 如果日志没有相关信息,也说明MySQL服务最近没有重启过,可以继续检查下面几项内容。

原因2:连接超时

如果程序使用的是长连接,则这种情况的可能性会比较大。 即某个长连接很久没有发起新的请求,达到了server端的time out,被server强行关闭。此后再通过这个client发起查询的时候,就会报错server has gone away。

  1. $ mysql -uroot -p -e “show global variables like ‘%timeout’;”+—————————-+———-+
  2. | Variable_name | Value |
  3. +—————————-+———-+
  4. | connect_timeout | 30 |
  5. | delayed_insert_timeout | 300 |
  6. | innodb_lock_wait_timeout | 50 |
  7. | innodb_rollback_on_timeout | OFF |
  8. | interactive_timeout | 28800 |
  9. | lock_wait_timeout | 31536000 |
  10. | net_read_timeout | 30 |
  11. | net_write_timeout | 60 |
  12. | slave_net_timeout | 3600 |
  13. | wait_timeout | 28800 |
  14. +—————————-+———-+mysql> SET SESSION wait_timeout=5;#Wait 10 secondsmysql> SELECT NOW();
  15. ERROR 2006 (HY000): MySQL server has gone away
  16. No connection. Trying to reconnect…
  17. Connection id: 132361
  18. Current database: *** NONE ***+———————+
  19. | NOW() |
  20. +———————+
  21. | 2013-01-02 11:31:15 |
  22. +———————+
  23. 1 row in set (0.00 sec)

原因3: 进程在server端被主动kill

这种原因和第2种原因比较相似,只是发起者是DBA,或者其他job,发现有长时间的慢查询执行kill xxx导致。

  1. $ mysql -uroot -p -e “show global status like ‘com_kill'”+—————+——-+
  2. | Variable_name | Value |
  3. +—————+——-+
  4. | Com_kill | 0 |
  5. +—————+——-+

原因4: Your SQL statement was too large

当查询的结果集超过 max_allowed_packet 也会出现这样的报错,定位方法是打出相关报错的语句。 用select*into outfile 的方式导出到文件,查看文件大小是否超过max_allowed_packet,如果超过则需要调整参数,或者优化语句。

  1. mysql> show global variables like ‘max_allowed_packet’;
  2. +——————–+———+
  3. | Variable_name | Value |
  4. +——————–+———+
  5. | max_allowed_packet | 1048576 |
  6. +——————–+———+
  7. 1 row in set (0.00 sec)# 修改参数:mysql> set global max_allowed_packet=1024*1024*16;mysql> show global variables like ‘max_allowed_packet’;
  8. +——————–+———-+
  9. | Variable_name | Value |
  10. +——————–+———-+
  11. | max_allowed_packet | 16777216 |
  12. +——————–+———-+
  13. 1 row in set (0.00 sec)
TAGS: