【51CTO独家特稿】前言:这篇文章是明明白白你的Linux服务器-硬件篇的续篇,《明明白白你的Linux服务器》系列的第二篇。希望大家看完此文后,能很清楚明白你的服务器的网络情况,能很轻松的配置其网络环境。Linux服务器在装完系统,配置其网络环境是每一个system administrator的职能。
一、服务器的网络配置
在服务器的网络配置时,喜欢图形的朋友可用setup或system-config-network来配置。
网卡配置文件为/etc/sysconfig/network-scripts/ifcfg-eth0,设置完毕后直接用service network restart生效
- [root@linpcl 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,判断哪块网卡连接了网线,同事们靠抽插网线来判断哪个网卡连接了网线的办法比较没有效率
- [root@mail~]#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生产服务器的经验之谈。
#p#
三、 寻找恶意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工具。
- [root@ltos test]# chkconfig -list | grep 3:on | awk '{print $1,$5}'
- [root@ltos 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 #p#
七、使用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可派上用场了。
- [root@lancy sbin]# eject
- umount: /media/cdrom: device is busy
- umount: /media/cdrom: device is busy
- eject: unmount of `/media/cdrom' failed
- [root@lancy sbin]# fuser /mnt/cdrom
- /mnt/cdrom: 4561c 5382c
- [root@lancy 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后的字母表示占用资源的方式。#p#
九、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参数)
我这里以自己的线上邮件服务器为例说明下:
- [root@mail 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
关于网站的安全,我这里也有一些自己的浅见,特与大家共享下:
- iptables最好写成脚本形式,想开哪个端口开哪个,想关哪个关哪个,iptables服务都可关闭;可以用crontab每5分钟自动关闭一次iptables,注意别把自己SSH停掉了,毕竟公司离机房还是很远的!
- 不定期扫描,发现可疑端口就关闭,实在不太懂就cat /etc/services或google下查找端口。
- 多注意连接数和系统性能,有时能从上面发现问题,有条件的话就布置nagois监控服务器。
- 建议掌握netcat、hping、nmap、等安全工具及网络分析工具tcpdump或wireshark,配合监测iptables的安全策略。
- 多注意自己服务器的内核漏洞,毕竟现在的linux攻击都是内核级的;请至少保证内核为2.6.9以上(不含2.6.9)。
- 密切关注防火墙日志/var/log/messages。
【51CTO.com独家特稿,合作站点转载请注明原文译者和出处。】
【编辑推荐】