Linux服务器 -- 网络篇

希望大家看完此文后,能很清楚明白你的服务器的网络情况,能很轻松的配置其网络环境。Linux服务器在装完系统,配置其网络环境是每一个system
administrator的职能。

一、服务器的网络配置

在服务器的网络配置时,喜欢图形的朋友可用setup或system-config-network来配置。

网卡配置文件为/etc/sysconfig/network-scripts/ifcfg-eth0,设置完毕后直接用service network
restart生效

[[email protected] root]#cat /etc/sysconfig/networking/devices/ifcfg-rth0  DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.2  NETMASK=255.255.255.0  GATEWAY=192.168.0.1

GATEWAY选项可以设置网关参数,这里注意下ONBOOT选项,它表示网卡是否随系统启动而启动,此项一定要设置成on

这里介绍二个不是太常用的参数

USERCTL=no,即不允许普通用户修改网卡
PEERDNS=yes,它表示允许从DHCP获得的DNS覆盖本地的DNS

查看本机所有的网卡情况 ifconfig –a,更高级的网卡路由命令用ip
addr,特别是你的服务器由keepalived绑定了虚拟VIP后用其查看很方便查看本机路由 netstat –rn或route

增加一条本机网络路由用命令route add -net 172.16.6.0 netmask 255.255.255.0 gw
172.16.2.25,即增加一条网络172.16.6.0/24 经过172.16.2.254 ,这个地址也可以理解为你的下一跳的地址

删除路由用命令route del –net 172.16.86.0/24

如果要永久的生效可用文件编辑的办法

vim /etc/sysconfig/network-scripts/route-eth0
172.16.6.0/24 via 172.16.2.25
查看本机的DNS服务器 cat /etc/resolv.conf
查看主机名hostname
查看主机名对应的IP地址 /etc/hosts

它的执行顺序是优于DNS的,现在多用于集群环境,比如Heartbeat;还有一个妙用,在没用DNS的环境中做测试时,直接改服务器的此文件,达到优先解析的目的查看与本机直连的网络设备用命令arp

这里跟大家介绍一个很有用的工具,mii-tool,判断哪块网卡连接了网线,同事们靠抽插网线来判断哪个网卡连接了网线的办法比较没有效率

[[email protected]~]#mii-tool  eth0: negotiated 100baseTx-FD flow-control, link ok  SIOCGMIIPHY on ‘eth1‘ failed: Resource temporarily unavailable

大家看这段文字可能没什么感觉,但到了机房就非常有用了,特别是那些网卡多的服务器,我见得最多的某台Linux服务器上绑定了六块网卡。

二、查看你的服务器网络连接状态

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘  LAST_ACK 14  SYN_RECV 348  ESTABLISHED 70  FIN_WAIT1 229  FIN_WAIT2 30  CLOSING 33  TIME_WAIT 18122

状态:描述

◆CLOSED:无连接是活动的或正在进行

◆LISTEN:服务器在等待进入呼叫

◆SYN_RECV:一个连接请求已经到达,等待确认

◆SYN_SENT:应用已经开始,打开一个连接

◆ESTABLISHED:正常数据传输状态

◆FIN_WAIT1:应用说它已经完成

◆FIN_WAIT2:另一边已同意释放

◆ITMED_WAIT:等待所有分组死掉

◆CLOSING:两边同时尝试关闭

◆TIME_WAIT:另一边已初始化一个释放

◆LAST_ACK:等待所有分组死掉

ESTABLISHED的值其实也是当前的并发数,这个可重点关注下;另外,可关注下TIME——WAIT这项的数值。Linux下高并发的Squid服务器,TCP
TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量,具体可参见我的另一篇文章:优化Linux生产服务器的经验之谈

三、 寻找恶意IP并用iptables禁止掉

找出恶意连接你的服务器80端口的IP,直接用iptables来drop掉它;这里建议写脚本来运行,有兴趣的请参考我在51cto.com里发表的自动分析黑名单及白名单的iptables脚本一文

netstat -an| grep :80 | grep -v 127.0.0.1 |awk ‘{ print $5 }‘ | sort|awk -F: 
  ‘{print $1,$4}‘ | uniq -c | awk ‘$1 >50 {print $1,$2}‘

iptables脚本执行完毕后,用iptables –nv –L 可查看其规则,下面的iptables语法比较详细,推荐记忆

iptables [-t表名] <-A| I |D |R > 链名[规则编号] [-i | o 网卡名称] [-p 协议类型]
[-s 源IP地址 | 源子网][--sport 源端口号] [-d 目标IP地址 | 目标子网][--dport 目标端口号] <-j
动作>

四、SMTP会话处理方式

捕获一个SMTP会话,以下命令很管用,推荐下 ;不喜欢用命令的同学我推荐用wireshark

tcpdump -vv –x –X –s 1500 `port 25`

五、打印自动运行服务

打印出自动运行的服务,3、5级别的即可;当然喜欢图形的同学可用ntsysv工具。

[[email protected] test]# chkconfig -list | grep 3:on | awk ‘{print $1,$5}‘  [[email protected] test]# chkconfig –list | grep 5:on | awk ‘{print $1,$7}‘

六、使用Netstat查看协议数据

Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]  -a 显示所有连接和监听端口。  -b 显示包含于创建每个连接或监听端口的可执行组件。  -e 显示以太网统计信息。此选项可以与-s选项组合使用。  -n 以数字形式显示地址和端口号。  -o 显示与每个连接相关的所属进程 ID。  -p proto 显示 proto 指定的协议的连接。  -r 显示路由表。  -s 显示按协议统计信息。

一般用得比较多的就是netstat -an与netstat –rn

七、使用lsof查看文件信息

在unix里面,一切皆文件;而Linux秉承了这一特性,将unix下的工具lsof移植过来得很成功。lsof可以列出被进程所打开的文件的信息。

被打开的文件可以是

1.普通的文件

2.目录

3.网络文件系统的文件

4.字符设备文件

5.(函数)共享库

6.管道,命名管道

7.符号链接

8.底层的socket字流。网络socket,unix域名socket,用得比较多的用法是lsof -i:端口号,列出谁在使用某个端口,例如:lsof
-i :3306,我喜欢用此用法来判断服务到底有没有正常启用。

八、使用fuser查看和杀死相关进程

与lsof –i的用法相法,如果我想查找占用3306端口的程序,则用fuser –n tcp -v
8080,另外,fuser的其它功能也是很强大的,我常用的它的两个功能:查看我需要的进程和我要杀死我查到的进程(抚琴煮酒是一般用来解决device is
busy的问题)

比如当你想umount光驱的时候,结果系统提示你设备正在使用或者正忙,可是你又找不到到底谁使用了他。这个时候fuser可派上用场了。

[[email protected] sbin]# eject  umount: /media/cdrom: device is busy  umount: /media/cdrom: device is busy  eject: unmount of `/media/cdrom‘ failed   [[email protected] sbin]# fuser /mnt/cdrom  /mnt/cdrom: 4561c 5382c   [[email protected] sbin]# ps -ef |egrep ‘(4561|5382)‘ |grep -v grep  root 4561 4227 0 20:13 pts/1 00:00:00 bash  root 5382 4561 0 21:42 pts/1 00:00:00 vim Autorun.inf

示例中,我想弹出光驱,系统告诉我设备忙着,于是采用fuser命令,参数是你文件或scoket,fuser将查出那些使用了他。4561c,5382c表示目前用两个进程在占用着/mnt/cdrom,分别是4561,5382,进程ID后的字母表示占用资源的方式。

九、TCP_wrappers防火墙

linux上一种特殊的防火墙TCP_wrappers防火墙,TCP 封包会先经过所谓的 IP 过滤机制( IP Filtering ),这是 Linux
提供的第一层保护,他可以将你不想要的来源 IP (经由 TCP 封包的 Head
资料)先当掉再说!如果可以通过的话,在就是要通过TCP_wrappers过滤。如果上面两个都通过了,再就根据每个服务访问控制的设定决定客户机能得到不同的权限和信息.TCP_wrappers防火墙主要涉及到两个文件/etc/hosts.allow和/etc/hosts.deny,可作iptables的补充来保护你的Linux安全,比如只允许内网IP访问你的NFS服务器。

这里说下Linux是怎么识别其顺序的,这里好多朋友容易混淆了;当某个ip想访问你的Linux下的特定服务时,系统首先会检查/etc/hosts.alllow文件,如是有的话就放行,没有的话继续检查/etc/hosts.deny文件,有的话拒绝,没有的就放行,不过一般的做法就直接在/etc/hosts.allow里放允许通行的ip,/etc/hosts.deny里放不允许通行的ip。另外,这里跟大家分享一个经验心得吧:
Linux下的服务众多,samba,nfs,rsync,tcp_wrapper,xinetd等,而每个又都有各自支持的写法,这样对于考试学习及工作记忆很不方便,其实它们都支持192.168.0.1/255.255.255.0这样的点分十进制写法;另,iptables是不支持的,它只支持192.168.0.1/24比特建网制。

十、推荐下Linux/unix中常用的扫描端口工具-Nmap

下面是Nmap支持的四种最基本的扫描方式:

TCP connect()端口扫描(-sT参数,-sP是用于扫描整个局域网段)  TCP同步(SYN)端口扫描(-sS参数)  UDP端口扫描(-sU参数)  TCP ACK扫描(-sA参数)

我这里以自己的线上邮件服务器为例说明下:

[[email protected] postfix]# nmap -P0 -sS 211.143.6.X  Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-03-29 16:21 CST  Interesting ports on 211.143.6.X:  Not shown: 1668 closed ports  PORT STATE SERVICE  22/tcp open ssh  25/tcp open smtp  80/tcp open http  110/tcp open pop3  111/tcp open rpcbind  143/tcp open imap  443/tcp open https  465/tcp open smtps  587/tcp open submission  993/tcp open imaps  995/tcp open pop3s  1014/tcp open unknown

lsof
-i:1014,发现又是rpc.statd,这东东,每次用的端口都不一样啊;它不能正确处理SIGPID信号,远程攻击者可利用这个漏洞关闭进程,进行拒绝服务攻击;发现rpc.statd是由服务nfslock开启,关闭它即可service
nfslock stop;chkconfig nfslock off

关于网站的安全,我这里也有一些自己的浅见,特与大家共享下:

  1. iptables最好写成脚本形式,想开哪个端口开哪个,想关哪个关哪个,iptables服务都可关闭;可以用crontab每5分钟自动关闭一次iptables,注意别把自己SSH停掉了,毕竟公司离机房还是很远的!
  2. 不定期扫描,发现可疑端口就关闭,实在不太懂就cat /etc/services或google下查找端口。
  3. 多注意连接数和系统性能,有时能从上面发现问题,有条件的话就布置nagois监控服务器。
  4. 建议掌握netcat、hping、nmap、等安全工具及网络分析工具tcpdump或wireshark,配合监测iptables的安全策略。
  5. 多注意自己服务器的内核漏洞,毕竟现在的linux攻击都是内核级的;请至少保证内核为2.6.9以上(不含2.6.9)。
  6. 密切关注防火墙日志/var/log/messages。

参考: http://os.51cto.com/art/201007/209530.htm

时间: 2024-08-06 08:11:39

Linux服务器 -- 网络篇的相关文章

查看Linux服务器网络状态(转)

转载自http://blog.chinaunix.net/uid-26413552-id-3202366.html 查看Linux服务器网络状态 ifconfig 用来显示所有网络接口的详细情况的,如:ip地址,子网掩码等. ethx是以太网网卡的名称. 配置文件在/etc/sysconfig/network-scripts/ifcfg-eth0中 DEVICE="eth0" HWADDR="00:0C:29:68:C0:8C" NM_CONTROLLED=&quo

Linux服务器 -- 日志篇

志对于安全来说,非常重要,它记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹.日志主要的功能有:审计和监测.他还可以实时的监测系统状态,监测和追踪侵入者等等.正因为如此,抚琴煮酒特的将它整理成一篇比重跟硬件篇.网络篇并列的文章,作为<明明白白你的Linux服务器>系列的第三篇,希望大家能从中学习到对自己有用的东西. 一.配置syslog(gyl4802959同学撰写) 目前,linux依旧使用syslogd作为日志监控进程,对其进行必要的配置

Linux服务器 -- 故障篇

故障一. 今天早上来的第一件事,就是检查昨天晚上刚刚重新安装的一台64位的CentOS 5.5服务器,那台服务器是四块硬盘作的二个RAID1,一个专用于OS,一个用于data, 在安装系统的过程中,为了不损失数据,data分区我碰也碰过,今天用root进系统后,我用mount /dev/mapper/ddf1_datap1 /data进行挂载,很顺利的挂载上去了,结果进去用ll命令一看,我靠,文件全出错了,都不正常了,吓我一跳,data分区里有的数据很重要,特别是mysql数据库,我问了下同事,

Linux服务器 -- 硬件篇

身为系统管理员,如何做到时刻对自己服务器的各方面状态性能等信息都有足够的了解? 你如何能很清楚你目前的Linux服务器(10-100台)的状态性能等信息 ? 一.如何查看服务器的CPU 判断依据: 1.具有相同core id的cpu是同一个core的超线程.(Physical id and core idare not necessarily consecutive but they are unique. Any cpu with the same coreid are hyperthread

NAT(未验证,后续见Linux服务器架构篇)

通常小型企业或是学校单位大多数仅有一条对外的联机,然后全公司内的计算机全部通过这条联机连到因特网上,此时我们更需使用IP分享器来让这一条对外联机分享给所有公司内部员工使用,那么Linux能不能达到此一IP分享的功能呢?当然可以,就是透过NAT服务即可达到这项任务. 这种环境中,由于Linux作为一个内外分离的实体,因此网络流量会比较大一点,此时Linux主机的网络卡就需要比较好些的配置.其他的CPU.RAM.硬盘等的影响就小很多.事实上,单利用Linux作为NAT主机来分享IP是很不明智的,因为

Linux随笔-鸟哥Linux服务器篇学习总结(全)

鸟哥Linux服务器篇学习总结 作者:Danbo 时间:2015-7-17 在runlevel3启动级别下默认启动网络挂载(autofs)机制,我们可以通过命令将其关闭:chkconfig autofs off 或者 /etc/init.d/autofs stop将其关闭. 查询启动在网络监听的服务:netstat -lntup[[email protected] ~]# netstat -lnutpActive Internet connections (only servers)Proto

iOS开发网络篇—搭建本地服务器

iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache-tomcat-6.0.41.tar eclipse-jee-kepler-SR2-macosx-cocoa-x86_64.tar.gz jdk-8u5-macosx-x64.dmg 二.安装和配置本地服务器环境(java)步骤: (1)在文档路径下,新建一个文件夹(NetWord),解压eclips

iOS开发网络篇—发送json数据给服务器以及多值参数

iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 代码示例: 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 5 @end 6 7 @implementation YYViewController 8 9 - (void)viewDidLoad 10

Linux服务器同步网络时间

Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步. 一.修改时区: # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 修改为中国的东八区 # vi /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=false ARC=false 二.配置新的