Linux網路配置基礎
第1章 Linux網路配置基礎
1網路相關檔案
要想熟練的配置linux網路,首先要了解和Linux網路相關配置檔案。
1.1/etc/sysconfig/network檔案
首先來檢視檔案/etc/sysconfig/network的內容:
[root@localhost bin]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=localhost.localdomain
這裡可以看出該檔案就三句話,主要的功能是是否啟動網路,第一句指的是預設啟動IPV4網路,第二句是IPV6網路。第三句指的是設定主機名稱。如果說要改變主機名,需要重新啟動機器才能生效。因為這樣才會讓系統上面所有的程式都使用最新配置的主機名稱。
1.2 /etc/sysconfig/network-scrips/ifcfg-eth0
這個檔案是配置網路卡引數的檔案。裡面可以配置IP、netmask、gateway、開機時的IP獲取方式、是否在開機的時候啟動等等。ifcfg-eth0指的是第一塊網路卡,而第二塊網路卡為ifcfg-eth1以此類推。其中ifcfg-lo指的是網路的迴環地址。
[root@localhost bin]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 //網路卡裝置名稱
BOOTPROTO=none //是否使用DHCP方式獲得網路引數,值可以是(none、static、dhcp)
HWADDR=00:0C:29:97:30:A8 //這就是常說的網路卡硬體地址
ONBOOT=yes //啟動的時候是否啟用網路卡,值可以是(yes | no)
TYPE=Ethernet //網路卡的型別為乙太網
USERCTL=no //是否允許普通使用者來控制該裝置
IPV6INIT=no //是否初始化IPV6
PEERDNS=yes //yes使用DNS選項的值替代/etc/resolv.conf中的配置。如果使用 DHCP,yes 則為這個選項的預設,no不更改/etc/resolv.conf中的配置
NETMASK=255.255.255.0 //子網掩碼
IPADDR=202.196.1.234 //IP地址
GATEWAY=202.196.1.193 //閘道器地址
1.3 其他網路相關檔案
(1)/etc/resolv.conf
DNS功能是進行主機名稱與 IP 的對應。而resolv.conf就是配置DNS IP地址的檔案。
(2)/etc/hosts
該檔案的主要作用是用來設定主機名與對應IP的。
(3)/etc/services
該檔案記錄了各種協議所使用的埠。例如http、ftp、ssh、telnet等等服務所所使用的port number等等。
(4)/etc/protocols
該檔案顯示linux所支援的網路協議。例如常見的TCP、UDP等等。
2常用網路命令
2.1 ifconfig命令
ifconfig主要是可以啟動、觀察與修改網路卡的相關引數,可以修改的引數包括IP引數以及MTU等等都可以修改。
【例】:檢視當前eth0網路卡的引數。
[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:97:30:A8
inet addr:202.196.1.234 Bcast:202.196.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe97:30a8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:492965 errors:0 dropped:0 overruns:0 frame:0
TX packets:12557 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:81685351 (77.9 MiB) TX bytes:1772297 (1.6 MiB)
Interrupt:67 Base address:0x2000
說明如下:
eth0:是網路卡的代號,lo是迴環網路卡;HWaddr:MAC地址或者網路卡地址;
inet addr表示IP地址;Bcast廣播地址;Mask掩碼;
inet6 addr:是IPv6地址;
MTU:就是最大傳輸單元;
RX:接收到的資料包,packets代表資料包數、errors代表資料包發生錯誤的數量、dropped 代表資料包由於有問題而遭丟棄的數量等等;
TX:傳送的資料包,為網路由啟動到目前為止的傳送情況;
collisions:代表資料包碰撞的情況,如果發生太多次, 表示網路狀況不太好;
Interrupt,Memory:IRQ地址與記憶體地址;
通過ifconfig命令,可以瞭解系統有幾個網路卡介面,每個網路卡介面的引數配置,傳送和接收了多少資料包等資訊。
【例】:使用ifconfig命令來修改網路卡引數。
[root@localhost ~]# ifconfig eth0 202.196.1.199
說明:該例修改網路的IP地址為202.196.1.199。
【例】:同時修改掩碼及MTU
[root@localhost ~]# ifconfig eth0 202.196.1.199 netmask 255.255.255.193 mtu 2000
【例】:一張網路卡配置兩個IP地址。
[root@localhost ~]# ifconfig eth0:1 202.196.1.200
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:97:30:A8
inet addr:202.196.1.234 Bcast:202.196.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe97:30a8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:497114 errors:0 dropped:0 overruns:0 frame:0
TX packets:12956 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:82363124 (78.5 MiB) TX bytes:1828577 (1.7 MiB)
Interrupt:67 Base address:0x2000
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:97:30:A8
inet addr:202.196.1.200 Bcast:202.196.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000
說明:這裡可以看到兩個網路介面,eth0和eth0:1,它們的硬體地址都是一樣的。意思是它們其實是一張網路卡,但是配置了兩個不同的IP地址。
【例】:使用ifconfig啟動網路卡eth0。
[root@localhost ~]# ifconfig eth0 up
關閉網路卡:
[root@localhost ~]# ifconfig eth0 down
利用ifconfig命令修改網路卡的引數需要注意,這裡的修改都是暫時的,一旦網路重新啟動後,這裡所有修改的引數都是無效的。
【例】重新啟動網路服務,ifconfig命令引數設定無效。
[root@localhost ~]# /etc/init.d/network restart
正在關閉介面 eth0: [確定]
關閉環回介面: [確定]
彈出環回介面: [確定]
彈出介面 eth0: [確定]
重新啟動後,在此利用ifconfig來檢視網路卡引數,會發現又恢復到了原始的引數。那麼如果想要使修改的引數永久儲存,需要直接在/etc/sysconfig/network-scripts/ifcfg-eth0檔案中修改。修改完成後儲存退出,重新啟動網路即可生效。
2.3 ping命令
ping命令的主要作用是測試主機之間的連通性。其原理是通過傳送ICMP資料包,根據返回值來判斷網路的通訊狀況。
ping命令語法如下:
[root@localhost ~]# ping [-bct] IP
引數:
-b:後面接的是廣播地址,用來測試整個網路的連通性;
-c:後面可以傳送icmp資料包的個數;
-t :TTL 的數值,預設是 255,每經過一個節點就會少一;
【例】:測試一下202.196.0.1這臺主機是否存在?利用[ctrl]+c來結束測試。
[root@localhost ~]# ping 202.196.0.1
PING 202.196.0.1 (202.196.0.1) 56(84) bytes of data.
64 bytes from 202.196.0.1: icmp_seq=1 ttl=124 time=36.1 ms
64 bytes from 202.196.0.1: icmp_seq=2 ttl=124 time=0.438 ms
64 bytes from 202.196.0.1: icmp_seq=3 ttl=124 time=0.775 ms
64 bytes from 202.196.0.1: icmp_seq=4 ttl=124 time=0.936 ms
64 bytes from 202.196.0.1: icmp_seq=5 ttl=124 time=1.18 ms
--- 202.196.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 0.438/7.892/36.134/14.123 ms
說明:
64 bytes from 202.196.0.1: icmp_seq=1 ttl=124 time=36.1 ms含義:
64 bytes:表示這次傳送的ICMP資料包大小為64 bytes;
icmp_seq=1:ICMP資料包的序號0;
ttl=243:每經過一個路由器或者閘道器就會減少1;
time=9.16 ms:響應時間;
rtt min/avg/max/mdev = 0.438/7.892/36.134/14.123 ms含義:
表示往返時延的最小、平均、最大及算數平均偏差值。
【例】:傳送3個icmp資料包來測試202.196.1.235連通性。
[root@localhost ~]# ping -c 3 202.196.1.235
PING 202.196.1.235 (202.196.1.235) 56(84) bytes of data.
64 bytes from 202.196.1.235: icmp_seq=1 ttl=64 time=0.845 ms
64 bytes from 202.196.1.235: icmp_seq=2 ttl=64 time=1.04 ms
64 bytes from 202.196.1.235: icmp_seq=3 ttl=64 time=1.05 ms
--- 202.196.1.235 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.845/0.982/1.055/0.100 ms
2.4 traceroute
那麼有沒有指令可以追蹤兩部主機之間通過的各個節點 (node) 通訊狀況的好壞呢?舉例來說,如果我們連線到 yahoo 的速度比平常慢,你覺得是 (1)自己的網路環境有問題? (2)還是外部的 Internet 有問題?如果是 (1) 的話,我們當然需要檢查自己的網路環境啊, 看看是否又有誰中毒了?但如果是 Internet 的問題呢?那只有等等。
判斷是 (1) 還是 (2) 就得要使用 traceroute 這個指令。
[root@linux ~]# traceroute [-nwig] IP
引數:
-n :可以不必進行主機的名稱解析,單純用 IP ,速度較快!
-w :若對方主機在幾秒鐘內沒有回聲就宣告不治...預設是 5 秒
-i :用在比較複雜的環境,如果你的網路介面很多很複雜時,才會用到這個引數;
舉例來說,你有兩條 ADSL 可以連線到外部,那你的主機會有兩個 ppp,
你可以使用 -i 來選擇是 ppp0 還是 ppp1!
-g :與 -i 的引數相仿,只是 -g 後面接的是 gateway 的 IP 就是了。
範例一:
[root@linux ~]# traceroute -n tw.yahoo.com
traceroute to tw.yahoo-ap1.akadns.net (203.84.202.164), 30 hops max, 38 byte packets
1 61.59.121.1 42.174 ms 41.690 ms 41.058 ms
2 139.175.172.2 40.962 ms 41.978 ms 40.973 ms
3 192.72.122.130 40.983 ms 41.930 ms 41.003 ms
4 139.175.58.210 42.956 ms 41.997 ms 42.337 ms
5 139.175.58.153 47.591 ms 47.972 ms 48.748 ms
6 139.175.56.30 48.193 ms 47.970 ms 47.986 ms
7 139.175.57.94 47.959 ms 47.951 ms 47.985 ms
8 139.175.56.138 48.363 ms 47.586 ms 47.995 ms
9 139.175.58.42 49.256 ms 50.668 ms 47.490 ms
10 61.58.33.133 201.882 ms 201.565 ms 200.973 ms
11 61.58.33.50 199.910 ms 199.019 ms 198.961 ms
12 203.84.200.226 202.391 ms 202.567 ms 209.283 ms
這個 traceroute 挺有意思的,這個指令會針對欲連線的目的地之所有 router 進行 ICMP 的超時等待, 例如上面的例子當中,連線到 Yahoo 時,他會經過 12 個節點,traceroute 會主動的對這 12 個節點做 ICMP 的回聲等待,並探測回覆的時間,每個節點會探測三次。
所以像上頭顯示的結果,發現每個節點其實回覆的時間大約在 200 ms 以內,算是還可以的 Internet 環境了。
而且由上面的資訊來看,可以看出在 61.58.33.133 這個節點後的傳輸延遲較久,至於之前的 9 個節點則有不錯的表現。通過這種解析,可以讓您瞭解到這條連線是那個環節出了問題。
另外,如果在預設的 5 秒鐘之內 traceroute 聽不到節點的回聲,那麼螢幕上就會跑出一個*的符號, 告知該節點無法有順利的回應。由於我們的 traceroute 用的是 ICMP 資料包,有些防火牆或者主機可能會將 ICMP 可通過的權力拿掉,因此就會造成等不到回聲的狀態!另外,有些 gateway 本來就不支援 traceroute 的功能,因此也會產生那個*的狀況。所以分析時得要注意一下。
2.5 netstat命令
netstat命令主要的作用是用來觀察網路連線及埠等資訊。語法如下:
[root@linux ~]# netstat -[antulpc]
引數:
-n:不使用主機名稱與服務名稱,使用IP與port number;
-a:列出所有的連線狀態;
-t:列出TCP的連線;
-u:列出UDP資料包的連線;
-l:列出處在監聽狀態的服務;
-p:列出PID與程式名;
-c:可以設定幾秒鐘後自動更新一次,例如-c 3每3秒更新一次網路狀態的顯示;
【例】列出目前的所有網路連線狀態。
[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:32768 0.0.0.0:*
udp 0 0 0.0.0.0:10000 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 11497 @/tmp/fam-root-
unix 2 [ ACC ] STREAM LISTENING 8405 @/var/run/hald/dbus-1wf2PTHPKi
省略部分
說明:
上半部分的輸出為TCP和UDP連線,下半部分為UNIX socket連線。
Local Address:本機地址,是IP或者主機名稱,接著是埠號。例如我們可以看到本機開放了22、23、25號埠等。
Foreign Address:遠端主機IP與埠。
stat:狀態。ESTABLISED:已經建立連線;LISTEN:處於監聽狀態。
【例】檢視網路中正在處於監聽狀態的連線。
[root@localhost ~]# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2403/portmap
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 2671/xinetd
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 2633/python
tcp 0 0 :::22 :::* LISTEN 2659/sshd
上面最重要的其實是那個-l引數,因為可以僅列出有在監聽狀態的埠。
【例】觀察本機所有的網路連線狀態
[root@localhost ~]# netstat -atupn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 2628/hpiod
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2403/portmap
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 2930/perl
tcp 0 0 0.0.0.0:918 0.0.0.0:* LISTEN 2432/rpc.statd
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 2671/xinetd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2645/cupsd
tcp 0 0 :::22 :::* LISTEN 2659/sshd
tcp 0 148 202.196.1.234:22 202.196.1.235:24624 ESTABLISHED 3266/1
udp 0 0 0.0.0.0:111 0.0.0.0:* 2403/portmap
說明:可以看到目前遠端的其中有一條連線正處於連線建立的狀態,該連線表示從遠端的主機202.196.1.235的24624埠連線到本機的202.196.1.234:22埠,在記憶體中該連線的程式號為3266。
2.6 tcpdump
tcpdump可以從網路卡截獲資料包,如果該資料包傳輸過程中,沒有加密的話,可以解析出資料包的內容,而預設情況下,網路中採用IP協議的資料包是明文傳輸的,所以可以直接解析。其語法如下:
[root@localhost ~]# tcpdump [-nn] [-i 網路卡名] [-w 檔名] [-c 次數] [-X] [提取所需要的資料包]
說明:
-nn:用IP及埠號來顯示;
-i:想要截獲哪個網路卡的資料包,如eth0,lo等;
-w:把截獲的資料包存到指定的檔案中;
-c:截獲的資料包的數目,如果不指定,那麼tcpdump會一直截獲,直到使用者輸入[ctrl]+c為止;
-X:顯示十六制以及ASCII內容的資料包;
[提取所需要的資料包]:可以從所有捕獲的資料包中提取自己希望得到的資料包:
比如:
'host 202.196.1.235' :只獲取來自202.196.1.235的資料包
'tcp port 21':只截獲21號埠的tcp資料包;
更詳細的用法請參考man tcpdump。
【例】捕獲網路卡eth0上的資料包。輸入[ctrl]+c結束捕獲。
[root@localhost ~]# tcpdump -i eth0 –nn
14:34:54.347408 IP 202.196.1.235.24624 > 202.196.1.234.22: . ack 102764 win 7632
14:34:54.347511 IP 202.196.1.234.22 > 202.196.1.235.24624: P 103340:103488(148) ack 273 win 447
…省略
844 packets captured //總共捕獲了多少個資料包
2076 packets received by filter //過濾後得到的資料包的總數目
295 packets dropped by kernel //核心丟棄的資料包
捕獲的資料包顯示格式說明,比如第一行:
14:34:54.347408:資料包被捕獲的時間;
IP 202.196.1.235.24624 >:傳送發是202.196.1.235埠號是24624,該資料包是IP資料包。
202.196.1.234.22:接收方的IP是202.196.1.234,接收方的埠是22;
P 103340:103488(148):PUSH傳輸,傳輸的資料是整個資料流中的第103340位元組到103488位元組,所以該資料包的大小為148個位元組;
ack 273 win 447:ACK確認幀與tcp視窗的大小;
【例】用tcpdump捕獲網路卡lo上的23號埠上資料包,來解釋tcp三次握手機制。
(1)開啟一個終端,首先輸入命令tcpdump -i lo –nn來監聽23號埠上的資料包。
[root@localhost ~]# tcpdump -i lo -nn port 23
(2)另外新建一個終端,輸入命令telnet 127.0.0.1,用來telnet本機。
[root@localhost ~]# telnet 127.0.0.1
(3)我們就會在步驟(1)的終端內看到如下所示的捕獲到的資料包:
[root@localhost ~]# tcpdump -i lo -nn port 23
第1行tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
第2行listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
第3行15:00:34.778721 IP 127.0.0.1.41280 > 127.0.0.1.23: S 4028806550:4028806550(0) win 32792 <mss 16396,sackOK,timestamp 66289322 0,nop,wscale 7>
第4行15:00:34.779274 IP 127.0.0.1.23 > 127.0.0.1.41280: S 4027279237:4027279237(0) ack 4028806551 win 32768 <mss 16396,sackOK,timestamp 66289322 66289322,nop,wscale 7>
第5行15:00:34.780010 IP 127.0.0.1.41280 > 127.0.0.1.23: . ack 1 win 257 <nop,nop,timestamp 66289322 66289322>
第6行15:00:34.780392 IP 127.0.0.1.41280 > 127.0.0.1.23: P 1:34(33) ack 1 win 257 <nop,nop,timestamp 66289323 66289322>
說明:
第3行是來自客戶端的帶有SYN主動連線表示的資料包,也就是tcp連線建立中的第一次握手。
第4行是伺服器端的帶有ACK標示的SYN連線資料包,也就是tcp連線建立中的第二次握手。
第5行則是客戶端給伺服器端的(ACK),表示該連線正式建立,也就是tcp連線建立中的第三次握手。
第6行以後就開始了tcp連線的資料傳輸階段。
3網路埠
3.1什麼是埠
如果把IP地址比作一間房子,埠就是出入這間房子的門。真正的房子只有幾個門,但是一個IP地址的埠可以有65536個之多。埠是通過埠號來標記的,埠號只有整數,範圍是從0到65535。
在Internet上,各主機間通過TCP/IP協議傳送和接收資料包,各個資料包根據其目的主機的ip地址來進行網際網路絡中的路由選擇。可見,把資料包順利的傳送到目的主機是沒有問題的。問題出在哪裡呢?我們知道大多數作業系統都支援多程式(程式)同時執行,那麼目的主機應該把接收到的資料包傳送給眾多同時執行的程式中的哪一個呢?顯然這個問題有待解決,埠機制便由此被引入進來。
本地作業系統會給那些有需求的程式分配協議埠(protocol port,即我們常說的埠),每個協議埠由一個正整數標識,如:80,139,445,等等。當目的主機接收到資料包後,將根據報文首部的目的埠號,把資料傳送到相應埠,而與此埠相對應的那個程式將會領取資料並等待下一組資料的到來。
埠其實就是隊,作業系統為各個程式分配了不同的隊,資料包按照目的埠被推入相應的隊中,等待被程式取用,在極特殊的情況下,這個隊也是有可能溢位的,不過作業系統允許各程式指定和調整自己的隊的大小。
不光接受資料包的程式需要開啟它自己的埠,傳送資料包的程式也需要開啟埠,這樣,資料包中將會標識有源埠,以便接受方能順利地回傳資料包到這個埠。
根據提供服務型別的不同,埠分為兩種,一種是TCP埠,一種是UDP埠。
那麼,如果攻擊者使用軟體掃描目標計算機,得到目標計算機開啟的埠,也就瞭解了目標計算機提供了哪些服務。我們都知道,提供服務就一定有服務軟體的漏洞,根據這些,攻擊者可以達到對目標計算機的初步瞭解。
網路通訊的基礎是建立在套接字的基礎上的,套接字指的是由(客戶端IP:埠,伺服器IP:埠)構成。
◆伺服器方埠的選擇:
伺服器端的埠都是固定的,例如FTP服務預設使用21號埠、WWW伺服器使用80號埠、電子郵件伺服器使用25號埠、TELNET伺服器預設使用23號埠等等。這些埠一般都小於1024,稱為熟知埠。
◆客戶端埠號的選擇:
客戶端的埠號是隨機生成的,一般都大於1024。
◆小於1024的埠:
小於1024的埠,都是需要以root的身份才能啟動的, 這些埠主要是用於一些常見的服務,在Linux系統下,常見的協議與埠的對應在/etc/services檔案中。
有人曾經把伺服器比作房子,而把埠比作通向不同房間(服務)的門。入侵者要佔領這間房子,勢必要破門而入,那麼對於入侵者來說,瞭解房子開了幾扇門,都是什麼樣的門,門後面有什麼東西就顯得至關重要。入侵者通常會用掃描器對目標主機的埠進行掃描,以確定哪些埠是開放的,從開放的埠,入侵者可以知道目標主機大致提供了哪些服務,進而猜測可能存在的漏洞,因此對埠的掃描可以幫助我們更好的瞭解目標主機,而對於管理員,掃描本機的開放埠也是做好安全防範的第一步。Linux系統中,常用的埠掃描工具是nmap,號稱掃描之王。(使用nmap需要注意,隨意掃描別人的主機是違法的)
3.2掃描之王nmap
檢視埠的命令主要有兩個,一個是netstat,用來檢視本機的埠,另一個是掃描之王nmap,用來檢視其他主機的埠。
(1)Netstat的用法在前面小節中已經介紹過,更詳細的用法使用:
[root@localhost ~]# man netstat
【例】:檢視系統是否啟動23號埠。
[root@localhost ~]# netstat -tulpn |grep 23
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 2671/xinetd
說明系統已經正確的啟動了23號埠,也就是我們通常所說的伺服器端已經啟動了telnet服務,可以在客戶端使用telnet遠端連線到伺服器上進行遠端操作。
nmap是一個網路探測和安全掃描程式,系統管理者和個人可以使用這個軟體掃描大型的網路,獲取那臺主機正在執行以及提供什麼服務等資訊。nmap支援很多掃描技術,例如:UDP、TCP connect()、TCP SYN(半開掃描)、ftp代理(bounce攻擊)、反向標誌、ICMP、FIN、ACK掃描、聖誕樹(Xmas Tree)、SYN掃描和null掃描。nmap還提供了一些高階的特徵,例如:通過TCP/IP協議棧特徵探測作業系統型別,祕密掃描,動態延時和重傳計算,並行掃描,通過並行ping掃描探測關閉的主機,誘餌掃描,避開埠過濾檢測,直接RPC掃描(無須埠影射),碎片掃描,以及靈活的目標和埠設定。
nmap執行通常會得到被掃描主機埠的列表。nmap總會給出wellknown埠的服務名(如果可能)、埠號、狀態和協議等資訊。每個埠的狀態有:open、filtered、unfiltered。
open狀態意味著目標主機能夠在這個埠使用
accept()系統呼叫接受連線。
filtered狀態表示:防火牆、包過濾和其它的網路安全軟體掩蓋了這個埠,禁止 nmap探測其是否開啟。
unfiltered表示:這個埠關閉,並且沒有防火牆/包過濾軟體來隔離nmap的探測企圖。通常情況下,埠的狀態基本都是unfiltered狀態,只有在大多數被掃描的埠處於filtered狀態下,才會顯示處於unfiltered狀態的埠。
根據使用的功能選項,nmap也可以報告遠端主機的下列特徵:使用的作業系統、TCP序列、執行繫結到每個埠上的應用程式的使用者名稱、DNS名、主機地址是否是欺騙地址、以及其它一些東西。
預設情況下linux系統已經安裝好了nmap軟體,可以直接使用,該命令的語法非常複雜,其功能也非常強大,號稱掃描之王。如果對於網路安全和網路掃描有興趣,可以詳細的瞭解一下,這裡只簡單的介紹一下如何使用。
語法如下:
[root@linux ~]# nmap [掃瞄方式] [掃瞄引數] [主機地址]
引數:
[掃瞄方式]:
-sT:TCP connect()掃描
-sS:TCP同步掃描(TCP SYN)
-sP:ping掃描
-sU:UDP掃描
-sA:ACK掃描
[掃瞄引數]:主要的掃瞄引數有幾種:
-PT:掃描之前,使用TCP ping確定哪些主機正在執行
-PI:讓nmap使用真正的ping(ICMP echo請求)來掃描目標主機是否正在執行
-O:這個選項啟用對TCP/IP指紋特徵(fingerprinting)的掃描,獲得遠端主機的標誌
[主機地址]:被掃描的主機IP。
【例】掃描本機所開放的埠。
[root@localhost ~]# nmap localhost
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-10 20:09 CST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1673 closed ports
PORT STATE SERVICE
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
111/tcp open rpcbind
631/tcp open ipp
918/tcp open unknown
10000/tcp open snet-sensor-mgmt
Nmap finished: 1 IP address (1 host up) scanned in 0.175 seconds
說明,預設情況下nmap只掃描tcp協議開放的埠。如果想要了解UDP開放的埠。可以使用如下的命令。
[root@localhost ~]# nmap -sTU localhost
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-10 20:11 CST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 3155 closed ports
PORT STATE SERVICE
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
111/tcp open rpcbind
631/tcp open ipp
918/tcp open unknown
10000/tcp open snet-sensor-mgmt
111/udp open|filtered rpcbind
631/udp open|filtered unknown
912/udp open|filtered unknown
915/udp open|filtered unknown
32768/udp open|filtered omad
Nmap finished: 1 IP address (1 host up) scanned in 1.475 seconds
【例】掃描探測IP地址為202.196.1.235的主機的作業系統的相關資訊。
[root@localhost ~]# nmap -O 202.196.1.235
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-10 20:23 CST
Warning: OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port
Interesting ports on client1 (202.196.1.235):
Not shown: 1675 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
912/tcp open unknown
3389/tcp open ms-term-serv
MAC Address: 00:0F:EA:02:4A:BC (Giga-Byte Technology Co.)
Device type: general purpose|firewall
Running (JUST GUESSING) : Microsoft Windows NT/2K/XP|2003/.NET (93%), Linux 2.4.X (87%), Symantec embedded (87%), Apple Mac OS X 10.3.X (86%), Compaq Tru64 UNIX 4.X (86%), IBM AIX 4.X (85%)
Aggressive OS guesses: Microsoft Windows XP SP2 (93%), Astaro Security Linux 4 (Kernel 2.4.19) (87%), Microsoft Windows XP SP1 or Windows 2000 SP3 (87%), Symantec Gateway Security 5310 Firewall (87%), Symantec Gateway Security 5420 firewall (87%), Apple Mac OS X 10.3.6 or 10.3.7 (86%), Tru64 UNIX 4.0f - 4.0g (86%), Microsoft Windows 2003 Server or XP SP2 (86%), Microsoft Windows 2000 SP3 (86%), Microsoft Windows XP SP1 (86%)
No exact OS matches for host (test conditions non-ideal).
Nmap finished: 1 IP address (1 host up) scanned in 32.455 seconds
通過這個示例可以看到nmap可以探測到202.196.1.235的開放的埠,猜測作業系統的資訊等。
3.3埠的啟動與關閉
所謂的埠的啟動與關閉,實質上指的是埠對應的服務的啟動與關閉。例如我們想要啟動與關閉80號埠,具體操作如下:
【例】啟動httpd服務,也就是啟動了80號埠,關閉httpd服務,也就是關閉了80號埠。
[root@localhost ~]# /etc/init.d/httpd start
啟動 httpd: [確定]
[root@localhost ~]# netstat -tulpn |grep 80
tcp 0 0 :::80 :::* LISTEN 6550/httpd
[root@localhost ~]# /etc/init.d/httpd stop
停止 httpd: [確定]
[root@localhost ~]# netstat -tulpn |grep 80
[root@localhost ~]#
一般情況下,主機只開放必要的埠,因為多開放一個埠,就多了一個入侵主機的通道,所以從安全的角度來講,儘可能的關閉不需要的服務。
4網路啟動與關閉
4.1手工配置網路引數(static)
在Linux系統安裝好以後,需要適當的設定網路引數,然後才能正常的連線Internet。在區域網的環境中,常見的網路引數的設定有兩種方式:一種是手工的靜態的設定網路引數。另一種是區域網中有DHCP伺服器,這樣就可以自動的獲取網路引數。下面的小節中會詳細的分析這兩種方式下如何設定網路引數。
首先,來看如何靜態的配置網路引數:
4.1.1在字元終端設定網路引數
(1)首先可以設定主機名稱:/etc/sysconfig/network
[root@localhost ~]# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=localhost.localdomain //這裡可以更改主機名稱
需要注意,如果更改了主機名稱,最好重新啟動Linux系統,以便主機名生效。
(2)設定DNS伺服器地址:/etc/resolv.conf
[root@localhost ~]# vi /etc/resolv.conf
nameserver 202.196.0.1
設定DNS伺服器IP的目的是當訪問Internet時可以使用域名。而不是僅僅使用IP。
(3)設定IP地址等引數:/etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
NETMASK=255.255.255.0
IPADDR=202.196.1.234
GATEWAY=202.196.1.193
該檔案中各引數的含義前面已經介紹過,這裡需要注意的是需要正確的配置IP地址,掩碼及閘道器地址。其中BOOTPROTO設定為none,表示用手工的方式來配置。
(4)重新啟動網路。
配置完成以後需要重新啟動網路,這樣剛才的設定的網路引數就生效了。重新啟動網路的方式如下:
[root@localhost ~]# /etc/init.d/network restart
正在關閉介面 eth0: [確定]
關閉環回介面: [確定]
彈出環回介面: [確定]
彈出介面 eth0: [確定]
(5)測試網路聯通性。
測試閘道器的連通性:
[root@localhost ~]# ping -c 2 202.196.1.193
PING 202.196.1.193 (202.196.1.193) 56(84) bytes of data.
64 bytes from 202.196.1.193: icmp_seq=1 ttl=255 time=8.74 ms
64 bytes from 202.196.1.193: icmp_seq=2 ttl=255 time=3.97 ms
測試區域網中其他主機的連通性:
[root@localhost ~]# ping -c 2 202.196.1.235
PING 202.196.1.235 (202.196.1.235) 56(84) bytes of data.
64 bytes from 202.196.1.235: icmp_seq=1 ttl=64 time=0.121 ms
64 bytes from 202.196.1.235: icmp_seq=2 ttl=64 time=0.955 ms
測試DNS伺服器能否正確的解析域名:
[root@localhost ~]# nslookup www.zzuli.edu.cn
Server: 202.196.0.1
Address: 202.196.0.1#53
Name: www.zzuli.edu.cn
Address: 192.168.99.7
如果這裡的幾個測試都沒有問題,這樣主機就可以順利的訪問Internet了。
4.1.2在圖形桌面環境下設定網路引數
找到系統—>管理—>網路:首先點選“DNS”選項卡,在如下所示的介面中設定主機名和DNS伺服器IP地址。
然後點選“裝置”選項卡,選中“eth0”,點選“編輯”按鈕。
正確設定在介面中設定IP地址、子網掩碼、閘道器地址。然後點選確定。最後在各種引數都設定完成後,點選“啟用”按鈕。這樣網路配置就完成了。接下來就可以參考上一個小節引數網路的連通性了。
4.2自動獲取網路引數(dhcp)
如果主機處在區域網中,並且區域網中已經有一臺DHCP伺服器,那麼設定網路就非常簡單了,linux作為客戶端,網路設定方式如下:
4.2.1 字元介面設定
(1)設定主機名同4.1節相同。
(2)設定網路引數/etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
只需要設定三個專案即可。
(3)重新啟動網路方式見4.1節。
(4)測試連通性見4.1節。
4.2.2 圖形介面設定
具體見4.1節,在這裡選擇“自動獲取IP地址”即可,然後啟用網路。
5 小結
本章主要介紹了網路中常用的命令和網路引數有關的幾個檔案的基礎上,描述了網路埠相關概念和操作,最後給出了Linux主機正確的網路配置的方法。使讀者對Linux的網路有了一個清晰的認識。
相關文章
- Linux網路管理基礎Linux
- 【Linux】Linux網路配置基礎5 RHEL6 作業系統使用virtualbox NAT網路Linux作業系統
- Linux基礎之網路管理Linux
- Docker網路配置基礎知識Docker
- Linux基礎配置Linux
- 『學了就忘』Linux基礎命令 — 34、配置網路相關命令Linux
- linux網路配置Linux
- Linux|網路配置Linux
- 【Linux】(小白向)詳解VirtualBox網路配置-配置Linux網路Linux
- linux之網路配置Linux
- 配置Linux的網路Linux
- 基礎的 Linux 網路命令,你值得擁有Linux
- Linux基礎命令---netstat顯示網路狀態Linux
- Linux centOS如何配置網路LinuxCentOS
- 網路安全基礎
- Linux基礎命令---ntpdate網路時間伺服器Linux伺服器
- Linux系統下網路配置Linux
- Linux伺服器---網路配置Linux伺服器
- 網路通訊基礎
- Django專案在Linux下基礎配置DjangoLinux
- Linux虛擬機器網路配置Linux虛擬機
- **Linux 配置系統網路(動態)**Linux
- Linux 下網路介面卡配置Linux
- Linux 筆記分享十八:網路配置Linux筆記
- Linux系統網路檔案配置Linux
- Linux(08):網路配置檔案——其它Linux
- [Linux] Ubuntu 18 LTS netplan 網路配置LinuxUbuntu
- 網路安全基礎知識
- 0基礎學網路安全需要什麼基礎?
- docker學習第八天 docker 基礎之網路配置Docker
- 幾種Linux網路配置工具的使用Linux
- Linux(07):網路配置檔案——ifcfg-*Linux
- 嵌入式 Linux 基礎:環境配置(Debian 12 安裝配置)Linux
- 網路通訊技術基礎
- 網際網路後端基礎設施後端
- BSN-DDC基礎網路詳解(一):基礎介紹
- linux基礎Linux
- 0基礎轉行網際網路,Java、C++、Linux和Web前端哪種好?JavaC++LinuxWeb前端