成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux基礎命令介紹七:網絡傳輸與安全

系統 Linux
本篇接著介紹網絡相關命令: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.  
  9. 100%[===========================================================>] 7,084,545   2.28MB/s 用時 3.0s    
  10.  
  11. 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.  
  15. sent 2468 bytes  received 167 bytes  5270.00 bytes/sec 
  16. 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.  
  6. sent 193 bytes  received 31 bytes  448.00 bytes/sec 
  7. 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.  
  7. sent 132 bytes  received 15 bytes  98.00 bytes/sec 
  8. 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.  
  14. #modules 
  15. [temp]          #模塊 
  16.     path = /home/temp  #服務端該模塊可用目錄,每個模塊都必須指定此參數 
  17.     comment = test for command rsync(daemon) #描述字符串 
  18. [cvs] 
  19.     path = /data/cvs 
  20.     comment = CVS repository (requires authentication) 
  21.     auth users = tridge, susan   #允許連接到此模塊的用戶,這里的用戶和系統用戶沒關系。 
  22.     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.  
  22. sent 162 bytes  received 2476 bytes  5276.00 bytes/sec 
  23. 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.  
  10. sent 235 bytes  received 30 bytes  530.00 bytes/sec 
  11. total size is 107  speedup is 0.40 
  12. [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.  
  13. sent 16981 bytes  received 71532 bytes  1416.21 bytes/sec 
  14. 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.  
  23. sent 10331 bytes  received 684 bytes  22030.00 bytes/sec 
  24. 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。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2016-12-08 22:26:28

2016-12-23 12:46:41

Linux命令進程與內存

2016-12-27 10:48:59

Linux命令磁盤與文件系統

2010-03-05 13:09:23

Linux shell

2011-08-23 11:10:14

ATM

2010-03-10 13:34:03

Linux重要安全命令

2010-03-10 13:19:21

Linux重要安全命令

2019-03-29 10:31:53

2016-12-27 19:10:38

Linux命令啟動流程

2016-12-29 11:13:30

shellbashlinux

2010-12-24 10:25:20

SCP 命令

2009-07-05 11:25:39

2016-12-27 19:29:14

Linux命令定時任務

2018-03-01 06:10:41

2016-12-07 18:22:23

shelllinuxgrep

2016-12-23 13:07:11

shelllinuxsed

2016-12-27 10:34:57

Linux命令軟件包管理

2016-12-23 10:56:34

linuxshellawk

2010-03-18 17:25:37

Linux命令

2022-12-15 10:37:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91久久精品一区二区二区 | av一级| 久久亚洲天堂 | 国产线视频精品免费观看视频 | 成人国产在线观看 | 国精产品一区二区三区 | 亚洲视频一区二区三区 | 欧美乱码精品一区二区三区 | 久久久久精 | 国产一区二区三区不卡av | 成人国产精品色哟哟 | 麻豆国产一区二区三区四区 | 一级免费毛片 | 黄色一级大片在线免费看产 | 91精品久久久久久久久久小网站 | 99色视频| 亚洲在线一区二区 | 天天草天天操 | jvid精品资源在线观看 | 日韩在线免费播放 | 日韩手机视频 | 国产伦精品一区二区三区精品视频 | 欧美精品久久 | 黄色网一级片 | 亚洲a人| 亚洲一区二区av | 日本亚洲欧美 | 在线视频 欧美日韩 | 国产小视频在线观看 | 午夜影院网站 | 国产成人jvid在线播放 | 伊人久操 | 亚洲精品亚洲人成人网 | 欧美性一区二区三区 | 毛片在线免费 | 午夜在线视频 | 91福利电影在线观看 | 精品久久99| 欧洲性生活视频 | 黄色片视频网站 | 高清视频一区 |