Linux_Shell腳本學習第八章-無網不利(下)

一、在本地掛載點上掛載遠程驅動器

在執行數據讀寫操作時,如果可以通過本地掛載點訪問遠程主機文件系統,那就再好不過了。SSH是網絡中常用的文件傳輸協議。sshfs利用SSH實現了在本地掛載點上掛載遠程文件系統。

1.1 將位於遠程主機上的文件系統掛載到本地掛載點上

# sshfs -o allow_other user@remotehost:/home/path /mnt/mountpoint
Password:

在收到提示時輸入密碼。現在位於遠程主機/home/path中的數據就可以通過本地掛載點/mnt/mountpoint來訪問了。
使用下面的命令卸載:

# umount /mnt/mountpoint

二、分析網絡流量與端口

lsof和netstat命令可用來列出端口以及運行在端口上的服務。

2.1 lsof

lsof(list open files)命令可以列出已打開的文件。選項-i將範圍限制在已打開的網絡連接:

$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE
NAME
firefox-b 2261 slynux 78u IPv4 63729 0t0 TCP
localhost: 47797->localhost:42486 (ESTABLISHED)
firefox-b 2261 slynux 80u IPv4 68270 0t0 TCP
slynux-laptop.local:41204->192.168.0.2:3128 (CLOSE_WAIT)
firefox-b 2261 slynux 82u IPv4 68195 0t0 TCP
slynux-laptop.local:41197->192.168.0.2:3128 (ESTABLISHED)
ssh 3570 slynux 3u IPv6 30025 0t0 TCP
localhost:39263->localhost:ssh (ESTABLISHED)
ssh 3836 slynux 3u IPv4 43431 0t0 TCP
slynux-laptop.local:40414->boney.mt.org:422 (ESTABLISHED)
GoogleTal 4022 slynux 12u IPv4 55370 0t0 TCP
localhost:42486 (LISTEN)
GoogleTal 4022 slynux 13u IPv4 55379 0t0 TCP
localhost:42486->localhost:32955 (ESTABLISHED)

lsof的每一項輸出都對應着一個開放端口上的服務。輸出的最後一列類似於:

laptop.local:41197->192.168.0.2:3128

輸出中的laptop.local:41197對應本地主機,192.168.0.2:3128對應遠程主機。41197是本地主機當前的開放端口,3128是遠程主機上的服務端口。

要列出本地主機當前的開放端口,可以使用下列命令:

$ lsof -i | grep ":[0-9a-z] +->" -o | grep "[0-9a-z] +" -o | sort | uniq

第一個grep中使用的正則表達式:[0-9a-z]±>用來從lsof輸出中提取主機端口部分(:34395->或:ssh->)。第二個grep用來刪除起始的冒號以及末尾的箭頭,提取端口號(數字)。多個連接可能會使用同一個端口,因此相同的端口也許會出現多次。爲了保證每個端口只顯示一次,將端口號排序並使用uniq命令打印出不重複的部分。

2.1 netstat

用netstat查看開放端口與服務
用netstat -tnp列出開放端口與服務:

$ netstat –tnp
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 192.168.0.82:38163 192.168.0.2:3128
ESTABLISHED 2261/firefox-bin
tcp 0 0 192.168.0.82:38164 192.168.0.2:3128
TIME_WAIT -
tcp 0 0 192.168.0.82:40414 193.107.206.24:422
ESTABLISHED 3836/ssh
tcp 0 0 127.0.0.1:42486 127.0.0.1:32955
ESTABLISHED 4022/GoogleTalkPlug
tcp 0 0 192.168.0.82:38152 192.168.0.2:3128
ESTABLISHED 2261/firefox-bin
tcp6 0 0 ::1:22 ::1:39263
ESTABLISHED -
tcp6 0 0 ::1:39263 ::1:22
ESTABLISHED 3570/ssh

三、測量網絡帶寬

iperf能夠提供更多的網絡性能指標。
iperf必須安裝在鏈路的兩端(服務器端和客戶端)。安裝好之後,啓動服務器端:

$ iperf -s

然後運行客戶端,生成吞吐量統計:

$ iperf -c 192.168.1.36
------------------------------------------------------------
Client connecting to 192.168.1.36, TCP port 5001
TCP window size: 19.3 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.44 port 46526 connected with 192.168.1.36 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 113 MBytes 94.7 Mbits/sec
選項-m會使得iperf找出最大傳輸單元(Maximum Transfer Size,MTU):
$ iperf -mc 192.168.1.36
------------------------------------------------------------
Client connecting to 192.168.1.36, TCP port 5001
TCP window size: 19.3 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.44 port 46558 connected with 192.168.1.36 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 113 MBytes 94.7 Mbits/sec
[ 3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

四、創建套接字

netcat或nc命令都可以創建用於在TCP/IP網絡上傳輸數據的套接字。我們需要兩個套接字:一個負責偵聽連接,一個負責發起連接。

4.1 設置偵聽套接字

nc -l 1234

這會在本地主機的端口1234上創建一個偵聽套接字。

4.2 連接到該套接字

nc HOST 1234

如果是在運行着偵聽套接字的主機上執行該命令,那麼需要將HOST更換成localhost,否則將其更換成其他主機的IP地址或主機名。

4.3 在網絡上快速複製文件

我們可以利用netcat和shell重定向在網絡上覆制文件。下面的命令能夠向偵聽主機發送文件。
(1) 在偵聽端執行下列命令:

nc -l 1234 > destination_filename

(2) 在發送端執行下列命令:

nc HOST 1234 < source_filename

4.4 創建廣播服務器

你可以利用netcat創建定製服務器。下面的腳本創建了一個能夠定時(每隔10秒)發送時間的服務器。可以使用客戶端連接到偵聽端口獲取時間:

# 該腳本會將時間發送到端口
while [ 1 ]
do
sleep 10
date
done | nc -l 12345
echo exited

五、搭建網橋

如果你有兩個獨立的網絡,可能需要某種方法將數據從一個網絡傳到另一個網絡。這通常可以通過使用路由器、集線器或交換機連接兩個網絡來實現。
Linux系統可以作爲網橋使用。
網橋是一種低層連接,它並不是基於IP地址,而是使用MAC地址傳遞分組。其自身需要的資
源更少,效率也更高。

5.1 使用ip link命令搭建網橋

在下面的例子中,有兩個網卡:eth0被配置連接到子網192.168.1.0,eth1沒有配置,但會通過網橋連接到子網10.0.0.0。

# 創建名爲br0的新網橋
ip link add br0 type bridge

# 將以太網適配器添加到網橋
ip link set dev eth1 master br0

# 配置網橋的IP地址
ifconfig br0 10.0.0.2

# 啓用分組轉發
echo 1 >/proc/sys/net/ipv4/ip_forward

所創建出的網橋使得分組可以在eth0和eth1之間傳遞。在網橋生效之前,我們需要將其加入路由表。
對於網絡10.0.0.0/24中的主機,添加到網絡192.168.1.0/16路由表項:

route add -net 192.168.1.0/16 gw 10.0.0.2

網絡192.168.1.0/16中的主機需要知道如何找到網絡10.0.0.0/24。如果eth0配置了IP地192.168.1.2,則使用route命令:

route add -net 10.0.0.0/24 gw 192.168.1.2

六、Internet 連接共享

大多數防火牆/路由器都能夠讓你的家庭或辦公室設備共享Internet連接。這種技術叫作網絡地址轉換(Network Address Translation,NAT)。安裝了兩塊網絡接口卡(Network Interface Card,NIC)的Linux計算機可以用作路由器,提供防火牆保護以及連接共享。

我們使用iptables設置了網絡地址轉換,使得多個聯網設備能夠共享Internet連接。你需要使用iwconfig命令來獲得無線接口的名稱。

6.1 連接到Internet(電腦開熱點)

在這裏我們假設使用的是有線網絡連接,通過eth0連接到Internet。

6.2 使用發行版自帶的網絡管理工具,創建一個新的ad hoc無線連接,配置如下

 IP地址:10.99.66.55。
 子網掩碼:255.255.0.0(16)。

6.3 使用下面的shell腳本來實現Internet連接共享

#!/bin/bash
#文件名: netsharing.sh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i $1 -o $2 -s 10.99.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

6.4 執行腳本

./netsharing.sh eth0 wlan0

其中,eth0是連接到Internet的接口,wlan0是無線接口,支持與其他設備共享Internet連接。

6.5 將設備連接到剛纔創建的無線網絡

 IP地址:10.99.66.56(以此類推)。
 子網掩碼:255.255.0.0。

七、使用iptables 架設簡易防火牆

防火牆是一種網絡服務,它可以過濾、阻止不需要的網絡流量,允許正常的網絡流量通過。Linux中的標準防火牆工具是iptables,它目前已經被集成到了內核中。

7.1 如果你不希望訪問特定站點(例如惡意站點),可以阻止發送到該IP地址的流量

#iptables -A OUTPUT -d 8.8.8.8 -j DROP

如果在另一個終端中執行PING 8.8.8.8,然後再執行iptables命令,你會看到:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=56 time=221 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=56 time=221 ms
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

ping命令在執行到第三次的時候失敗了,這是因爲我們使用iptables將所有發送到8.8.8.8的流量給丟棄了。

7.2 阻止發送到特定端口的流量

#iptables -A OUTPUT -p tcp -dport 21 -j DROP
$ ftp ftp.kde.org
ftp: connect: Connection timed out

如果你在/var/log/secure或/var/log/messages中發現類似於下面的信息,就說明碰上了一點小麻煩:

Failed password for abel from 1.2.3.4 port 12345 ssh2
Failed password for baker from 1.2.3.4 port 12345 ssh2

這些信息說明有機器人正在探測你的系統是否存在弱密碼。你可以使用INPUT規則阻止機器
人訪問站點,這條規則會丟棄所有機器人所在地址的流量:

#iptables -I INPUT -s 1.2.3.4 -j DROP

7.3 iptables工作原理

iptables是Linux系統中用來配置防火牆的命令。iptables中的第一個選項可以是-A,表明向鏈(chain)中添加一條新的規則,也可以是-I,表明將新的規則插入到規則集的開頭。接下來的參數指定了鏈。所謂鏈就是若干條規則的集合,在早先的例子中我們使用的是OUTPUT鏈,它可以控制所有的出站流量(outgoing traffic),而在上一個例子中,用到的是INPUT鏈,它能夠控制所有的入站流量(incoming traffic)。

-d指定了所要匹配的分組目的地址,-s指定了分組的源地址。最後,-j指示iptables執行到特定的處理(action)。在這些例子中,我們對分組採用的處理方式是DROP(丟棄)。其他處理方式還包括ACCEPT和REJECT。
在第二個例子中,-p指定規則僅適用於TCP,-dport指定了對應的端口。這樣我們就可以
只阻止所有出站的FTP流量了。

7.4 清除

可以使用選項-flush清除對iptables鏈所作出的所有改動:

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