本章涉及命令以下:

wKioL1jHiVzgBbL6AAAi8p_X3UM051.png

11.31 wget

功能:非交互式網絡下載,相似於HTTP客戶端html

經常使用選項:node

-b,  --background         後臺運行ios

日誌記錄和輸入文件:nginx

-o,  --output-file=FILE      日誌寫到文件shell

-a, --append-output=FILE     日誌追加到文件數據庫

-d,  --debug              打印debug信息,會包含頭信息緩存

-q,  --quiet              退出,不輸出安全

-i,  --input-file=FILE      從文件中讀取URL下載bash

下載選項:服務器

-t,  --tries=NUMBER         設置連接重試次數

-O, --output-document=FILE     寫入內容到文件

-nc, --no-clobber            跳過下載現有的文件

-c,  --continue            斷點續傳

--progress=TYPE             設置進度條(dot和bar)

-S,  --server-response        打印服務器響應頭信息

--spider             不下載任何內容

-T, --timeout=SECONDS    設置相應超時時間(還有--dns-timeout、--connect-timeout和--read-timeout)

-w,  --wait=SECONDS     兩次重試間隔等待時間

--bind-address=ADDRESS    設置綁定地址

--limit-rate=RATE      限制下載速度

--user=USER         設置ftp和http用戶名

--password=PASS       設置ftp和http密碼

目錄:

-P, --directory-prefix=PREFIX  保存文件目錄

HTTP選項:

--http-user=USER     設置http用戶名

--http-password=PASS   設置http密碼

--proxy-user=USER     設置代理用戶名

--proxy-password=PASS  設置代理密碼

--referer=URL       設置Referer

--save-headers      保存頭到文件

--default-page=NAME    改變默認頁面名字,默認index.html

-U,--user-agent=AGENT  設置客戶端信息

--no-http-keep-alive   禁用HTTP keep-alive(長鏈接)

--load-cookies=FILE    從文件加載cookies

--save-cookies=FILE    保存cookies到文件

--post-data=STRING     使用POST方法,發送數據

FTP選項:

--ftp-user=USER      設置ftp用戶名

--ftp-password=PASS    設置ftp密碼

--no-passive-ftp      禁用被動傳輸模式

遞歸下載:

-r, --recursive       指定遞歸下載

-l, --level=NUMBER     最大遞歸深度

-A, --accept=LIST      逗號分隔下載的擴展列表

-R, --reject=LIST      逗號分隔不被下載的擴展列表

-D, --domains=LIST     逗號分隔被下載域的列表

--exclude-domains=LIST   排除不被下載域的列表

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
下載單個文件到當前目錄:
# wget http://nginx.org/download/nginx-1.11.7.tar.gz
放到後臺下載:
# wget -b http://nginx.org/download/nginx-1.11.7.tar.gz
對於網絡不穩定的用戶使用-c和--tries參數,保證下載完成,並下載到指定目錄:
# wget -t 3 -c http://nginx.org/download/nginx-1.11.7.tar.gz -P down
不下載任何內容,判斷URL是否能夠訪問:
# wget --spider http://nginx.org/download/nginx-1.11.7.tar.gz
下載內容寫到文件:
# wget http://www.baidu.com/index.html -O index.html
從文件中讀取URL下載:
# wget -i url.list
下載 ftp 文件:
# wget --ftp-user=admin --ftp-password=admin ftp://192.168.1.10/ISO/CentOS-6.5-i386-minimal.iso
假裝客戶端,指定user-agent和referer下載:
# wget -U "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --referer "http://nginx.org/en/download.html" http://nginx.org/download/nginx-1.11.7.tar.gz
查看HTTP頭信息:
# wget -S http://nginx.org/download/nginx-1.11.7.tar.gz
# wget --debug http://nginx.org/download/nginx-1.11.7.tar.gz


11.32 curl

功能:發送數據到URL,相似於HTTP客戶端

經常使用選項:

-C, --continue-at  斷點續傳

-b, --cookie STRING/FILE 從文件中讀取cookie

-c, --cookie-jar   把cookie保存到文件

-d, --data       使用POST方式發送數據

--data-urlencode   POST的數據URL編碼

-F, --form       指定POST數據的表單

-D, --dump-header  保存頭信息到文件

--ftp-pasv      指定FTP鏈接模式PASV/EPSV

-P, --ftp-port    指定FTP端口

-L, --location    遵循URL重定向,默認不處理

-l, --list-only   指列出FTP目錄名

-H, --header     自定義頭信息發送給服務器

-I, --head      查看HTTP頭信息

-o, --output FILE   輸出到文件

-#, --progress-bar  顯示bar進度條

-x, --proxy[PROTOCOL://]HOST[:PORT]  使用代理

-U, --proxy-userUSER[:PASSWORD] 代理用戶名和密碼

-e, --referer      指定引用地址referer

-O, --remote-name  使用遠程服務器上名字寫到本地

--connect-timeout  鏈接超時時間,單位秒

--retry NUM      鏈接重試次數

--retry-delay     兩次重試間隔等待時間

-s, --silent      靜默模式,不輸出任何內容

-Y, --speed-limit  限制下載速率

-u, --user USER[:PASSWORD] 指定http和ftp用戶名和密碼

-T, --upload-file   上傳文件

-A, --user-agent   指定客戶端信息

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
下載頁面:
# curl -o badu.html http://www.baidu.com
不輸出下載信息:
# curl -s -o baidu.html http://www.baidu.com
假裝客戶端,指定user-agent和referer下載:
# curl -A "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" -e "baike.baidu.com" http://127.0.0.1
模擬用戶登陸,並保存cookies到文件:
# curl -c ./cookies.txt -F NAME=user -F PWD=123 http://www.example.com/login.html
使用cookie訪問:
# curl -b cookies.txt http://www.baidu.com
訪問HTTP認證頁面:
# curl -u user:pass http://www.example.com
FTP上傳文件:
# curl -T filename ftp://user:pass@ip/a.txt
# curl ftp://ip -u user:pass-T filename
FTP下載文件:
# curl -O ftp://user:pass@ip/a.txt
# curl ftp://ip/filename -u user:pass -o filename
FTP下載多個文件:
# curl ftp://ip/img/[1,3,5].jpg
查看HTTP頭信息:
# curl -I http://www.baidu.com

11.33 scp

功能:基於SSH的安全遠程服務器文件拷貝

經常使用選項:

-i  指定私鑰文件

-l  限制速率,單位Kb/s,1024Kb=1Mb

-P  指定遠程主機SSH端口

-p  保存修改時間、訪問時間和權限

-r  遞歸拷貝目錄

-o  SSH選項,有如下經常使用的:

ConnectionAttempts=NUM  鏈接失敗後重試次數

ConnectTimeout=SEC       鏈接超時時間

StrictHostKeyChecking=no  自動拉去主機key文件

PasswordAuthentication=no 禁止密碼認證

示例:

1
2
3
4
5
本地目錄推送到遠程主機:
# scp -P 22 -r src_dir root@192.168.1.10:/dst_dir
遠程主機目錄拉取到本地:
# scp -P 22 root@192.168.1.10:dst_dir src_dir
同步文件方式同樣,不用加-r參數

11.34 rsync

功能:遠程或本地文件同步工具

經常使用選項:

-v  顯示覆制信息

-q  不輸出錯誤信息

-c  跳過基礎效驗,不判斷修改時間和大小

-a  歸檔模式,等效-rlptgoD,保留權限、屬組等

-r  遞歸目錄

-l  拷貝軟鏈接

-z  壓縮傳輸數據

-e  指定遠程shell,好比ssh、rsh

--progress           進度條,等同-P

--bwlimit=KB/s       限制速率,0爲沒有限制

--delete            刪除那些DST中SRC沒有的文件

--exclude=PATTERN      排除匹配的文件或目錄

--exclude-from=FILE    從文件中讀取要排除的文件或目錄

--password-file=FILE    從文件讀取遠程主機密碼

--port=PORT          監聽端口

示例:

1
2
3
4
5
6
7
8
9
10
11
12
本地複製目錄:
# rsync -avz abc /opt
本地目錄推送到遠程主機:
# rsync -avz SRC root@192.168.1.120:DST
遠程主機目錄拉取到本地: 
# rsync -avz root@192.168.1.10:SRC DST
保持遠程主機目錄與本地同樣:
# rsync -avz --delete SRC root@192.168.1.120:DST
排除某個目錄:
# rsync -avz --exclude=no_dir SRC root@192.168.1.120:DST
指定SSH端口:
# rsync -avz /etc/hosts -e "ssh -p22" root@192.168.1.120:/opt

11.35 nohup

功能:運行命令,忽略全部掛起信號

經常使用選項:

示例:

1
2
後臺運行程序,終端關閉不影響:
# nohup bash test.sh &>test.log &

11.36 iconv

功能:將文件內容字符集轉成其餘字符集

經常使用選項:

-l  列出全部已知的編碼字符集

-f  編碼原始文本

-t  輸出的編碼格式

-o  輸出到文件

-s  不輸出警告

示例:

1
2
3
4
5
6
將文件內容轉換UTF8:
# iconv -f gbk -t utf8 old.txt -o new.txt
將csv文件轉換GBK:
# iconv -f utf8 -t gbk old.txt -o new.txt
解決郵件亂碼:
# echo $(echo "content" | iconv -f utf8 -t gbk) | mail -s "$(echo "title" | iconv -f utf8 -t gbk)" dst@163.com

11.37 uname

功能:打印系統信息

經常使用選項:

-a  打印全部信息

-s  打印內核名稱

-n  打印主機名

-r  打印內核發行版

-v  打印內核版本

-m  打印機器硬件名

-p  打印處理器類型

-i  打印硬件平臺

-o  打印操做系統

示例:

1
2
3
4
5
6
7
8
打印全部系統信息:
# uname -a
打印主機名:
# uname -a
打印內核版本:
# uname -r
打印操做系統:
# uname -o

11.38 sshpass

功能:非交互SSH登陸(須要安裝)

經常使用選項:

-f  從文件中獲取密碼

-d  用數字文件描述符獲取密碼

-p  密碼做爲參數

-e  密碼做爲環境變量傳遞,變量名是SSHPASS

示例:

1
2
3
4
5
6
免交互SSH登陸:
# sshpass -p 123456 ssh root@192.168.1.10
免交互傳輸文件:
# sshpass -p 123456 scp a.txt 192.168.1.10:/root
密碼傳入系統變量:
# SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" root@192.168.1.221:/opt

11.39 tar

功能:歸檔目錄或文件

經常使用選項:

-c  建立新歸檔

-d  比較歸檔和文件系統的差別

-r  追加文件到歸檔

-t  存檔的內容列表

-x  提取歸檔全部文件

-C  改變解壓目錄

-f  使用歸檔文件或設備歸檔

-j  bzip2壓縮

-z  gzip壓縮

-v  輸出處理過程

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
建立歸檔文件來自foo和bar:
# tar -cf archive.tar foo bar
提取歸檔的全部文件:
# tar -xf archive.tar
建立歸檔並 gzip 壓縮:
# tar -zcvf archive.tar.gz log
提取歸檔文件並 gzip 解壓:
# tar -zxvf log.tar.gz 
建立歸檔並 bzip2 壓縮:
# tar -jcvf log.tar.bz log
列出全部在archive. tar 的文件:
# tar -tvf archive.tar
提取歸檔並解壓到指定目錄:
# tar -zxvf log.tar.gz -C /opt

11.40 logger

功能:系統日誌的shell命令行接口

經常使用選項:

-i  每行記錄進程ID

-f  指定輸出日誌到文件

-p  設置記錄的優先級

-t  添加標籤

示例:

1
# logger -i -t "my_test" -p local3.notice "test_info"

11.41 netstat

功能:打印網絡鏈接、路由表、接口統計信息、假裝鏈接和多播成員

經常使用選項:

-r  顯示路由表

-i  顯示接口表

-n  不解析名字

-p  顯示程序名 PID/Program

-l  顯示監聽的socket

-a  顯示全部socket

-o  顯示計時器

-Z  顯示上下文

-t  只顯示tcp鏈接

-u  只顯示udp鏈接

-s  顯示每一個協議統計信息

示例:

1
2
3
4
5
6
7
8
顯示全部監聽:
# netstat -anltu
顯示全部TCP鏈接:
# netstat -antp
顯示全部UDP鏈接:
# netstat -anup
顯示路由表:
# netstat -r

11.42 ss

功能:比netstat更強大的socket查看工具

格式:ss [options] [ FILTER ]

經常使用選項:

-n  不解析名字

-a  顯示全部socket

-l  顯示全部監聽的socket

-o  顯示計時器

-e  顯示socket詳細信息

-m  顯示socket內存使用

-p  顯示進程使用的socket

-i  顯示內部TCP信息

-s  顯示socket使用匯總

-4  只顯示IPV4的socket

-0  顯示包socket

-t  只顯示TCP socket

-u  只顯示UDP socket

-d  只顯示DCCP socket

-w  只顯示RAW socket

-x  只顯示Unix域socket

-f  FAMILY 只顯示socket族類型( unix, inet,inet6, link, netlink)

-A  查詢socket{all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D  將原始的TCP socket轉儲到文件

-F  從文件中讀取過濾信息

過濾:

-o  state  顯示TCP鏈接狀態信息

示例:

1
2
3
4
5
6
7
8
9
10
11
12
顯示全部TCP鏈接:
# ss -t -a
顯示全部UDP鏈接:
# ss -u –a
顯示socket使用匯總:
# ss -s
顯示全部創建的鏈接:
# ss -o state established
顯示全部的TIME-WAIT狀態:
# ss -o state TIME-WAIT
搜索全部本地進程鏈接到X Server:
# ss -x src /tmp/.X11-unix/*

11.43 lsof

功能:列出打開的文件

經常使用選項:

-i [i]  監聽的網絡地址,若是沒有指定,默認列出全部。[i] 來自[46][protocol][@hostname|hostaddr][:service|port]

-U  列出Unix域socket文件

-p  指定PID

-u  指定用戶名或UID全部打開的文件

+D  遞歸搜索

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
列出全部打開的文件:
# lsof
查看哪一個進程佔用文件:
# lsof /etc/passwd
列出全部打開的監聽地址和unix域socket文件:
# lsof -i -U
列出80端口監聽的進程:
# lsof -i:80
列出端口1-1024之間的全部進程:
# lsof -i:1-1024
列出全部TCP網絡鏈接:
# lsof -i tcp
列出全部UDP網絡鏈接:
# lsof -i udp
根據文件描述符列出打開的文件:
# lsof -d 1
列出某個目錄被打開的文件:
# lsof +D /var/log
列出進程ID打開的文件:
# lsof -p 5373
打開全部登陸用戶名abc或user  id  1234,或PID 123或PID 456:
# lsof -p 123,456 -u 123,abc
列出COMMAND列中包含字符串sshd:
# lsof -c sshd


11.44 ps

功能:報告當前進程的快照

經常使用選項:

-a  顯示全部進程

-u  選擇有效的用戶ID或名稱

-x  顯示無控制終端的進程

-e  顯示全部進程

-f  全格式

-r  只顯示運行的進程

-T  這個終端的全部進程

-p  指定進程ID

--sort  對某列排序

-m  線程

-L  格式化代碼列表

-o  用戶自定義格式

CODE  NORMAL   HEADER

%C    pcpu     %CPU

%G    group    GROUP

%P    ppid     PPID

%U    user     USER

%a    args     COMMAND

%c    comm     COMMAND

%g    rgroup   RGROUP

%n    nice     NI

%p    pid      PID

%r    pgid     PGID

%t    etime    ELAPSED

%u    ruser    RUSER

%x    time     TIME

%y    tty      TTY

%z     vsz      VSZ

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
打印系統上全部進程標準語法:
# ps -ef
打印系統上全部進程BSD語法:
# ps aux
打印進程樹:
# ps axjf 或 ps -ejH
查看進程啓動的線程:
# ps -Lfp PID
查看當前用戶的進程數:
# ps uxm 或 ps -U root -u root u 
自定義格式顯示並對CPU排序:
# ps -eo user,pid,pcpu,pmem,nice,lstart,time,args --sort=-pcpu
或  ps  -eo  "%U %p %C %n %x %a"

11.45 top

功能:動態顯示活動的進程和系統資源利用率

經常使用選項:

-d  信息刷新時間間隔

-p  只監控指定的進程PID

-i  只顯示正在使用CPU的進程

-H  顯示線程

-u  只查看指定用戶名的進程

-b  將輸出編排成易處理格式,適合輸出到文件處理

-n  指定最大循環刷新數

交互命令:

f  添加或刪除顯示的指標

c  顯示完整命令

P  按CPU使用百分比排序

M  按駐留內存大小排序

T  按進程使用CPU時間排序

1  顯示每一個CPU核心使用率

k  終止一個進程

示例:

1
2
3
4
5
刷新一次並輸出到文件:
# top -b -n 1 > top.log
只顯示指定進程的線程:
# top -Hp 123
傳入交互命令,按CPU排序

11.46 free

功能:查看內存使用率

經常使用選項:

-b  bytes顯示

-k  KB顯示

-m  M顯示

-g  G顯示

-h  易讀單位顯示

-s  每幾秒重複打印

-c  重複打印幾回退出

示例:

1
2
3
4
查看物理內存:
# free -m
易讀單位顯示:
# free -h

11.47 df

功能:查看文件系統的磁盤空間使用狀況

經常使用選項:

-a  包含虛擬文件系統

-h  可易讀單位顯示

-i  顯示block使用的inode信息

-k  KB顯示

-P  使用POSIX格式輸出

-t  輸出指定文件系統類型

-T  打印文件系統類型

示例:

1
2
3
4
查看全部文件系統:
# df -ah
輸出指定文件系統:
# df -t xfs

11.48 vmstat

功能:報告虛擬內存、swap、io、上下文和CPU統計信息。

分析了這些文件:

/proc/meminfo

/proc/stat

/proc/*/stat

經常使用選項:

-a  打印活躍和不活躍的內存頁

-d  打印硬盤統計信息

-D  打印硬盤表

-p  打印硬盤分區統計信息

-s  打印虛擬內存表

-m  打印內存分配(slab)信息

-t  添加時間戳到輸出

-S  顯示單位,默認k、KB、m、M,大寫是*1024

示例:

1
2
3
4
分析系統性能:
# vmstat
每秒刷新一次,統計五次:
# vmstat -t 1 5 11.49 iostat

功能:報告CPU利用率和磁盤I/O

經常使用選項:

-c  顯示CPU使用率

-d  只顯示磁盤使用率

-k  單位KB/s代替Block/s

-m  單位MB/s代替Block/s

-N  顯示全部映射設備名字

-t  打印報告時間

-x  顯示擴展統計信息

示例:

1
2
3
4
顯示CPU使用率:
# iostat -c 1 3
顯示I /O 磁盤統計信息:
# iostat -d -x -k 1 3  # 間隔1秒,輸出3次

11.50 sar

功能:查看系統資源綜合方面利用率

經常使用選項:

-u, CPU

-r, memory

-b, disk

-n DEV, NIC traffic

-q, systemload

-b, TPS(Transaction Per Second,每秒事務處理量)

-o, output to file

示例:

1
2
3
# sar -u 2 3 #每兩秒執行一次,採集三次
# sar -u 2 3 -o cpu.out
# sar -f cpu.out #讀取文件

11.51 dstat

功能:查看系統資源綜合方面利用率

經常使用選項:

-c, CPU

-d, disk

-m, memory(實際內存使用)

-n, net

-s, swap

-l, systemload

--tcp, tcp stats

--udp, udp stats

plugins:

--list  查看支持的插件

--disk-util

--disk-tps

--top-bio    查看最高block I/O進程

--top-bio-adv  查看最高block I/O進程,包括pid、r、w

--top-io

--top-io-adv

--top-cpu    查看最高使用CPU進程

--top-cpu-adv  查看最高CPU進程

--top-mem    查看最高使用內存進程

示例:

1
2
3
4
查看CPU利用率:
# dstat –c
查看TCP鏈接狀態:
# dstat --tcp

11.52 ip

功能:查看/操做路由表,設備,路由策略和隧道

格式:ip [ OPTIONS] OBJECT { COMMAND | help }

經常使用選項:

-b, -batch<FILENAME>  從文件或標準輸入讀取命令並調用他們,第一次失敗將終止

-force               批量模式有錯誤不終止,若是有錯誤則狀態返回非0

-s, -statistics      輸出更多的統計信息

-l, -loops<COUNT>  指定最大的循環數

操做對象(OBEJECT):

address  網絡設備地址

12tp     以太網IP隧道

link     配置網絡設備

maddress   多播地址

monitor   動態監控網絡鏈接

mroute    多播路由緩存條目

mrule     角色在多播路由策略數據庫

neighbour  管理ARP或NDISC緩存條目

netns     管理網絡命名空間

ntable    管理neighbour緩存操做

route     路由表

rule     角色在路由策略數據庫

tpc_metrics/tcpmetrics管理TCP指標

tunnel   IP隧道

tuntap   管理TUN/TAP設備

xfrm    管理IPSec策略

可經過ip OBEJECT help再查看對象的操做方法。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
查看網絡設備地址:
# ip addr
查看網卡統計信息:
# ip -s link
查看單個網卡統計信息:
# ip -s link ls eth0
查看ARP緩存表:
# ip neighbour
查看路由表:
# ip route
查看路由策略:
# ip rule
網卡設置/刪除IP:
# ip addr add/del 192.168.1.201/24 dev eth0
添加/刪除默認路由:
# ip route add/del default via 192.168.1.1
開啓/關閉網卡:
# ip link set dev eth0 up/down
設置最大傳輸單元:
# ip link set dev eth0 mtu 1500
設置MAC地址:
# ip link set dev eth0 address 00:0c:29:52:73:8e

11.53 nc

功能:TCP和UDP鏈接和監聽

經常使用選項:

-i interval 指定間隔時間發送和接受行文本

-l  監聽模式,管理傳入的鏈接

-n  不解析域名

-p  指定本地源端口

-r  指定本地和遠程主機端口

-s  指定本地源IP地址

-u  使用udp協議,默認是tcp

-v  執行過程輸出

-w  timeout 鏈接超時時間

-x  proxy_address[:port]  請求鏈接主機使用代理地址和端口

-z  指定掃描監聽端口,不發送任何數據

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
端口掃描:
# nc -z 192.168.1.10 1-65535
TCP協議鏈接到目標端口:
# nc -p 31337 -w 5 192.168.1.10 22
UDP協議鏈接到目的端口:
# nc -u 192.168.1.10 53
指定本地IP鏈接:
# nc -s 192.168.1.9 192.168.1.10 22
探測端口是否開啓:
# nc -z -w 2 192.168.1.10 22
建立監聽Unix域Socket:
# nc -lU /var/tmp/ncsocket
經過HTTP代理鏈接主機:
# nc -x10.2.3.4:8080 -Xconnect 10.0.0.10 22 
監聽端口捕獲輸出到文件:
# nc -l 1234 > filename.out
從文件讀入到指定端口:
# nc host.example.com 1234 < filename.in
收發信息:
# nc -l 1234
# nc 127.0.0.1 1234
執行memcahced命令: printf  "stats\n"  |nc 127.0.0.1 11211
發送郵件:
# nc [-C] localhost 25 << EOF
            HELO host.example.com
            MAIL FROM: <user@host.example.com>
            RCPT TO: <user2@host.example.com>
            DATA
            Body of email.
            .
            QUIT
            EOF
# echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

11.54 time

功能:執行腳本時間

經常使用選項:

示例:

1
2
查看執行 ls 所需的時間:
# time ls

11.55 ssh

功能:

經常使用選項:

示例:

11.56 iptables

常見幾種類型防火牆?

包過濾防火牆:包過濾是IP層實現,包過濾根據數據包的源IP、目的IP、協議類型(TCP/UDP/ICMP)、源端口、目的端口等包頭信息及數據包傳輸方向燈信息來判斷是否容許數據包經過。

應用層防火牆:也稱爲應用層代理防火牆,基於應用層協議的信息流檢測,能夠攔截某應用程序的全部封包,提取包內容進行分析。有效防止SQL注入或者XSS(跨站腳本攻擊)之類的惡意代碼。

狀態檢測防火牆:結合包過濾和應用層防火牆優勢,基於鏈接狀態檢測機制,將屬於同一鏈接的全部包做爲一個總體的數據流看待,構成鏈接狀態表(通訊信息,應用程序信息等),經過規則表與狀態表共同配合,對錶中的各個鏈接狀態判斷。

iptables是Linux下的配置防火牆的工具,用於配置Linux內核集成的IP信息包過濾系統,使增刪改查信息包過濾表中的規則更加簡單。

iptables分爲四表五鏈,表是鏈的容器,鏈是規則的容器,規則指定動做。

四表:

filter

用於包過濾

nat

網絡地址轉發

mangle

對特定數據包修改

raw

不作數據包連接跟蹤

五鏈:

INPUT

本機數據包入口

OUTPUT

本機數據包出口

FORWARD

通過本機轉發的數據包

PREROUTING

防火牆以前,修改目的地址(DNAT)

POSTROUTING

防火牆以後,修改源地址(SNAT)

表中的鏈:

filter

INPUT、OUTPUT和FORWARD

nat

PREROUTING、POSTROUTING和OUTPUT

mangle

PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD

raw

PREROUTING和OUTPUT

命令格式:iptables [-t table] 命令 [chain] 匹配條件 動做

命令

描述

-A,append

追加一條規則

-I,insert

插入一條規則,默認鏈頭,後跟編號,指定第幾條

-D,delete

刪除一條規則

-F,flush

清空規則

-L,list

列出規則

-P,policy

設置鏈缺省規則

-m,module

模塊,好比state、multiport

 

匹配條件

描述

-i

入口網卡

-o

出口網卡

-s

源地址

-d

目的地址

-p

協議類型

--sport

源端口

--dport

目的端口

 

動做

描述

ACCEPT

容許數據包經過

DROP

丟棄數據包不作處理

REJECT

拒絕數據包,並返回報錯信息

SNAT

通常用於nat表的POSTROUTING鏈,進行源地址轉換

DNAT

通常用於nat表的PREROUTING鏈,進行目的地址轉換

MASQUERADE

動態源地址轉換,動態IP時使用

 

模塊

描述

state

包狀態,有四個:NEW、RELATED、ESTABLISHED和INVALID

mac

源MAC地址

limit

包速率限制

multiport

多端口,以逗號分隔

iprange

端口範圍,以逗號分隔

示例:經常使用的規則配置方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
iptables -F          # 清空表規則,默認filter表
iptables -t nat -F      # 清空nat表
iptables -A INPUT -p tcp --dport 22 -j ACCEPT     # 容許TCP的22端口訪問
iptables -I INPUT -p udp --dport 53 -j ACCEPT     # 容許UDP的53端口訪問,插入在第一條
iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT  # 容許端口範圍訪問
iptables -D INPUT -p tcp --dport 22:25 -j ACCEPT  # 刪除這條規則
# 容許多個TCP端口訪問
iptables -A INPUT -p tcp -m multiport --dports 22,80,8080 -j ACCEPT  
iptables -A INPUT -s 192.168.1.0 /24  -j ACCEPT    # 容許192.168.1.0段IP訪問
iptables -A INPUT -s 192.168.1.10 -j DROP        # 對1.10數據包丟棄
iptables -A INPUT -i eth0 -p icmp -j DROP        # eth0網卡ICMP數據包丟棄,也就是禁ping
# 容許來自lo接口,若是沒有這條規則,將不能經過127.0.0.1訪問本地服務
iptables -A INPUT -i lo -j ACCEPT   
# 限制併發鏈接數,超過30個拒絕    
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j REJECT   
# 限制每一個IP每秒併發鏈接數最大3個
iptables -I INPUT -p tcp --syn -m limit --limit 1 /s  --limit-burst 3 -j ACCEPT           
iptables -A FORWARD -p tcp --syn -m limit --limit 1 /s  -j ACCEPT
# iptables服務器做爲網關時,內網訪問公網
iptables –t nat -A POSTROUTING -s [內網IP或網段] -j SNAT --to [公網IP]      
# 訪問iptables公網IP端口,轉發到內網服務器端口          
iptables –t nat -A PREROUTING -d [對外IP] -p tcp --dport [對外端口] -j DNAT --to [內網IP:內網端口] 
# 本地80端口轉發到本地8080端口  
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
# 容許已創建及該連接相關聯的數據包經過            
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    
# ASDL撥號上網                
iptables -t nat -A POSTROUTING -s 192.168.1.0 /24  -o pppo -j MASQUERADE                   
iptables -P INPUT DROP   # 設置INPUT鏈缺省操做丟棄全部數據包,只要不符合規則的數據包都丟棄。注意要在最後設置,以避免把本身關在外面!