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