本章涉及命令如下:

wKioL1jHiVzgBbL6AAAi8p_X3UM051.png

11.31 wget

功能:非交互式网络下载,类似于HTTP客户端

常用选项:

-b,  --background         后台运行

日志记录和输入文件:

-o,  --output-file=FILE      日志写到文件

-a, --append-output=FILE     日志追加到文件

-d,  --debug              打印debug信息,会包含头信息

-q,  --quiet              退出,不输出

-i,  --input-file=FILE      从文件中读取URL下载

下载选项:

-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 " |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 " | 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链缺省操作丢弃所有数据包,只要不符合规则的数据包都丢弃。注意要在最后设置,以免把自己关在外面!