本篇接着介紹網絡相關命令html
wget
文件下載工具wget [option]... [URL]...
wget
是一個非交互的下載器,支持HTTP, HTTPS和FTP協議,也可使用代理。所謂'非交互'意思是說,能夠在一個系統中啓動一個wget
下載任務,而後退出系統,wget
會在完成下載(或出現異常)以後才退出,不須要用戶參與。linux
[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 --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 正在解析主機 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 166.111.206.63, 2402:f000:1:416:166:111:206:63 正在鏈接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|166.111.206.63|:80... 已鏈接。 已發出 HTTP 請求,正在等待迴應... 200 OK 長度:7084545 (6.8M) [application/octet-stream] 正在保存至: 「apache-tomcat-6.0.47.tar.gz」 100%[===========================================================>] 7,084,545 2.28MB/s 用時 3.0s 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通配符(*
?
[...]
),將做爲一個模式匹配,而不是文件後綴名。算法
curl
網絡數據傳輸工具curl [options] [URL...]
curl
一樣也能夠作爲文件下載工具,和wget
相比,curl
支持更多的協議,在指定下載URL時支持序列或集合。但curl
不支持遞歸下載。curl
的URL能夠表示成以下格式:sql
#能夠將幾個個字符串放到大括號裏用逗號分隔來表示多個URL http://site.{one,two,three}.com #能夠將字母數字序列放在[]中表示多個文件或URL(和shell通配符相似但並不相同) ftp://ftp.numericals.com/file[1-100].txt ftp://ftp.numericals.com/file[001-100].txt ftp://ftp.letters.com/file[a-z].txt #還能用冒號:n表示在序列中每隔n個取一個值 http://www.numericals.com/file[1-100:10].txt http://www.letters.com/file[a-z:2].txt #不支持大括號和中括號的嵌套,但能夠在一條URL中分開同時使用它們 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頭信息:shell
[root@centos7 ~]# curl -I www.baidu.com HTTP/1.1 200 OK Server: bfe/1.0.8.18 Date: Tue, 15 Nov 2016 07:20:50 GMT Content-Type: text/html Content-Length: 277 Last-Modified: Mon, 13 Jun 2016 02:50:02 GMT Connection: Keep-Alive ETag: "575e1f5a-115" Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Pragma: no-cache Accept-Ranges: bytes
選項-w format
按格式輸出。apache
#如得到HTTP狀態碼: [root@centos7 ~]# curl -s -w "%{http_code}\n" www.baidu.com -o /dev/null 200 [root@centos7 ~]# #如得到服務器端IP地址: [root@centos7 ~]# curl -s -w "%{remote_ip}\n" www.baidu.com -o /dev/null 61.135.169.125 [root@centos7 ~]#
選項-X METHOD
指定http請求方法
選項-L
當指定的URL被重定向時(http狀態碼爲3xx),使用-L
會使curl
從新發送請求至新地址。
選項-d
指定發送數據
這些選項在操做一個遠程http API時會頗有用vim
#刪除peer2 curl -L -XDELETE http://127.0.0.1:2380/v2/admin/machines/peer2 #用PUT方法發送給指定URL數據 curl -L http://127.0.0.1:2379/v2/keys/message -XPUT -d 'value="Hello world"' #指定數據能夠是JSON格式的字符串 curl -L http://127.0.0.1:2380/v2/admin/config -XPUT -d '{"activeSize":3, "removeDelay":1800,"syncInterval":5}'
選項-T file
表示上傳文件filesegmentfault
curl -T test.sql ftp://name:password@ip:port/demo/curtain/bbstudy_files/ #注意這裏是如何指定ftp用戶、密碼、IP、端口的;也可使用選項-u user:password指定用戶和密碼
rsync
文件傳輸工具rsync
的初衷是爲了取代scp
,做爲一個更快速,功能更強的文件傳輸工具。它使用「rsync」算法,能夠實現每次只傳輸兩個文件的不一樣部分(即增量備份)。centos
rsync [OPTION...] SRC... [DEST] #相似於cp,本地傳輸。當目的(DEST)省略時,會以`ls -l`的風格列出源文件列表 [root@centos7 temp]# rsync . drwxr-xr-x 102 2016/11/16 09:47:10 . -rw-r--r-- 0 2016/11/10 22:02:25 b.txt -rw-r--r-- 0 2016/11/10 22:02:25 c.txt -rw-r--r-- 0 2016/11/10 22:02:25 d.txt -rw-r--r-- 0 2016/11/10 22:02:25 e.txt -rw-r--r-- 0 2016/11/10 22:02:25 f.txt -rw-r--r-- 1979 2016/11/08 15:49:31 file -rw-r--r-- 10 2016/11/07 18:01:33 test -rwxr-xr-x 24 2016/11/04 09:03:18 test.sh
rsync
在本地和遠程之間傳輸文件有兩種工做模式,一種是利用ssh
加密傳輸,相似於scp
;一種是守護進程(daemon)模式,使用命令rsync --daemon
啓動,做爲rsync服務器爲客戶端服務。tomcat
#經過ssh rsync [OPTION...] [USER@]HOST:SRC... [DEST] rsync [OPTION...] SRC... [USER@]HOST:DEST #經過daemon rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
選項-r
表示遞歸
選項-v
表示顯示詳細信息
選項-a
表示保持文件全部屬性而且遞歸地傳輸文件
如使用ssh將本地/root/temp
目錄及其內容同步至10.0.1.253的/root/temp
:
#注意源和目的主機都須要有rsync命令 [root@centos7 temp]# rsync -av . root@10.0.1.253:/root/temp sending incremental file list created directory /root/temp ./ b.txt c.txt d.txt e.txt f.txt file test test.sh sent 2468 bytes received 167 bytes 5270.00 bytes/sec total size is 2013 speedup is 0.76
命令的執行開始會在源端(此例中的本機:發送端)建立文件列表(file list),在建立的過程當中會將文件列表發送至目的端(此例中的10.0.1.253:接收端)。發送完成以後,接收端對文件列表進行計算處理,保留接收端不存在的或變化的文件,建立新文件列表,而後發送回源端;發送端收到新文件列表後開始進行傳輸。
返回結果中顯示了發送的文件以及一些彙總信息。
如執行完上述命令後更新其中一個文件,而後再次執行同步:
[root@centos7 temp]# echo "hello world" >> d.txt [root@centos7 temp]# rsync -av . root@10.0.1.253:/root/temp sending incremental file list d.txt sent 193 bytes received 31 bytes 448.00 bytes/sec total size is 2025 speedup is 9.04
此次只有變化了的文件才被傳輸。
選項--delete
會將接收端存在但發送端不存在的文件刪除:
[root@centos7 temp]# rm -f test [root@centos7 temp]# rsync -av --delete . root@10.0.1.253:/root/temp sending incremental file list ./ deleting test #這裏刪除了接收端的test文件 sent 132 bytes received 15 bytes 98.00 bytes/sec 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
會打印出每一個文件傳輸的狀態信息,相似於:
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"的多個參數。 文件中以符號#開頭的行是註釋行,起描述性做用,沒有實際效果。 文件是基於行的。意思是說每一行表示一條註釋或者模塊開頭或者一個參數,多個參數的話,只有第一個起做用。 在第一個模塊以前的參數會做爲全局參數,做爲默認值適用於每一個模塊。
舉例說明以下:
[root@idc-v-71253 temp]# cat /etc/rsyncd.conf # /etc/rsyncd: configuration file for rsync daemon mode # 註釋行 # global parameters uid = nobody #指定傳輸文件時守護進程應該具備的uid gid = nobody #指定傳輸文件時守護進程應該具備的gid use chroot = true #在傳輸以前會chroot到該模塊path參數所指定的目錄 max connections = 4 #最大併發鏈接數量 pid file = /var/run/rsyncd.pid #指定rsync的pid文件 timeout = 900 #指定超時時間,單位是秒 read only = false #容許客戶端上載文件到服務端(默認爲true,禁止上傳)。 dont compress = *.gz *.tgz *.zip *.z *.bz2 #指定特定後綴名的文件在傳輸以前不被壓縮 #modules [temp] #模塊 path = /home/temp #服務端該模塊可用目錄,每一個模塊都必須指定此參數 comment = test for command rsync(daemon) #描述字符串 [cvs] path = /data/cvs comment = CVS repository (requires authentication) auth users = tridge, susan #容許鏈接到此模塊的用戶,這裏的用戶和系統用戶不要緊。 secrets file = /etc/rsyncd.secrets #前面參數「auth users」所使用的密碼文件
咱們在10.0.1.253這臺機器上的配置文件中寫入了上述內容,而後把它做爲rsync服務端啓動起來:
[root@idc-v-71253 temp]# rsync --daemon [root@idc-v-71253 temp]# ls -l /var/run/rsyncd.pid -rw-r--r-- 1 root root 6 11月 16 14:03 /var/run/rsyncd.pid #這裏看到新建立的pid文件 [root@idc-v-71253 log]# cat /var/run/rsyncd.pid 29623 #默認守護進程模式的rsync服務端會經過系統的syslog(一個系統服務)記錄日誌,保存於/var/log/messages中 [root@idc-v-71253 log]# tail -1 /var/log/messages Nov 16 14:03:44 idc-v-71253 rsyncd[29623]: rsyncd version 3.0.9 starting, listening on port 873 #這裏看到rsyncd已經啓動了,監聽端口873 [root@idc-v-71253 log]# chown -R nobody.nobody /root/temp #改變模塊中path所指定的目錄的權限以使它和全局參數uid,gid一致
而後,咱們就可使用rsync服務器來傳輸文件了。注意服務端防火牆容許對TCP 873端口的鏈接,本文後面有對防火牆的描述。
如在10.0.1.254上拉取(pull):
[root@centos7 temp]# ls b.txt c.txt d.txt e.txt file f.txt test.sh [root@centos7 temp]# rm -rf * [root@centos7 temp]# rsync -avP --delete 10.0.1.253::temp ./ #注意書寫格式與使用ssh時的不一樣 receiving incremental file list ./ b.txt 13 100% 12.70kB/s 0:00:00 (xfer#1, to-check=6/8) c.txt 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=5/8) d.txt 12 100% 11.72kB/s 0:00:00 (xfer#3, to-check=4/8) e.txt 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=3/8) f.txt 0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=2/8) file 1979 100% 1.89MB/s 0:00:00 (xfer#6, to-check=1/8) test.sh 24 100% 23.44kB/s 0:00:00 (xfer#7, to-check=0/8) sent 162 bytes received 2476 bytes 5276.00 bytes/sec total size is 2028 speedup is 0.77
或者推送(push):
[root@centos7 temp]# echo 'BLOG ADDRESS IS "https://segmentfault.com/blog/learnning"' >> c.txt [root@centos7 temp]# rm -f file [root@centos7 temp]# rsync -avP --delete . rsync://10.0.1.253/temp #注意格式 sending incremental file list ./ deleting file c.txt 58 100% 0.00kB/s 0:00:00 (xfer#1, to-check=4/7) sent 235 bytes received 30 bytes 530.00 bytes/sec total size is 107 speedup is 0.40 [root@centos7 temp]#
根據配置文件,當同步cvs模塊時須要對用戶進行認證
在服務器端(10.0.1.253):
#編輯密碼文件寫入所示內容 [root@idc-v-71253 cvs]# vim /etc/rsyncd.secrets tridge:123456 susan:654321 #還須要改變文件權限 [root@idc-v-71253 cvs]# chmod 600 /etc/rsyncd.secrets
在客戶端(10.0.1.254):
[root@centos7 temp]# touch /etc/tridge.pass [root@centos7 temp]# echo 123456 > /etc/tridge.pass [root@centos7 temp]# touch /etc/susan.pass [root@centos7 temp]# echo 654321 > /etc/susan.pass [root@centos7 temp]# chmod 600 /etc/tridge.pass /etc/susan.pass
客戶端同步時須要使用選項--password-file
指定所用密碼文件
PULL:
[root@centos7 temp]# rsync -avP --delete --password-file=/etc/tridge.pass rsync://tridge@10.0.1.253/cvs /data/cvs #注意格式 receiving incremental file list A/a.txt 20 100% 19.53kB/s 0:00:00 (xfer#1, to-check=675/703) A/b.txt 20 100% 6.51kB/s 0:00:00 (xfer#2, to-check=674/703) .... #省略部分輸出 Z/y.txt 78 100% 1.27kB/s 0:00:00 (xfer#675, to-check=1/703) Z/z.txt 78 100% 1.27kB/s 0:00:00 (xfer#676, to-check=0/703) sent 16981 bytes received 71532 bytes 1416.21 bytes/sec total size is 34632 speedup is 0.39
PUSH:
[root@centos7 temp]# echo "baby on the way..." | tee -a /data/cvs/A/* baby on the way... [root@centos7 temp]# rm -rf /data/cvs/B [root@centos7 temp]# rsync -avP --delete --password-file=/etc/susan.pass /data/cvs/ susan@10.0.1.253::cvs sending incremental file list ./ deleting B/z.txt deleting B/y.txt deleting B/x.txt .... deleting B/a.txt deleting B/ A/a.txt 55 100% 0.00kB/s 0:00:00 (xfer#1, to-check=675/703) A/b.txt 55 100% 53.71kB/s 0:00:00 (xfer#2, to-check=674/703) .... A/y.txt 55 100% 53.71kB/s 0:00:00 (xfer#25, to-check=651/703) A/z.txt 55 100% 53.71kB/s 0:00:00 (xfer#26, to-check=650/703) sent 10331 bytes received 684 bytes 22030.00 bytes/sec total size is 35542 speedup is 3.23
要注意上例中源目錄的書寫,在rsync
中若是源目錄不以/
結尾,意味着將在目的目錄下建立子目錄,如:
rsync -avz foo:src/bar /data/tmp #此時會將源目錄src/bar內全部的內容傳送至目標/data/tmp/bar內
能夠在源目錄結尾增長/
來阻止這一行爲:
rsync -avz foo:src/bar/ /data/tmp #此時會將源目錄src/bar內全部的內容傳送至目標/data/tmp內,不會建立子目錄bar
配置文件中還能夠設置其餘參數如設置監聽端口、指定日誌文件、指定容許客戶端列表等等,可以使用命令man rsyncd.conf
自行查看。
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張不一樣功能的表:
一、
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表極少使用。
#語法 iptables [-t table] COMMAND chain rule-specification -t table 指定表,省略時表示filter表 COMMAND 定義如何對規則進行管理 chain 指定規則生效的位置(規則鏈) rule-specification = [matches...] [target] 特定規則,包括匹配和目標 match = -m matchname [per-match-options] 匹配 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
ACCEPT 表示容許包經過 DROP 表示丟棄該包 RETURN 表示中止執行當前鏈後續規則,返回到調用鏈中 QUEUE 將數據包移交到用戶空間
EXTENSIONS包含兩種,一種是target擴展,表示對數據包作某種處理;一種是使用選項-m
構成的匹配擴展,表示指定某種匹配方式。
target擴展
DNAT
對數據包進行目的地址轉換,接受選項--to-destination
(只能用於nat表,PREROUTING和OUTPUT鏈)SNAT
對數據包進行源地址轉換,接受選項--to-source
(只能用於nat表,POSTROUTING和INPUT鏈)
如
#將目的地址爲221.226.x.x,目的端口爲80的數據包作DNAT,使目的地址爲192.168.5.16,目的端口爲80 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 #將源地址爲192.168.5.16,源端口爲80的數據包作SNAT,使源地址變爲221.226.x.x 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鏈)
#將目標端口8888的重定向至本機443端口 iptables -t nat -A PREROUTING -p tcp --dport 8888 -j REDIRECT --to 443
匹配擴展
icmp
匹配icmp協議,接受選項--icmp-type
指定icmp類型
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
tcp
匹配tcp協議udp
匹配udp協議connlimit
鏈接限制
#限制每一個C段IP http最大併發鏈接數爲16 iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
limit
限速
#建立自定義鏈SYNFLOOD iptables -N SYNFLOOD #沒有超過限定值的話返回 iptables -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN #超過限定值,就視爲SYNFLOOD攻擊,記錄日誌並丟棄 iptables -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j LOG --log-level=1 --log-prefix "SYNFLOOD: " iptables -A SYNFLOOD -j DROP
multiport
多端口
#容許轉發至多個TCP端口 iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j ACCEPT
state
狀態匹配
#容許從端口eth1進入的狀態是ESTABLISHED和RELATED的轉發包 iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT #容許http新建鏈接 iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
string
字符串匹配
#對匹配到字符串GET /index.html的http請求包進行日誌記錄(--algo bm爲指定匹配算法) iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG
time
匹配時間
一些例子:
#清空規則 iptables -F #查看nat表的全部規則 iptables -t nat -nvL #設置INPUT鏈的默認規則 iptables -P INPUT DROP #刪除轉發鏈中的第二條規則 iptables -D FORWARD 2 #容許內網samba,smtp,pop3,鏈接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp -m multiport --dports 110,25 -j ACCEPT iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT #容許DNS鏈接 iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT #星期一到星期六的8:15-12:30禁止qq通訊 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 #只容許每組ip同時15個80端口轉發 iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP #保存規則到文件 iptables-save >/etc/sysconfig/iptables.rule #裝載保存在文件中的規則 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。