本篇接着介绍网络相关命令:wget 文件下载工具、curl 网络数据传输工具、rsync 文件传输工具等。

本篇接着介绍网络相关命令

1、wget 文件下载工具

  1. wget [option]... [URL]...

wget是一个非交互的下载器,支持HTTP, HTTPS和FTP协议,也可以使用代理。所谓'非交互'意思是说,可以在一个系统中启动一个wget下载任务,然后退出系统,wget会在完成下载(或出现异常)之后才退出,不需要用户参与。

  1. [root@centos7 temp]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-6/v6.0.47/bin/apache-tomcat-6.0.47.tar.gz
  2. --2016-11-15 12:16:24--  http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-6/v6.0.47/bin/apache-tomcat-6.0.47.tar.gz
  3. 正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 166.111.206.63, 2402:f000:1:416:166:111:206:63
  4. 正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|166.111.206.63|:80... 已连接。
  5. 已发出 HTTP 请求,正在等待回应... 200 OK
  6. 长度:7084545 (6.8M) [application/octet-stream]
  7. 正在保存至: “apache-tomcat-6.0.47.tar.gz”
  8. 100%[===========================================================>] 7,084,545   2.28MB/s 用时 3.0s
  9. 2016-11-15 12:16:27 (2.28 MB/s) - 已保存 “apache-tomcat-6.0.47.tar.gz” [7084545/7084545])

命令的执行会经过域名解析、建立连接、发送请求、保存文件等过程,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 网络数据传输工具

  1. curl [options] [URL...]

curl同样也可以做为文件下载工具,和wget相比,curl支持更多的协议,在指定下载URL时支持序列或集合。但curl不支持递归下载。

curl的URL可以表示成如下格式:

  1. #可以将几个个字符串放到大括号里用逗号分隔来表示多个URL
  2. http://site.{one,two,three}.com
  3. #可以将字母数字序列放在[]中表示多个文件或URL(和shell通配符类似但并不相同)
  4. ftp://ftp.numericals.com/file[1-100].txt
  5. ftp://ftp.numericals.com/file[001-100].txt
  6. ftp://ftp.letters.com/file[a-z].txt
  7. #还能用冒号:n表示在序列中每隔n个取一个值
  8. http://www.numericals.com/file[1-100:10].txt
  9. http://www.letters.com/file[a-z:2].txt
  10. #不支持大括号和中括号的嵌套,但可以在一条URL中分开同时使用它们
  11. http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html

选项-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头信息:

  1. [root@centos7 ~]# curl -I www.baidu.com
  2. HTTP/1.1 200 OK
  3. Server: bfe/1.0.8.18
  4. Date: Tue, 15 Nov 2016 07:20:50 GMT
  5. Content-Type: text/html
  6. Content-Length: 277
  7. Last-Modified: Mon, 13 Jun 2016 02:50:02 GMT
  8. Connection: Keep-Alive
  9. ETag: "575e1f5a-115"
  10. Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
  11. Pragma: no-cache
  12. Accept-Ranges: bytes

选项-w format按格式输出。

  1. #如获得HTTP状态码:
  2. [root@centos7 ~]# curl -s -w "%{http_code}\n" www.baidu.com -o /dev/null
  3. 200
  4. [root@centos7 ~]#
  5. #如获得服务器端IP地址:
  6. [root@centos7 ~]# curl -s -w "%{remote_ip}\n" www.baidu.com -o /dev/null
  7. 61.135.169.125
  8. [root@centos7 ~]#

选项-X METHOD指定http请求方法

选项-L 当指定的URL被重定向时(http状态码为3xx),使用-L会使curl重新发送请求至新地址。

选项-d指定发送数据

这些选项在操作一个远程http API时会很有用

  1. #删除peer2
  2. curl -L -XDELETE http://127.0.0.1:2380/v2/admin/machines/peer2
  3. #用PUT方法发送给指定URL数据
  4. curl -L http://127.0.0.1:2379/v2/keys/message -XPUT -d 'value="Hello world"'
  5. #指定数据可以是JSON格式的字符串
  6. curl -L http://127.0.0.1:2380/v2/admin/config -XPUT -d '{"activeSize":3, "removeDelay":1800,"syncInterval":5}'

选项-T file表示上传文件file

  1. curl -T test.sql ftp://name:password@ip:port/demo/curtain/bbstudy_files/
  2. #注意这里是如何指定ftp用户、密码、IP、端口的;也可以使用选项-u user:password指定用户和密码

3、rsync 文件传输工具

rsync的初衷是为了取代scp,作为一个更快速,功能更强的文件传输工具。它使用“rsync”算法,可以实现每次只传输两个文件的不同部分(即增量备份)。

  1. rsync [OPTION...] SRC... [DEST]
  2. #类似于cp,本地传输。当目的(DEST)省略时,会以`ls -l`的风格列出源文件列表
  3. [root@centos7 temp]# rsync .
  4. drwxr-xr-x         102 2016/11/16 09:47:10 .
  5. -rw-r--r--           0 2016/11/10 22:02:25 b.txt
  6. -rw-r--r--           0 2016/11/10 22:02:25 c.txt
  7. -rw-r--r--           0 2016/11/10 22:02:25 d.txt
  8. -rw-r--r--           0 2016/11/10 22:02:25 e.txt
  9. -rw-r--r--           0 2016/11/10 22:02:25 f.txt
  10. -rw-r--r--        1979 2016/11/08 15:49:31 file
  11. -rw-r--r--          10 2016/11/07 18:01:33 test
  12. -rwxr-xr-x          24 2016/11/04 09:03:18 test.sh

rsync在本地和远程之间传输文件有两种工作模式,一种是利用ssh加密传输,类似于scp;一种是守护进程(daemon)模式,使用命令rsync --daemon启动,作为rsync服务器为客户端服务。

  1. #通过ssh
  2. rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  3. rsync [OPTION...] SRC... [USER@]HOST:DEST
  4. #通过daemon
  5. rsync [OPTION...] [USER@]HOST::SRC... [DEST]
  6. rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  7. rsync [OPTION...] SRC... [USER@]HOST::DEST
  8. rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

选项-r表示递归

选项-v表示显示详细信息

选项-a表示保持文件所有属性并且递归地传输文件

如使用ssh将本地/root/temp目录及其内容同步至10.0.1.253的/root/temp:

  1. #注意源和目的主机都需要有rsync命令
  2. [root@centos7 temp]# rsync -av . root@10.0.1.253:/root/temp
  3. sending incremental file list
  4. created directory /root/temp
  5. ./
  6. b.txt
  7. c.txt
  8. d.txt
  9. e.txt
  10. f.txt
  11. file
  12. test
  13. test.sh
  14. sent 2468 bytes  received 167 bytes  5270.00 bytes/sec
  15. total size is 2013  speedup is 0.76

命令的执行开始会在源端(此例中的本机:发送端)创建文件列表(file list),在创建的过程中会将文件列表发送至目的端(此例中的10.0.1.253:接收端)。发送完成之后,接收端对文件列表进行计算处理,保留接收端不存在的或变化的文件,创建新文件列表,然后发送回源端;发送端收到新文件列表后开始进行传输。

返回结果中显示了发送的文件以及一些汇总信息。

如执行完上述命令后更新其中一个文件,然后再次执行同步:

  1. [root@centos7 temp]# echo "hello world" >> d.txt
  2. [root@centos7 temp]# rsync -av . root@10.0.1.253:/root/temp
  3. sending incremental file list
  4. d.txt
  5. sent 193 bytes  received 31 bytes  448.00 bytes/sec
  6. total size is 2025  speedup is 9.04

这次只有变化了的文件才被传输。

选项--delete会将接收端存在但发送端不存在的文件删除:

  1. [root@centos7 temp]# rm -f test
  2. [root@centos7 temp]# rsync -av --delete . root@10.0.1.253:/root/temp
  3. sending incremental file list
  4. ./
  5. deleting test                      #这里删除了接收端的test文件
  6. sent 132 bytes  received 15 bytes  98.00 bytes/sec
  7. total size is 2015  speedup is 13.71

选项--exclude=PATTERN排除符合模式PATTERN的文件不传输(同tar命令,例子见这里)

选项--exclude-from=FILE排除符合文件FILE内模式(一行一个PATTERN)的文件不传输

选项--include=PATTERN和--include-from=FILE同理,表示包含某模式的文件才被传输

选项-z表示将文件压缩之后再传输。(即使使用此选项,有些文件默认时也不会被压缩,如某些gz jpg mp4 avi zip等结尾的文件)

默认时,rsync会将部分传输的文件(如连接被中断导致文件没有传输完)删除。

选项--partial会保留这些部分传输的文件

选项--progress会打印出每个文件传输的状态信息,类似于:

  1. 782448 63% 110.64kB/s 0:00:04 #这里文件已被传输了63%

选项-P等同于选项--partial和--progress。

当使用daemon模式时,服务端使用默认配置文件/etc/rsyncd.conf和密码文件/etc/rsyncd.secrets(可选)。(如不存在可手动创建)

配置文件的格式:

/etc/rsyncd.conf的内容由两部分组成,模块(modules)和参数(parameters);

模块以中括号包含模块名(`[modul]`)为开头一直到下一个模块开头之前。

模块包含形如"name = value"的多个参数。

文件中以符号#开头的行是注释行,起描述性作用,没有实际效果。

文件是基于行的。意思是说每一行表示一条注释或者模块开头或者一个参数,多个参数的话,只有第一个起作用。

在第一个模块之前的参数会作为全局参数,作为默认值适用于每个模块。

举例说明如下:

  1. [root@idc-v-71253 temp]# cat /etc/rsyncd.conf
  2. # /etc/rsyncd: configuration file for rsync daemon mode
  3. # 注释行
  4. # global parameters
  5. uid = nobody            #指定传输文件时守护进程应该具有的uid
  6. gid = nobody            #指定传输文件时守护进程应该具有的gid
  7. use chroot = true       #在传输之前会chroot到该模块path参数所指定的目录
  8. max connections = 4     #最大并发连接数量
  9. pid file = /var/run/rsyncd.pid  #指定rsync的pid文件
  10. timeout = 900           #指定超时时间,单位是秒
  11. read only = false       #允许客户端上载文件到服务端(默认为true,禁止上传)。
  12. dont compress = *.gz *.tgz *.zip *.z *.bz2 #指定特定后缀名的文件在传输之前不被压缩
  13. #modules
  14. [temp]          #模块
  15. path = /home/temp  #服务端该模块可用目录,每个模块都必须指定此参数
  16. comment = test for command rsync(daemon) #描述字符串
  17. [cvs]
  18. path = /data/cvs
  19. comment = CVS repository (requires authentication)
  20. auth users = tridge, susan   #允许连接到此模块的用户,这里的用户和系统用户没关系。
  21. secrets file = /etc/rsyncd.secrets #前面参数“auth users”所使用的密码文件

我们在10.0.1.253这台机器上的配置文件中写入了上述内容,然后把它作为rsync服务端启动起来:

  1. [root@idc-v-71253 temp]# rsync --daemon
  2. [root@idc-v-71253 temp]# ls -l /var/run/rsyncd.pid
  3. -rw-r--r-- 1 root root 6 11月 16 14:03 /var/run/rsyncd.pid
  4. #这里看到新创建的pid文件
  5. [root@idc-v-71253 log]# cat /var/run/rsyncd.pid
  6. 29623
  7. #默认守护进程模式的rsync服务端会通过系统的syslog(一个系统服务)记录日志,保存于/var/log/messages中
  8. [root@idc-v-71253 log]# tail -1 /var/log/messages
  9. Nov 16 14:03:44 idc-v-71253 rsyncd[29623]: rsyncd version 3.0.9 starting, listening on port 873
  10. #这里看到rsyncd已经启动了,监听端口873
  11. [root@idc-v-71253 log]# chown -R nobody.nobody /root/temp
  12. #改变模块中path所指定的目录的权限以使它和全局参数uid,gid一致

然后,我们就可以使用rsync服务器来传输文件了。注意服务端防火墙允许对TCP 873端口的连接,本文后面有对防火墙的描述。如在10.0.1.254上拉取(pull):

  1. [root@centos7 temp]# ls
  2. b.txt  c.txt  d.txt  e.txt  file  f.txt  test.sh
  3. [root@centos7 temp]# rm -rf *
  4. [root@centos7 temp]# rsync -avP --delete 10.0.1.253::temp ./  #注意书写格式与使用ssh时的不同
  5. receiving incremental file list
  6. ./
  7. b.txt
  8. 13 100%   12.70kB/s    0:00:00 (xfer#1, to-check=6/8)
  9. c.txt
  10. 0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=5/8)
  11. d.txt
  12. 12 100%   11.72kB/s    0:00:00 (xfer#3, to-check=4/8)
  13. e.txt
  14. 0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=3/8)
  15. f.txt
  16. 0 100%    0.00kB/s    0:00:00 (xfer#5, to-check=2/8)
  17. file
  18. 1979 100%    1.89MB/s    0:00:00 (xfer#6, to-check=1/8)
  19. test.sh
  20. 24 100%   23.44kB/s    0:00:00 (xfer#7, to-check=0/8)
  21. sent 162 bytes  received 2476 bytes  5276.00 bytes/sec
  22. total size is 2028  speedup is 0.77

或者推送(push):

  1. [root@centos7 temp]# echo 'BLOG ADDRESS IS "https://segmentfault.com/blog/learnning"' >> c.txt
  2. [root@centos7 temp]# rm -f file
  3. [root@centos7 temp]# rsync -avP --delete . rsync://10.0.1.253/temp #注意格式
  4. sending incremental file list
  5. ./
  6. deleting file
  7. c.txt
  8. 58 100%    0.00kB/s    0:00:00 (xfer#1, to-check=4/7)
  9. sent 235 bytes  received 30 bytes  530.00 bytes/sec
  10. total size is 107  speedup is 0.40
  11. [root@centos7 temp]#

根据配置文件,当同步cvs模块时需要对用户进行认证

在服务器端(10.0.1.253):

  1. #编辑密码文件写入所示内容
  2. [root@idc-v-71253 cvs]# vim /etc/rsyncd.secrets
  3. tridge:123456
  4. susan:654321
  5. #还需要改变文件权限
  6. [root@idc-v-71253 cvs]# chmod 600 /etc/rsyncd.secrets

在客户端(10.0.1.254):

  1. [root@centos7 temp]# touch /etc/tridge.pass
  2. [root@centos7 temp]# echo 123456 > /etc/tridge.pass
  3. [root@centos7 temp]# touch /etc/susan.pass
  4. [root@centos7 temp]# echo 654321 > /etc/susan.pass
  5. [root@centos7 temp]# chmod 600 /etc/tridge.pass /etc/susan.pass

客户端同步时需要使用选项--password-file指定所用密码文件

PULL:

  1. [root@centos7 temp]# rsync -avP --delete --password-file=/etc/tridge.pass rsync://tridge@10.0.1.253/cvs /data/cvs #注意格式
  2. receiving incremental file list
  3. A/a.txt
  4. 20 100%   19.53kB/s    0:00:00 (xfer#1, to-check=675/703)
  5. A/b.txt
  6. 20 100%    6.51kB/s    0:00:00 (xfer#2, to-check=674/703)
  7. .... #省略部分输出
  8. Z/y.txt
  9. 78 100%    1.27kB/s    0:00:00 (xfer#675, to-check=1/703)
  10. Z/z.txt
  11. 78 100%    1.27kB/s    0:00:00 (xfer#676, to-check=0/703)
  12. sent 16981 bytes  received 71532 bytes  1416.21 bytes/sec
  13. total size is 34632  speedup is 0.39

PUSH:

  1. [root@centos7 temp]# echo "baby on the way..." | tee -a /data/cvs/A/*
  2. baby on the way...
  3. [root@centos7 temp]# rm -rf /data/cvs/B
  4. [root@centos7 temp]# rsync -avP --delete --password-file=/etc/susan.pass /data/cvs/ susan@10.0.1.253::cvs
  5. sending incremental file list
  6. ./
  7. deleting B/z.txt
  8. deleting B/y.txt
  9. deleting B/x.txt
  10. ....
  11. deleting B/a.txt
  12. deleting B/
  13. A/a.txt
  14. 55 100%    0.00kB/s    0:00:00 (xfer#1, to-check=675/703)
  15. A/b.txt
  16. 55 100%   53.71kB/s    0:00:00 (xfer#2, to-check=674/703)
  17. ....
  18. A/y.txt
  19. 55 100%   53.71kB/s    0:00:00 (xfer#25, to-check=651/703)
  20. A/z.txt
  21. 55 100%   53.71kB/s    0:00:00 (xfer#26, to-check=650/703)
  22. sent 10331 bytes  received 684 bytes  22030.00 bytes/sec
  23. total size is 35542  speedup is 3.23

要注意上例中源目录的书写,在rsync中如果源目录不以/结尾,意味着将在目的目录下创建子目录,如:

  1. rsync -avz foo:src/bar /data/tmp
  2. #此时会将源目录src/bar内所有的内容传送至目标/data/tmp/bar内

可以在源目录结尾增加/来阻止这一行为:

  1. rsync -avz foo:src/bar/ /data/tmp
  2. #此时会将源目录src/bar内所有的内容传送至目标/data/tmp内,不会创建子目录bar

配置文件中还可以设置其他参数如设置监听端口、指定日志文件、指定允许客户端列表等等,可使用命令man rsyncd.conf自行查看。

4、iptables 防火墙设置(注:基于linux2.6内核)

iptables通过定义一系列的规则利用内核的netfilter对每个网络包进行过滤。用户可以定义多种规则,实现对系统的防护。

首先我们先看一下一个网络数据包是怎样在系统中流转的,再来说明netfilter在哪些位置起作用:

#入站

1)数据包从网络到达网卡,网卡接收帧,放入网卡buffer中,并向系统发送中断请求。

2)cpu调用网卡驱动程序中相应的中断处理函数,将buffer中的数据读入内存。

3)链路层对帧进行CRC校验,正常则将其放入自己的队列,置软中断标志位。

4)进程调度器看到了标志位,调度相应进程,该进程将包从队列取出,与相应协议匹配,一般为ip协议,再将包传递给该协议接收函数。

5)网络层对包进行错误检测,没错的话,进行路由选择。

6)此时的路由操作将包分为两类,一类是本地包,继续交给传输层处理;一类是转发包,将会到达出站的第5步,路由选择之后。

7)传输层收到报文段后将进行校验,校验通过后查找相应端口关联socket,数据被放入相应socket接收队列

8)socket唤醒拥有该socket的进程,进程从系统调用read中返回,将数据拷贝到自己的buffer。然后进行相应的处理。

#出站

1)应用程序调用系统调用,将数据发送给socket。

2)socket检查数据类型,调用相应的send函数。

3)send函数检查socket状态、协议类型,传给传输层。

4)传输层为这些数据创建数据结构,加入协议头部,比如端口号、检验和,传给网络层。

5)ip(网络层协议)添加ip头,对包进行路由选择,然后将包传给链路层。

6)链路层将包组装成帧,发送至至网卡的send队列。

7)网卡将帧组织成二进制比特流发送至物理媒体上(网线)。

netfilter在5个位置放置了关卡

PREROUTING (入站网络层错误检测之后,路由选择之前)

INPUT (入站路由选择后,交给传输层处理之前)

FORWARD (入站路由选择后,进行转发之前;然后到达POSTROUTING)

OUTPUT (出站路由选择之前)

POSTROUTING (出站路由选择之后)

这5个位置即对应了iptables的5个规则链,如图所示:

对于如何处理数据包,iptables还定义了如下4张不同功能的表:

1、raw 决定数据包是否被状态跟踪机制处理

可以作用的位置:OUTPUT、PREROUTING

2、mangle 修改数据包的服务类型、TTL、并且可以配置路由实现QOS

可以作用的位置:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

3、nat 用于网络地址转换

可以作用的位置:PREROUTING、POSTROUTING、OUTPUT

4、filter 过滤数据包

可以作用的位置:INPUT、FORWARD、OUTPUT

同一位置的不同表处理的优先级为 raw->mangle->nat->filter,但各表的使用频度正好相反,filter表最常用(也是iptables不使用选项-t指定表时的默认表),raw表极少使用。

  1. #语法
  2. iptables [-t table] COMMAND chain rule-specification
  3. -t table 指定表,省略时表示filter表
  4. COMMAND 定义如何对规则进行管理
  5. chain   指定规则生效的位置(规则链)
  6. rule-specification = [matches...] [target] 特定规则,包括匹配和目标
  7. match = -m matchname [per-match-options] 匹配
  8. target = -j targetname [per-target-options] 目标

netfilter在处理数据包时,会对照iptables指定的规则从上至下逐条进行匹配,如果符合某一条规则,就按这条规则的ACTION进行处理,这个表(table)后面的所有规则都将不会再对此包起作用。如果本表中所有的规则都没有匹配上,则进行默认的策略处理。(注意:同样的表可以作用于不同的链<位置>,不同的位置又可以有多张表。在定义规则或跟踪数据包在防火墙内的流动时,一定要清楚的知道当前数据包在哪个位置、进入了哪张表、匹配到表中相应规则链的哪条语句)

COMMAND 选项:

-A 追加规则(尾部)。

-D 删除规则(后面可以是规则描述或者规则号<第几条>)

-I 插入规则(可以指定在第几条之后插入)

-R 替换规则

-L 列出规则

-F 清除规则

-Z 清空匹配统计

-N 创建自定义链

-X 删除自定义链(链必须为空且没有其它链指向此链)

-P 指定链默认策略

-E 重命名链

规则选项:

-p 指定协议

-s 指定源(可以是ip地址,ip网段,主机名)

-d 指定目的(同-s)

-j target 跳转到目标,目标可以是:用户自定义链;特殊内建目标(DROP,ACCEPT等);扩展(EXTENSIONS)

-g chain 使数据包到指定自定义链中处理,完成后继续在上一次由-j跳转到本链的位置处继续处理

-i name 指定入站网卡名

-o name 指定出站网卡名

-v 显示详细信息

-n 数字化输出(域名等显示为IP)

--line-numbers 显示行号

target

  1. ACCEPT 表示允许包通过
  2. DROP   表示丢弃该包
  3. RETURN 表示停止执行当前链后续规则,返回到调用链中
  4. QUEUE  将数据包移交到用户空间

EXTENSIONS包含两种,一种是target扩展,表示对数据包做某种处理;一种是使用选项-m构成的匹配扩展,表示指定某种匹配方式。

target扩展

DNAT对数据包进行目的地址转换,接受选项--to-destination(只能用于nat表,PREROUTING和OUTPUT链)

SNAT对数据包进行源地址转换,接受选项--to-source(只能用于nat表,POSTROUTING和INPUT链)

  1. #将目的地址为221.226.x.x,目的端口为80的数据包做DNAT,使目的地址为192.168.5.16,目的端口为80
  2. iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 80 -j DNAT --to-destination 192.168.5.16:80
  3. #将源地址为192.168.5.16,源端口为80的数据包做SNAT,使源地址变为221.226.x.x
  4. iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 80 -j SNAT --to-source 221.226.x.x

LOG对匹配包进行日志记录

REJECT同DROP一样丢弃包,但返回错误信息。(只能用于INPUT、FORWARD和OUTPUT链)

REDIRECT重定向匹配包(只能用于nat表,PREROUTING和OUTPUT链)

  1. #将目标端口8888的重定向至本机443端口
  2. iptables -t nat -A PREROUTING  -p tcp --dport 8888 -j REDIRECT --to 443

匹配扩展

icmp匹配icmp协议,接受选项--icmp-type指定icmp类型

  1. iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

tcp匹配tcp协议

udp匹配udp协议

connlimit连接限制

  1. #限制每个C段IP http最大并发连接数为16
  2. iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT

limit限速

  1. #创建自定义链SYNFLOOD
  2. iptables -N SYNFLOOD
  3. #没有超过限定值的话返回
  4. iptables -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
  5. #超过限定值,就视为SYNFLOOD攻击,记录日志并丢弃
  6. iptables -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j LOG --log-level=1 --log-prefix "SYNFLOOD: "
  7. iptables  -A SYNFLOOD -j DROP

multiport多端口

  1. #允许转发至多个TCP端口
  2. iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j ACCEPT

state状态匹配

  1. #允许从端口eth1进入的状态是ESTABLISHED和RELATED的转发包
  2. iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
  3. #允许http新建连接
  4. iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

string字符串匹配

  1. #对匹配到字符串GET /index.html的http请求包进行日志记录(--algo bm为指定匹配算法)
  2. iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG

time匹配时间

一些例子:

  1. #清空规则
  2. iptables -F
  3. #查看nat表的所有规则
  4. iptables -t nat -nvL
  5. #设置INPUT链的默认规则
  6. iptables -P INPUT DROP
  7. #删除转发链中的第二条规则
  8. iptables -D FORWARD 2
  9. #允许内网samba,smtp,pop3,连接
  10. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  11. iptables -A INPUT -p tcp -m multiport --dports 110,25 -j ACCEPT
  12. iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT
  13. #允许DNS连接
  14. iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT
  15. #星期一到星期六的8:15-12:30禁止qq通信
  16. iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP
  17. #只允许每组ip同时15个80端口转发
  18. iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP
  19. #保存规则到文件
  20. iptables-save >/etc/sysconfig/iptables.rule
  21. #装载保存在文件中的规则
  22. iptables-restore </etc/sysocnfig/iptables.rule

由于mangle表和raw表很少使用,就没有举相关的例子,另外,如果允许linux主机进行转发(FORWARD),需要设置内核参数:echo 1 > /proc/sys/net/ipv4/ip_forward(临时),或sysctl -w net.ipv4.ip_forward=1 &>/dev/null(永久)。iptables的规则定义较复杂,还有许多选项没有在例子中使用到,读者可以自行man。

转载于:https://www.cnblogs.com/howhy/p/6183350.html

Linux基础命令介绍七:网络传输与安全 wget curl rsync iptables相关推荐

  1. Linux基础命令介绍七:网络传输与安全

    本篇接着介绍网络相关命令 1.wget 文件下载工具 wget [option]... [URL]... wget是一个非交互的下载器,支持HTTP, HTTPS和FTP协议,也可以使用代理.所谓'非 ...

  2. linux查找目录下含有xx的文件,linux基础命令介绍三:文件搜索及其它

    1.linux中包含大量的文件,对于文件查找,linux提供了find命令. find是一个非常有效的工具,它可以遍历目标目录甚至整个文件系统来查找某些文件或目录: find [path...] [e ...

  3. linux vim编辑文本是 m,linux基础命令介绍四:文本编辑 vim

    本文介绍vim(版本7.4)的一般用法 vim是功能强大的文本编辑器,是vi的增强版. vim [options] [file ..] 使用vim编辑一个文件的最常用命令就是: vim file 其中 ...

  4. Linux基础命令介绍四:文本编辑vim

    本文介绍vim(版本7.4)的一般用法. vim是功能强大的文本编辑器,是vi的增强版. vim [options] [file ..] 使用vim编辑一个文件的最常用命令就是: vim file 其 ...

  5. linux基础命令介绍十三:启动流程

    固件(firmware)是指设备最底层的,让设备得以运行的程序代码.简单理解就是:固定在硬件上的软件.计算机中的许多设备都拥有固件(如硬盘.鼠标.光驱.U盘等),在计算机启动过程中,最先读取的就是位于 ...

  6. linux基础命令介绍十四:定时任务

    在计算机的使用过程中,经常会有一些计划中的任务需要在将来的某个时间执行,linux中提供了一些方法来设定定时任务. 1.at 命令at从文件或标准输入中读取命令并在将来的一个时间执行,只执行一次.at ...

  7. linux boot命令用法,Linux基础命令介绍 - 2

    上一篇介绍了两个比较基础的两个命令: pwd cd 其实cd这个命令呢,还有一个比较常用的用法,就是: cd - 这个就是在返回最近一次使用的目录,就像电视机遥控器上的一个功能,切换到上一个节目,也就 ...

  8. Linux基础命令(七)LVM与磁盘配额

    文章目录 LVM概述 LVM逻辑卷组成 LVM应用步骤 创建物理卷 创建卷组 创建逻辑卷 磁盘配额 LVM概述 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linu ...

  9. Linux基础命令介绍十:文本流编辑 sed

    与vim不同,sed是一种非交互式的文本编辑器,同时它又是面向字符流的,每行数据经过sed处理后输出. sed [OPTION]... [script] [file]... sed的工作过程是这样的: ...

  10. Linux基础命令介绍

    总用量: 7600 是ls所列出的入口占用空间的字节数 1 表示该文件的硬链接数 root  表示属主 第二个root表示文件属组(一般是文件属主的缺省值) 1037 表示文件长度,不是K字节 要查看 ...

最新文章

  1. 厦门再次加大引才力度!博士补贴8万,硕士5万,本科3万!
  2. matlab 求圆的周长和面积
  3. java itext word操作_使用JAVA中的Apache POI和iText从Word(DOC)创建PDF
  4. 软件工程学习笔记——软件工程基本原理
  5. 故障转移集群仲裁盘_windows 2012 标准版 集群 仲裁盘和共享盘无法转移
  6. python通用数据库连接_python连接数据库的几种方式!
  7. linux的vim多选择,真的有(很多)linux大牛用vim写项目吗?
  8. tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化
  9. 【转】想象5年后的你
  10. 【对讲机的那点事】对讲机天馈系统关键元器件之功分器
  11. 教职工使用计算机管理制度,教师配置笔记本电脑管理办法
  12. Cesium:在地球上加载Geoserver图层
  13. 计算机视觉-OpenCV入门讲解
  14. 人工智能导论学习笔记
  15. oracle磁带库清洁带标签,LTO-1/2/3/4/5/6/7/8 Ultrium数据磁带 清洗带 清洁带 磁带标签批发...
  16. python 读取并显示图片的两种方法
  17. 语言(文化)代码与国家地区对照表
  18. VMware虚拟机win7安装教程
  19. 利用百度智能云-文字识别 auto.js
  20. 网站资源:分享7个实用好玩的在线网站,值得收藏!

热门文章

  1. 使用TortoiseGit提交代码到github上
  2. NWT失败反省:不想办法开展业务,天天想着让别人不能用
  3. 低档显卡无法支持2K显示器
  4. VS log4net引用错误的解决
  5. trunc函数_这几个舍入函数你都会用吗?
  6. php mysql简单留言本_超级简单的php+mysql留言本源码
  7. c语言正则表达式替换,Linux C 支持正则表达式的字符串替换函数...
  8. Dxg——Keil 单片机 开发笔记整理分类合集【所有的相关记录,都整理在此】
  9. idea 自动生成mybaits_Intellij idea中使用Mybatis插件Mybatis Generator
  10. 51单片机如何跳出wile循环_基于proteus的51单片机开发实例(1)