本篇接着介绍网络相关命令
1、wget 文件下载工具
|
|
wget 是一个非交互的下载器,支持 HTTP, HTTPS 和 FTP 协议,也可以使用代理。所谓’非交互’意思是说,可以在一个系统中启动一个 wget 下载任务,然后退出系统,wget 会在完成下载 (或出现异常) 之后才退出,不需要用户参与。
|
|
命令的执行会经过域名解析、建立连接、发送请求、保存文件等过程,wget 还会显示下载进度条,包括下载百分比、大小、速度、用时。下载完成后显示完成时间、保存文件名、下载大小 / 总大小。
- 选项 -q 表示禁止输出
- 选项 -b 表示后台执行
- 选项 -r 表示递归下载
- 选项 -o logfile 表示将输出保存到文件 logfile 中
- 选项 -i file 表示从 file 中读取 URL 并进行下载
- 选项 -O file 表示下载文件保存至 file
- 选项 -c 断点续传,当下载一个大文件时使用此选项,如果碰到网络故障,可以从已经下载的部分开始继续下载未完成的部分。
- 选项 –limit-rate=amount 下载限速,amount 可以以 k,m 等为后缀表示速率为 KB/s 和 MB/s。
- 选项 –user-agent 指定用户代理
- 选项 –user 和选项 –password 指定用户和密码
- 选项 –load-cookies file 和选项 –save-cookies file 分别表示使用和保存文件中的 cookies。
- 选项 –accept list 和选项 –reject list 表示接受或排除 list 中所列文件。list 中用逗号分隔每个文件名的后缀。注意如果 list 中包含 shell 通配符 (* ? […]),将作为一个模式匹配,而不是文件后缀名。
2、curl 网络数据传输工具
|
|
curl 同样也可以做为文件下载工具,和 wget 相比,curl 支持更多的协议,在指定下载 URL 时支持序列或集合。但 curl 不支持递归下载。
curl 的 URL 可以表示成如下格式:
|
|
- 选项 -C offset 表示从断点 (offset) 的位置继续传输,其中 offset 是个数字,单位为 bytes。使用 - C - 时,curl 会自动在给定的文件中找出断点。
- 选项 -o file 表示下载文件保存至 file(注意 wget 使用的是 - O)
- 选项 -O 表示保存为文件的原始名字
- 选项 -s 忽略下载进度显示
- 选项 –limit-rate speed 指定下载速度,默认单位为 bytes/s,可以使用 k/K,m/M,g/G 后缀。
- 还可以指定许多其他下载相关的选项,这里不再一一介绍。
- 当 curl 没有其他选项时,会将页面内容输出至标准输出。
- 选项 -I 表示只获得 HTTP 头信息:
|
|
- 选项 -w format 按格式输出。
|
|
- 选项 -X METHOD 指定 http 请求方法
- 选项 -L 当指定的 URL 被重定向时 (http 状态码为 3xx),使用 - L 会使 curl 重新发送请求至新地址。
- 选项 -d 指定发送数据
这些选项在操作一个远程 http API 时会很有用
|
|
3、rsync 文件传输工具
rsync 的初衷是为了取代 scp,作为一个更快速,功能更强的文件传输工具。它使用 “rsync” 算法,可以实现每次只传输两个文件的不同部分(即增量备份)。
|
|
rsync 在本地和远程之间传输文件有两种工作模式,一种是利用 ssh 加密传输,类似于 scp;一种是守护进程 (daemon) 模式,使用命令 rsync –daemon 启动,作为 rsync 服务器为客户端服务。
|
|
- 选项 -r 表示递归
- 选项 -v 表示显示详细信息
- 选项 -a 表示保持文件所有属性并且递归地传输文件
如使用 ssh 将本地 /root/temp 目录及其内容同步至 10.0.1.253 的 /root/temp:
|
|
命令的执行开始会在源端 (此例中的本机:发送端) 创建文件列表(file list),在创建的过程中会将文件列表发送至目的端(此例中的 10.0.1.253:接收端)。发送完成之后,接收端对文件列表进行计算处理,保留接收端不存在的或变化的文件,创建新文件列表,然后发送回源端;发送端收到新文件列表后开始进行传输。
返回结果中显示了发送的文件以及一些汇总信息。
如执行完上述命令后更新其中一个文件,然后再次执行同步:
|
|
这次只有变化了的文件才被传输。
- 选项 –delete 会将接收端存在但发送端不存在的文件删除:
|
|
- 选项 –exclude=PATTERN 排除符合模式 PATTERN 的文件不传输 (同 tar 命令,例子见这里)
- 选项 –exclude-from=FILE 排除符合文件 FILE 内模式 (一行一个 PATTERN) 的文件不传输
- 选项 –include=PATTERN 和 –include-from=FILE 同理,表示包含某模式的文件才被传输
- 选项 -z 表示将文件压缩之后再传输。(即使使用此选项,有些文件默认时也不会被压缩,如某些 gz jpg mp4 avi zip 等结尾的文件)
- 默认时,rsync 会将部分传输的文件 (如连接被中断导致文件没有传输完) 删除。
- 选项 –partial 会保留这些部分传输的文件
- 选项 –progress 会打印出每个文件传输的状态信息,类似于:
|
|
选项 -P 等同于选项 –partial 和 –progress。
当使用 daemon 模式时,服务端使用默认配置文件 /etc/rsyncd.conf 和密码文件 /etc/rsyncd.secrets(可选)。(如不存在可手动创建)
配置文件的格式:
|
|
举例说明如下:
|
|
我们在 10.0.1.253 这台机器上的配置文件中写入了上述内容,然后把它作为 rsync 服务端启动起来:
|
|
然后,我们就可以使用 rsync 服务器来传输文件了。注意服务端防火墙允许对 TCP 873 端口的连接,本文后面有对防火墙的描述。如在 10.0.1.254 上拉取 (pull):
|
|
或者推送 (push):
|
|
根据配置文件,当同步 cvs 模块时需要对用户进行认证
在服务器端 (10.0.1.253):
|
|
在客户端 (10.0.1.254):
|
|
客户端同步时需要使用选项 –password-file 指定所用密码文件
PULL:
|
|
PUSH:
|
|
要注意上例中源目录的书写,在 rsync 中如果源目录不以 / 结尾,意味着将在目的目录下创建子目录,如:
|
|
可以在源目录结尾增加 / 来阻止这一行为:
|
|
配置文件中还可以设置其他参数如设置监听端口、指定日志文件、指定允许客户端列表等等,可使用命令 man rsyncd.conf 自行查看。
4、iptables 防火墙设置 (注:基于 linux2.6 内核)
iptables 通过定义一系列的规则利用内核的 netfilter 对每个网络包进行过滤。用户可以定义多种规则,实现对系统的防护。
首先我们先看一下一个网络数据包是怎样在系统中流转的,再来说明 netfilter 在哪些位置起作用:
|
|
netfilter 在 5 个位置放置了关卡
- PREROUTING (入站网络层错误检测之后,路由选择之前)
- INPUT (入站路由选择后,交给传输层处理之前)
- FORWARD (入站路由选择后,进行转发之前;然后到达 POSTROUTING)
- OUTPUT (出站路由选择之前)
- POSTROUTING (出站路由选择之后)
这 5 个位置即对应了 iptables 的 5 个规则链, 如图所示:
对于如何处理数据包,iptables 还定义了如下 4 张不同功能的表:
- raw 决定数据包是否被状态跟踪机制处理,可以作用的位置:OUTPUT、PREROUTING
- mangle 修改数据包的服务类型、TTL、并且可以配置路由实现 QOS,可以作用的位置:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
- nat 用于网络地址转换,可以作用的位置:PREROUTING、POSTROUTING、OUTPUT
- filter 过滤数据包,可以作用的位置:INPUT、FORWARD、OUTPUT
同一位置的不同表处理的优先级为 raw->mangle->nat->filter,但各表的使用频度正好相反,filter 表最常用 (也是 iptables 不使用选项 -t 指定表时的默认表),raw 表极少使用。
|
|
netfilter 在处理数据包时,会对照 iptables 指定的规则从上至下逐条进行匹配,如果符合某一条规则,就按这条规则的 ACTION 进行处理,这个表 (table) 后面的所有规则都将不会再对此包起作用。如果本表中所有的规则都没有匹配上,则进行默认的策略处理。(注意:同样的表可以作用于不同的链<位置>,不同的位置又可以有多张表。在定义规则或跟踪数据包在防火墙内的流动时,一定要清楚的知道当前数据包在哪个位置、进入了哪张表、匹配到表中相应规则链的哪条语句)
COMMAND 选项:
|
|
规则选项:
|
|
target
|
|
target 扩展
DNAT 对数据包进行目的地址转换,接受选项 –to-destination(只能用于 nat 表,PREROUTING 和 OUTPUT 链)
SNAT 对数据包进行源地址转换,接受选项 –to-source(只能用于 nat 表,POSTROUTING 和 INPUT 链)
如
|
|
LOG 对匹配包进行日志记录
REJECT 同 DROP 一样丢弃包,但返回错误信息。(只能用于 INPUT、FORWARD 和 OUTPUT 链)
REDIRECT 重定向匹配包 (只能用于 nat 表,PREROUTING 和 OUTPUT 链)
|
|
匹配扩展
icmp 匹配 icmp 协议,接受选项 –icmp-type 指定 icmp 类型
|
|
tcp 匹配 tcp 协议
udp 匹配 udp 协议
connlimit 连接限制
|
|
limit 限速
|
|
multiport 多端口
|
|
state 状态匹配
|
|
string 字符串匹配
|
|
time 匹配时间
一些例子:
|
|
由于mangle表和raw表很少使用,就没有举相关的例子,另外,如果允许linux主机进行转发(FORWARD),需要设置内核参数:echo 1 > /proc/sys/net/ipv4/ip_forward(临时),或sysctl -w net.ipv4.ip_forward=1 &>/dev/null(永久)。iptables的规则定义较复杂,还有许多选项没有在例子中使用到,读者可以自行man。