扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
以下几种方法检测linux服务器是否被攻击:\x0d\x0a1、检查系统密码文件 \x0d\x0a首先从明显的入手,查看一下passwd文件,ls _l /etc/passwd查看文件修改的日期。 \x0d\x0a2、查看一下进程,看看有没有奇怪的进程 \x0d\x0a\x0d\x0a重点查看进程:ps _aef | grep inetd inetd是UNIX系统的守护进程,正常的inetd的pid都比较靠前,如果看到输出了一个类似inetd _s \x0d\x0a/tmp/.xxx之类的进程,着重看inetd \x0d\x0a_s后面的内容。在正常情况下,LINUX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;而solaris系统中\x0d\x0a也仅仅是inetd \x0d\x0a_s,同样没有用inetd去启动某个特定的文件;如果使用ps命令看到inetd启动了某个文件,而自己又没有用inetd启动这个文件,那就说明已经有人入侵了系统,并且以root权限起了一个简单的后门。\x0d\x0a3、检查系统守护进程 \x0d\x0a检查/etc/inetd.conf文件,输入:cat /etc/inetd.conf | grep _v “^#”,输出的信息就是这台机器所开启的远程服务。 \x0d\x0a一般入侵者可以通过直接替换in.xxx程序来创建一个后门,比如用/bin/sh 替换掉in.telnetd,然后重新启动inetd服务,那么telnet到服务器上的所有用户将不用输入用户名和密码而直接获得一个rootshell。\x0d\x0a4、检查网络连接和监听端口 \x0d\x0a输入netstat -an,列出本机所有的连接和监听的端口,查看有没有非法连接。 \x0d\x0a输入netstat _rn,查看本机的路由、网关设置是否正确。 \x0d\x0a输入 ifconfig _a,查看网卡设置。 \x0d\x0a5、检查系统日志 \x0d\x0a命令last | \x0d\x0amore查看在正常情况下登录到本机的所有用户的历史记录。但last命令依赖于syslog进程,这已经成为入侵者攻击的重要目标。入侵者通常会停止系\x0d\x0a统的syslog,查看系统syslog进程的情况,判断syslog上次启动的时间是否正常,因为syslog是以root身份执行的,如果发现\x0d\x0asyslog被非法动过,那说明有重大的入侵事件。 \x0d\x0a在linux下输入ls _al /var/log \x0d\x0a检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常,这也是手工擦除入侵痕迹的一种方法。 \x0d\x0a6、检查系统中的core文件 \x0d\x0a通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。这种方式有一定的成功率,也就是说并不能\x0d\x0a100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,输入find / -name core \x0d\x0a_exec ls _l {} \; 依据core所在的目录、查询core文件来判断是否有入侵行为。\x0d\x0a7、检查系统文件完整性 \x0d\x0a检查文件的完整性有多种方法,通常通过输入ls _l \x0d\x0a文件名来查询和比较文件,这种方法虽然简单,但还是有一定的实用性。但是如果ls文件都已经被替换了就比较麻烦。在LINUX下可以用rpm _V \x0d\x0a`rpm _qf 文件名` \x0d\x0a来查询,查询的结果是否正常来判断文件是否完整。在LINUX下使用rpm来检查文件的完整性的方法也很多,这里不一一赘述,可以man \x0d\x0arpm来获得更多的格式。
翠屏网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联建站公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
很多时候我们会遇到服务器遭受 cc 或 syn 等攻击,如果发现自己的网站访问异常缓慢且流量异常。可以使用系统内置 netstat 命令 简单判断一下服务器是否被攻击。常用的 netstat 命令
该命令将显示所有活动的网络连接。
查看同时连接到哪个服务器 IP 比较多,cc 攻击用。使用双网卡或多网卡可用。
查看哪些 IP 连接到服务器连接多,可以查看连接异常 IP。
显示所有 80 端口的网络连接并排序。这里的 80 端口是 http 端口,所以可以用来监控 web 服务。如果看到同一个 IP 有大量连接的话就可以判定单点流量攻击了。
这个命令可以查找出当前服务器有多少个活动的 SYNC_REC 连接。正常来说这个值很小,最好小于 5。 当有 Dos 攻击或的时候,这个值相当的高。但是有些并发很高的服务器,这个值确实是很高,因此很高并不能说明一定被攻击。
列出所有连接过的 IP 地址。
列出所有发送 SYN_REC 连接节点的 IP 地址。
使用 netstat 命令计算每个主机连接到本机的连接数。
列出所有连接到本机的 UDP 或者 TCP 连接的 IP 数量。
检查 ESTABLISHED 连接并且列出每个 IP 地址的连接数量。
列出所有连接到本机 80 端口的 IP 地址和其连接数。80 端口一般是用来处理 HTTP 网页请求。
显示连接 80 端口前 10 的 ip,并显示每个 IP 的连接数。这里的 80 端口是 http 端口,所以可以用来监控 web 服务。如果看到同一个 IP 有大量连接的话就可以判定单点流量攻击了。
grep egrep区别
grep 默认不支持扩展 但可以通过-E 选择来支持扩展正则
egrep 支持扩展正则
关于正则与扩展正则的区别可以看我另一篇shell 正则的介绍
文件处理顺序 以行为单位,逐行进行处理
默认只输出与表达式相匹配的文本行
基本用法
- 格式1:egrep [选择] '正则表达式' 文件
- 格式2:前置命令 | egrep [选择] '正则表达式'
• egrep命令工具 (扩展正则命令)
• 常用命令选项
•grep 正则表达式,用来查找过滤文档的工具符号
grep "root" user //在user文档中查找有单词root的行
grep "^root" user //在user文档中查找以单词root开头的行
grep "bash " user //查找空行
grep "^ " user //查找以空格开头的行
grep "[rot]" user //查找字母r或者o或者t
grep "roo[tn]" user //查找root或者roon
grep "[^rot]" user //查找字母r或者o或者t之外的内容
grep "[a-z]" user //查找小写字母
grep "[A-Z]" user //查找大写字母
grep "[a-Z]" user //查找所有字母
grep "[0-9]" user //查找数字
grep "r..t" user //查找以r开头t结尾中间有2个任意字符的单词
grep "r. " user //查找以r开头后面任意字符 相当手通配符
grep "ro*" user //查找以r开头后面有或没有字母o的单词,o可以出现任意次
grep "o{1,2}" user //查找o出现1次到2次的行
grep "o{2,3}" user //查找o出现2次到3次的行
grep "o{2}" user //查找o出现2次的行
grep "o{1,} " user //查找o出现1次以及1次以上
grep "(:0){2}" user //查找:0(数字零)连续出现2次的行
扩展正则
egrep "o+" user //查找o出现1次以及1次以上
egrep "o?" user //查找o出现0次或1次
egrep "o{1,2}" user //查找o出现1次到2次的行
egrep "o{2,3}" user //查找o出现2次到3次的行
egrep "o{2}" user //查找o出现2次的行
egrep "o{1,}" user //查找o出现1次以及1次以上
egrep "(:0){2}" user //查找:0(数字零)连续出现2次的行
egrep "bash|nologin" user //查找bash或者nologin
egrep "\bthe\b" a //查找单词the,前后是空格或者特殊符号
案例:
正则表达式匹配练习
1)典型的应用场合:grep、egrep检索文本行
grep命令不带-E选项时,支持基本正则匹配模式。比如“word”关键词检索、“^word”匹配以word开头的行、“word$”匹配以word结尾的行……等等。
输出以“r”开头的用户记录:
输出以“localhost”结尾的行:
若希望在grep检索式同时组合多个条件,比如输出以“root”或者以“daemon”开头的行:
而若若使用grep -E或egrep命令,可支持扩展正则匹配模式,能够自动识别 |、{} 等扩展正则表达式中的特殊字符,用起来更加方便,比如:
或者
使用grep -E 与 使用egrep命令完全等效,推荐使用后者,特别是涉及到复杂的正则表达式的时候。
2)grep、egrep命令的-q选项
选项 -q 表示 quiet(静默)的意思,结合此选项可以只做检索而并不输出,通常在脚本内用来识别查找的目标是否存在,通过返回状态 $? 来判断,这样可以忽略无关的文本信息,简化脚本输出。
比如,检查/etc/hosts文件内是否存在192.168.4.4的映射记录,如果存在则显示“YES”,否则输出“NO”,一般会执行:
这样grep的输出信息和脚本判断后的提示混杂在一起,用户不易辨别,所以可以改成以下操作:
是不是清爽多了,从上述结果也可以看到,使用 -q 选项的效果与使用 /dev/null的效果类似。
3)基本元字符 ^、$ —— 匹配行首、行尾
输出注释的配置行(以#开头的行):
统计本地用户中登录Shell为“/sbin/nologin”的用户个数:
提示: -m10仅在文件的前10行中过滤,后面的行不再过滤。
结合 -c 选项输出匹配的行数
使用 -c 选项可输出匹配行数,这与通过管道再 wc -l的效果是相同的,但是写法更简便。比如,统计使用“/bin/bash”作为登录Shell的正常用户个数,可执行:
或者
4)基本元字符 . —— 匹配任意单个字符
以/etc/rc.local文件为例,确认文本内容:
输出/etc/rc.local文件内的空行(用 –v 选项将条件取反):
5)基本元字符 +、?、 —— 目标出现的次数*
还以/etc/rc.local文件为例:
输出包括 f、ff、ff、……的行,即“f”至少出现一次:
输出包括init、initial的行,即末尾的“ial”最多出现一次(可能没有):
输出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出现任意多次,也可以没有。重复目标只有一个字符时,可以不使用括号:
输出所有行,单独的“.*”可匹配任意行(包括空行):
输出/etc/passwd文件内“r”开头且以“nologin”结尾的用户记录,即中间可以是任意字符:
6)元字符 {} —— 限定出现的次数范围
创建一个练习用的测试文件:
输出包括ababab的行,即“ab”连续出现3次:
输出包括abab、ababab、abababab的行,即“ab”连续出现2~4次:
输出包括ababab、abababab、……的行,即“ab”最少连续出现3次:
7)元字符 [] —— 匹配范围内的单个字符
还以前面的测试文件bracet.txt为例:
输出包括abc、abd的行,即前两个字符为“ab”,第三个字符只要是c、d中的一个就符合条件:
输出包括大写字母的行,使用[A-Z]匹配连续范围:
8)单词边界匹配
以文件/etc/rc.local为例:
输出包括单词“init”的行,文件中“initialization”不合要求:
或者:
输出包括以“ll”结尾的单词的行,使用 匹配单词右边界:
或者:
9)多个条件的组合
通过dmesg启动日志查看蓝牙设备、网卡设备相关的信息:
服务器出现缓慢的状况可能由很多事情导致,比如错误的配置,脚本和差的硬件。但是有时候它可能因为有人对你的服务器用DoS或者DDoS进行洪水攻击。
如何在Linux上使用netstat命令查证DDOS攻击
DoS攻击或者DDoS攻击是试图让机器或者网络资源不可用的攻击。这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器,DOS攻击的实施通常迫使目标重启计算机或者消耗资源,使他们不再提供服务或者妨碍用户,访客访问。
在这篇小文章中,你可以知道在受到攻击之后如何在终端中使用netstat命令检查你的服务器。
一些例子和解释
netstat -na显示所有连接到服务器的活跃的网络连接netstat -an | grep :80 | sort只显示连接到80段口的活跃的网络连接,80是http端口,这对于web服务器非常有用,并且对结果排序.对于你从许多的连接中找出单个发动洪水攻击IP非常有用netstat -n -p|grep SYN_REC | wc -l这个命令对于在服务器上找出活跃的SYNC_REC非常有用,数量应该很低,最好少于5.在dos攻击和邮件炸弹,这个数字可能非常高.然而值通常依赖于系统,所以高的值可能平分给另外的服务器.netstat -n -p | grep SYN_REC | sort -u列出所有包含的IP地址而不仅仅是计数.netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'列出所有不同的IP地址节点发送SYN_REC的连接状态netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n使用netstat命令来计算每个IP地址对服务器的连接数量netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n列出使用tcp和udp连接到服务器的数目netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr检查ESTABLISHED连接而不是所有连接,这可以每个ip的连接数netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1显示并且列出连接到80端口IP地址和连接数.80被用来作为HTTP
如何缓解DDoS攻击
当你发现攻击你服务器的IP你可以使用下面的命令来关闭他们的连接:
iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT
请注意你必须用你使用netstat命令找到的IP数替换$IPADRESS
在完成以上的命令,使用下面的命令杀掉所有httpd连接,清除你的系统,然后重启httpd服务。
killall -KILL httpd service httpd start #For Red Hat systems /etc/init/d/apache2 restar
Linux系统用netstat命令查看DDOS攻击具体命令用法如下:
代码如下:netstat -na
显示所有连接到服务器的活跃的网络连接
代码如下:netstat -an | grep :80 | sort
只显示连接到80段口的活跃的网络连接,80是http端口,这对于web服务器非常有用,并且对结果排序.对于你从许多的连接中找出单个发动洪水攻击IP非常有用
代码如下:netstat -n -p|grep SYN_REC | wc -l
这个命令对于在服务器上找出活跃的SYNC_REC非常有用,数量应该很低,最好少于5.
在dos攻击和邮件炸弹,这个数字可能非常高.然而值通常依赖于系统,所以高的值可能平分给另外的服务器.
代码如下:netstat -n -p | grep SYN_REC | sort -u
列出所有包含的IP地址而不仅仅是计数.
代码如下:netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出所有不同的IP地址节点发送SYN_REC的连接状态
代码如下:netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令来计算每个IP地址对服务器的连接数量
代码如下:netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出使用tcp和udp连接到服务器的数目
代码如下:netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
检查ESTABLISHED连接而不是所有连接,这可以每个ip的连接数
代码如下:netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
显示并且列出连接到80端口IP地址和连接数.80被用来作为HTTP
如何缓解ddos攻击
当你发现攻击你服务器的IP你可以使用下面的命令来关闭他们的连接:
代码如下:iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT
请注意你必须用你使用netstat命令找到的IP数替换$IPADRESS
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流