本章涉及命令以下:
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鏈缺省操做丟棄全部數據包,只要不符合規則的數據包都丟棄。注意要在最後設置,以避免把本身關在外面!
|