明明白白你的Linux服務器——網絡篇

前言:希望大家看完此文後,能很清楚明白你的服務器的網絡情況,能很輕鬆的配置其網絡環境。畢竟,Linux服務器在裝完系統,配置其網絡環境是每一個system administrator的職能。

一、服務器的網絡配置

在服務器的網絡配置時,喜歡圖形的朋友可用setupsystem-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 –rnroute
增加一條本機網絡路由用命令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套接字數量。

三、 尋找惡意IP並用iptables禁止掉

找出惡意連接你的服務器80端口的IP,直接用iptablesdrop掉它;這裏建議寫腳本來運行。
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`

五、打印自動運行服務

打印出自動運行的服務,35級別的即可;當然喜歡圖形的同學可用ntsysv工具。
[root@ltos test]# chkconfig -list | grep 3:on | awk &#39;{print $1,$5}&#39;
[root@ltos test]# chkconfig –list | grep 5:on | awk &#39;{print $1,$7}&#39;


六、使用Netstat查看協議數據

Netstat用於顯示與IPTCPUDPICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。
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 -annetstat –rn

七、使用lsof查看文件信息

unix裏面,一切皆文件;而Linux秉承了這一特性,將unix下的工具lsof移植過來得很成功。lsof可以列出被進程所打開的文件的信息。

被打開的文件可以是

1.普通的文件

2.目錄

3.網絡文件系統的文件

4.字符設備文件

5.(函數)共享庫

6.管道,命名管道

7.符號鏈接

8.底層的socket字流。網絡socketunix域名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&#39; failed

[root@lancy sbin]# fuser /mnt/cdrom
/mnt/cdrom: 4561c 5382c

[root@lancy sbin]# ps -ef |egrep &#39;(4561|5382)&#39; |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命令,參數是你文件或scoketfuser將查出那些使用了他。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參數)

我這裏以自己的線上郵件服務器爲例說明下:
[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

關於網站的安全,我這裏也有一些自己的淺見,特與大家共享下:
1.iptables最好寫成腳本形式,想開哪個端口開哪個,想關哪個關哪個,iptables服務都可關閉;可以用crontab5分鐘自動關閉一次iptables,注意別把自己SSH停掉了,畢竟公司離機房還是很遠的!
2.不定期掃描,發現可疑端口就關閉,實在不太懂就cat /etc/servicesgoogle下查找端口。
3.多注意連接數和系統性能,有時能從上面發現問題,有條件的話就佈置nagois監控服務器。
4.建議掌握netcathpingnmap、等安全工具及網絡分析工具tcpdumpwireshark,配合監測iptables的安全策略。
5.多注意自己服務器的內核漏洞,畢竟現在的linux***都是內核級的;請至少保證內核爲2.6.9以上(不含2.6.9)
6.密切關注防火牆日誌/var/log/messages

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章