服务器|云|数据中心

服务器|云主机|vps|站群

相比 Windows 为什么越来越多人选择Linux?

在使用 Linux 之前,我想大家最先接触的都应该是 Windows 吧,但是一般接触过 Linux 之后,在回过头来使用 windows 是内心是十分拒绝的,大多数人产生这个原因到底是为什么呢?

Linux 是一个很神奇的系统,有很多值得我们,需要我们去探索的地方,对于服务器运维的人来说,在为服务器选择操作系统系统的时候,是选择 Linux 还是 Windows 是让人困惑的事?

当然,在你成为一个 Linux 重度爱好者的时候,你就会发现,对于 Linux 真是欲罢不能!

从用户群来说 Linux 是一个以开发者为中心的操作系统,而 Windows 是以消费者为中心的操作系统,这也是两个操作系统作为根本的区别。简单来讲,两个系统的选择就是看你是开发用还是作为消费者使用。

不管是 Windows 操作系统、Linux 系统还是苹果操作系统,甚至包括操作系统的鼻祖 Unix 操作系统,最早都是用 C 语言编写的。

那么为什么那么多人选择学习 Linux,我们来看看 Linux 的众多优点:

提到 linux 的优点,首先就是他的开源;任何人都是可以查看他的源代码的,而 windows 则不开源,所以你要经常的打补丁,修补漏洞之类的。

其次 Linux 的安全性非常高,漏洞修补快速 ;

丰富的软件支持;与其他的操作系统不同的是,安装了 Linux 系统后,用户常用的一些办公软件、图形处理工具、多媒体播放软件和网络工具等都已无需安装。而对于程序开发人员来说,Linux 更是一个很好的操作平台,在 Linux 的软件包中,包含了多种程序语言与开发工具,如 gcc、cc、C++、Tcl/Tk、Perl、Fortran77 等。

第四,多任务,多用户;与 Unix 系统一样,Linux 系统是一个真正的多用户多任务操作系统。多个用户可以在不相互影响的情况下拥有和使用系统资源,同时多个用户可以网络在线的方式使用计算机系统。多任务处理是现代计算机最重要的特点之一。由于 Linux 系统以同等的权限调度每个进程,它可以同时执行多个程序,并且每个程序的运行是相互独立的。您可以在 Linux 主机上规划不同级别的用户,每个用户都可以在不同的环境中登录到系统。此外,还可以允许不同的用户同时登录到主机,以使用主机的资源!

第五,相对较少的系统资源占用 :这是最吸引眼球的地方,目前市面上任何一款个人计算机都可以达到使用 Linux 搭建一个服务上百人以上的主机

在阅读了这篇文章之后,你应该对 Linux 和 Windows 有了新的理解,所以当你把操作系统作为开发人员而不是消费者时,你会更喜欢 Linux,而今天的 Linux 操作和维护已经成为比较流行的职业。如果你想在服务器的操作和维护中开发,选择 Linux 仍然是很好的选择。

Linux类Tcping端口连接检测工具

1. nc命令简介

NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

netcat简介

以CentOS7.5最小安装版为例,默认情况下系统并没有集成nc工具集,需要手动安装它:

  1. [root@zcwyou ~]# yum install -y nmap-ncat

2. 测试192.168.1.1的TCP80端口是否可以正常连接

  1. [root@zcwyou ~]# nc -v -w 1 192.168.1.1 -z 80
    • Ncat: Version 7.50
    • Ncat: Connected to 192.168.1.1:80.
    • Connected表示连接成功。

linux使用netcat命令检测TCP80端口是否可以正常连接

试试连接81端口

  1. [root@zcwyou ~]# nc -v -w 1 192.168.1.1 -z 81
  • Ncat: Version 7.50
  • Ncat: Connection refused.
  • Connection refused.连接拒绝,表示对方没有打开81端口或者中间防火墙不允许81端口。

3. 使用nc传输文件

大部分时间中,我们都在试图通过网络或者其他工具传输文件。有很多种方法,比如FTP,SCP,SMB等等,但是当你只是需要临时或者一次传输文件,真的值得浪费时间来安装配置一个软件到你的机器上嘛。假设,你想要传一个文件zcwyou.txt 从A到B。A或者B都可以作为服务器或者客户端,以下,让A作为服务器,B为客户端。

Server端配置

  1. [root@zcwyou ~]# nc -l 1567 < zcwyou.txt

Client

  1. [root@zcwyou ~]# nc -n 172.31.100.7 1567 > zcwyou.txt

原理:Server端把zcwyou.txt输入到nc,由nc发送,Client端通过nc接收消息,把它保存到zcwyou.txt。

4. 克隆硬盘或分区

server2上进行类似的监听动作,即把接收的数据重定向给dd:

  1. [root@zcwyou ~]# nc -l -p 1234 | dd of=/dev/sda

server1上把dd后的数据重定向给nc,即发送数据

  1. [root@zcwyou ~]# dd if=/dev/sda | nc 192.168.200.27 1234

注意:克隆硬盘或分区的操作,不应在已经mount的的系统上进行。

5. 指定源端口

假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。

服务器端打开监听:

  1. [root@zcwyou ~]# nc -l 1567

客户端发送数据,目标端口1567,源端口25

  1. [root@zcwyou ~]# nc 172.31.100.7 1567 -p 25

使用1024以内的端口需要root权限。

该命令将在客户端开启25端口用于通讯,否则将使用随机端口。

6. 指定源地址

使用-s选项指定源ip地址。

服务器端打开监听,把zcwyou.txt重定向给nc。

  1. [root@zcwyou ~]# nc -u -l 1567 < zcwyou.txt

客户端

  1. [root@zcwyou ~]# nc -u 192.168.100.1 1567 -s 192.168.88.20 > file.txt

当服务器有多个IP时,指定使用192.168.88.20作为源IP。

7. 目录传输

发送一个文件很简单,但是如果我们想要发送多个文件,或者整个目录,一样很简单,只需要使用压缩工具tar,压缩后发送压缩包。

如果你想要通过网络传输一个目录从A到B。

Server端,打包abc目录,并重定向到nc

  1. [root@zcwyou ~]# tar -cvf – abc | nc -l 1567

Client端,通过nc接收数据并由tar解包

  1. [root@zcwyou ~]# nc -n 172.31.100.7 1567 | tar -xvf –

如果想要节省带宽传输压缩包,我们可以使用bzip2或者其他工具压缩。

Server端通过bzip2压缩目录abc并重定向到nc,监听端口1567

  1. [root@zcwyou ~]# tar -cvf – abc | bzip2 -z | nc -l 1567

Client端把接收到的数据通过交给bzip2和tar处理

  1. [root@zcwyou ~]# nc -n 172.16.26.88 1567 | bzip2 -d |tar -xvf –

8. 加密你通过网络发送的数据

如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。

服务端,使用mcrypt工具加密数据。

  1. [root@zcwyou ~]# nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > zcwyou.txt

客户端,使用mcrypt工具解密数据。

  1. mcrypt -flush -bare -F -q -m ecb < zcwyou.txt | nc -l 1567

以上两个命令会提示需要密码,确保两端使用相同的密码。

这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以。

9. 传输流视频

虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用netcat,我们仍然有希望做成这件事。

服务端读取一个视频文件重定向输出到netcat客户端

  1. [root@zcwyou ~]# cat video.avi | nc -l 1567

客户端通过nc读取内容交给mplayer播放器

  1. [root@zcwyou ~]# nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 –

10. 使用UDP协议

默认情况下,nc创建连接时只会连接TCP端口。 不过我们可以使用-u选项来连接到 UDP 端口

  1. [root@zcwyou ~]# ncat -l -u 8888

udp 8888端口已经打开,然后用netstat验证一下端口是否打开。

  1. [root@zcwyou ~]# netstat -tunlp | grep 1234

udp 0 0 0.0.0.0:1234 0.0.0.0:* 17341/nc

udp6 0 0 :::1234 :::* 17341/nc

测试某服务器的UDP端口,比如检查本地是否可以使用阿里DNS服务器223.5.5.5

  1. [root@zcwyou ~]# nc -v -u 223.5.5.5 53

Ncat: Version 7.50

Ncat: Connected to 223.5.5.5:53.

显示Connected即表明成功连接到远程DNS端口,DNS工作正常。

linux使用netcat测试服务器的UDP端口

11. 其它用途

使用-t选项模拟Telnet客户端:

HTTP客户端用于下载文件

连接到邮件服务器,使用SMTP协议检查邮件

使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。

简单来说,只要你了解协议就可以使用netcat作为网络通讯媒介,实现各种客户端。

【漏洞预警】Linux 内核TCP SACK机制远程拒绝服务漏洞

【漏洞预警】Linux 内核TCP SACK机制远程拒绝服务漏洞

2019年6月18日,国外某安全研究组织披露Linux 内核TCP SACK机制存在缺陷,可导致远程拒绝服务。CVE编号为CVE-2019-11477、CVE-2019-11478和CVE-2019-11479。

 

漏洞描述
Linux 内核2.6.29及之后版本在处理TCP SACK机制时存在缺陷,导致整数溢出漏洞,攻击者可以构造特定的SACK包,远程触发Linux服务器内核模块溢出漏洞,实现远程拒绝服务攻击。 这个不会导致机器被黑,只是会弄到服务器突然间不能使用,因为CPU/内存资源被堵满

 

漏洞评级
CVE-2019-11477 高危
CVE-2019-11478 中危
CVE-2019-11479 中危

 

 

安全修复建议
注:以下任意一种修复方式都有可能造成业务不可用

 

一、禁用SACK机制功能,执行如下命令(目前暂时这个是最好的方式):
echo 0 > /proc/sys/net/ipv4/tcp_sack
sysctl -w net.ipv4.tcp_sack=0

 

 

二、升级Linux安全补丁(需要重启服务器, 请注意,目前CENTOS 和UBUNTU 还没跟新KERNEL,所以一下方案还不能使用,需要等CENTOS/UBUNTU 有了新KERNEL 才能升级)
Ubuntu 系列:apt-get update && sudo apt-get install linux-image-generic
Centos 系列:yum update kernel

Nginx中如何限制某个IP同一时间段的访问次数

如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包, 造成对方服务器资源耗尽,一直到宕机崩溃。

cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。

HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误。

HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令

这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制

HttpLimitReqModul 限制某一段时间内同一ip访问数实例,个人觉得这是连接数,跟请求数是有区别的。

  1. http{
  2. #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
  3. #以$binary_remote_addr(&lt;span style=”font-family: ‘Microsoft Yahei’, ‘Helvetica Neue’, Helvetica, Arial, sans-serif;”&gt;IP二进制码&lt;/span&gt;&lt;span style=”font-family: ‘Microsoft Yahei’, ‘Helvetica Neue’, Helvetica, Arial, sans-serif;”&gt;) 为key,限制平均每秒的请求为20个,&lt;/span&gt;
  4. #1M能存储16000个状态,rete的值必须为整数,
  5. #如果限制两秒钟一个请求,可以设置成30r/m
  6. limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
  7. server{
  8. location {
  9. #限制每ip每秒不超过20个请求,漏桶数burst为5
  10. #brust的意思就是,如果第1秒、2,3,4秒请求为19个,
  11. #第5秒的请求为25个是被允许的。
  12. #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
  13. #nodelay,如果不设置该选项,严格使用平均速率限制请求数,
  14. #第1秒25个请求时,5个请求放到第2秒执行,
  15. #设置nodelay,25个请求将在第1秒执行。
  16. limit_req zone=allips burst=5 nodelay;
  17. }
  18. }
  19. }

HttpLimitZoneModule 限制并发连接数实例,请求数限制,这个限制之后可以用用压力测试1s访问了跟设置的差不多。

limit_zone只能定义在http作用域,limit_conn可以定义在http server location作用域

  1. http{
  2. #定义一个名为one的limit_zone,大小10M内存来存储session,
  3. #以$binary_remote_addr 为key
  4. #nginx 1.18以后用limit_conn_zone替换了limit_conn
  5. #且只能放在http作用域
  6. limit_conn_zone one $binary_remote_addr 10m;
  7. server{
  8. location {
  9. limit_conn one 20; #连接数限制
  10. #带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k
  11. limit_rate 500k;
  12. }
  13. }
  14. }

 

Centos 7 配置阿里云的Yum源

yum是centos下更新、管理软件的命令,也有相应的图像界面版本;

yum源是yum命令去哪里取安装包的地图;

yum命令查询repo上配置的地址去取相应的rpm包进行安装;

[root@localhost ~]# uname -r
    3.10.0-693.el7.x86_64
[root@localhost ~]# cat /etc/redhat-release
    CentOS Linux release 7.4.1708 (Core)

1、备份系统原来的Yum源

[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

2、下载阿里云的CentOS-Base.Repo 到/Etc/Yum.Repos.D/

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、添加阿里云公共DNS

为了防止不能寻找yun源地址,生成cache,先添加阿里云的DNS

[root@localhost ~]# vim /etc/resolv.conf
    添加
        nameserver 223.5.5.5
        nameserver 223.6.6.6

4、清理缓存,并生成新缓存

[root@localhost ~]# yum clean all && yum makecache