zoukankan      html  css  js  c++  java
  • 13-2.Shell常用命令与工具(二)

    13.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   排除不被下载域的列表

    示例:

    下载单个文件到当前目录:
    # wget http://nginx.org/download/nginx-1.13.7.tar.gz
    放到后台下载:
    # wget -b http://nginx.org/download/nginx-1.13.7.tar.gz
    对于网络不稳定的用户使用-c和--tries参数,保证下载完成,并下载到指定目录:
    # wget -t 3 -c http://nginx.org/download/nginx-1.13.7.tar.gz -P down
    不下载任何内容,判断URL是否可以访问:
    # wget --spider http://nginx.org/download/nginx-1.13.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.13.7.tar.gz
    查看HTTP头信息:
    # wget -S http://nginx.org/download/nginx-1.13.7.tar.gz
    # wget --debug http://nginx.org/download/nginx-1.13.7.tar.gz

    13.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   指定客户端信息

    示例:

    下载页面:
    # 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
     

    13.33 scp

    功能:基于SSH的安全远程服务器文件拷贝

    常用选项:

    -i  指定私钥文件

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

    -P  指定远程主机SSH端口

    -p  保存修改时间、访问时间和权限

    -r  递归拷贝目录

    -o  SSH选项,有以下常用的:

    ConnectionAttempts=NUM  连接失败后重试次数

    ConnectTimeout=SEC       连接超时时间

    StrictHostKeyChecking=no  自动拉去主机key文件

    PasswordAuthentication=no 禁止密码认证

    示例:

    本地目录推送到远程主机:
    # 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参数
     

    13.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          监听端口

    示例:

    本地复制目录:
    # 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
     

    13.35 nohup

    功能:运行命令,忽略所有挂起信号

    常用选项:

    示例:

    后台运行程序,终端关闭不影响:
    # nohup bash test.sh &>test.log &
     

    13.36 iconv

    功能:将文件内容字符集转成其他字符集

    常用选项:

    -l  列出所有已知的编码字符集

    -f  编码原始文本

    -t  输出的编码格式

    -o  输出到文件

    -s  不输出警告

    示例:

    将文件内容转换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
     

    13.37 uname

    功能:打印系统信息

    常用选项:

    -a  打印所有信息

    -s  打印内核名称

    -n  打印主机名

    -r  打印内核发行版

    -v  打印内核版本

    -m  打印机器硬件名

    -p  打印处理器类型

    -i  打印硬件平台

    -o  打印操作系统

    示例:

    打印所有系统信息:
    # uname -a
    打印主机名:
    # uname -a
    打印内核版本:
    # uname -r
    打印操作系统:
    # uname -o
     

    13.38 sshpass

    功能:非交互SSH登录(需要安装)

    常用选项:

    -f  从文件中获取密码

    -d  用数字文件描述符获取密码

    -p  密码作为参数

    -e  密码作为环境变量传递,变量名是SSHPASS

    示例:

    免交互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
     

    13.39 tar

    功能:归档目录或文件

    常用选项:

    -c  创建新归档

    -d  比较归档和文件系统的差异

    -r  追加文件到归档

    -t  存档的内容列表

    -x  提取归档所有文件

    -C  改变解压目录

    -f  使用归档文件或设备归档

    -j  bzip2压缩

    -z  gzip压缩

    -v  输出处理过程

    示例:

    创建归档文件来自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
     

    13.40 logger

    功能:系统日志的shell命令行接口

    常用选项:

    -i  每行记录进程ID

    -f  指定输出日志到文件

    -p  设置记录的优先级

    -t  添加标签

    示例:

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

    13.41 netstat

    功能:打印网络连接、路由表、接口统计信息、伪装连接和多播成员

    常用选项:

    -r  显示路由表

    -i  显示接口表

    -n  不解析名字

    -p  显示程序名 PID/Program

    -l  显示监听的socket

    -a  显示所有socket

    -o  显示计时器

    -Z  显示上下文

    -t  只显示tcp连接

    -u  只显示udp连接

    -s  显示每个协议统计信息

    示例:

    显示所有监听:
    # netstat -anltu
    显示所有TCP连接:
    # netstat -antp
    显示所有UDP连接:
    # netstat -anup
    显示路由表:
    # netstat -r
     

    13.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连接状态信息

    示例:

     
    显示所有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/*

    13.43 lsof

    功能:列出打开的文件

    常用选项:

    -i [i]  监听的网络地址,如果没有指定,默认列出所有。[i] 来自[46][protocol][@hostname|hostaddr][:service|port]

    -U  列出Unix域socket文件

    -p  指定PID

    -u  指定用户名或UID所有打开的文件

    +D  递归搜索

    示例:

    列出所有打开的文件:
    # 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

    13.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

    示例:

    打印系统上所有进程标准语法:
    # 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"
     

    13.45 top

    功能:动态显示活动的进程和系统资源利用率

    常用选项:

    -d  信息刷新时间间隔

    -p  只监控指定的进程PID

    -i  只显示正在使用CPU的进程

    -H  显示线程

    -u  只查看指定用户名的进程

    -b  将输出编排成易处理格式,适合输出到文件处理

    -n  指定最大循环刷新数

    交互命令:

    f  添加或删除显示的指标

    c  显示完整命令

    P  按CPU使用百分比排序

    M  按驻留内存大小排序

    T  按进程使用CPU时间排序

    1  显示每个CPU核心使用率

    k  终止一个进程

    示例:

    刷新一次并输出到文件:
    # top -b -n 1 > top.log
    只显示指定进程的线程:
    # top -Hp 123
    传入交互命令,按CPU排序
     

    13.46 free

    功能:查看内存使用率

    常用选项:

    -b  bytes显示

    -k  KB显示

    -m  M显示

    -g  G显示

    -h  易读单位显示

    -s  每几秒重复打印

    -c  重复打印几次退出

    示例:

    查看物理内存:
    # free -m
    易读单位显示:
    # free -h
     

    13.47 df

    功能:查看文件系统的磁盘空间使用情况

    常用选项:

    -a  包含虚拟文件系统

    -h  可易读单位显示

    -i  显示block使用的inode信息

    -k  KB显示

    -P  使用POSIX格式输出

    -t  输出指定文件系统类型

    -T  打印文件系统类型

    示例:

    查看所有文件系统:
    # df -ah
    输出指定文件系统:
    # df -t xfs
     

    13.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

    示例:

    分析系统性能:
    # vmstat
    每秒刷新一次,统计五次:
    # vmstat -t 1 5 13.49 iostat
     

    功能:报告CPU利用率和磁盘I/O

    常用选项:

    -c  显示CPU使用率

    -d  只显示磁盘使用率

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

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

    -N  显示所有映射设备名字

    -t  打印报告时间

    -x  显示扩展统计信息

    示例:

     
    显示CPU使用率:
    # iostat -c 1 3
    显示I/O磁盘统计信息:
    # iostat -d -x -k 1 3  # 间隔1秒,输出3次

    13.50 sar

    功能:查看系统资源综合方面利用率

    常用选项:

    -u, CPU

    -r, memory

    -b, disk

    -n DEV, NIC traffic

    -q, systemload

    -b, TPS(Transaction Per Second,每秒事务处理量)

    -o, output to file

    示例:

    # sar -u 2 3 #每两秒执行一次,采集三次
    # sar -u 2 3 -o cpu.out
    # sar -f cpu.out #读取文件
     

    13.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    查看最高使用内存进程

    示例:

     
    查看CPU利用率:
    # dstat –c
    查看TCP连接状态:
    # dstat --tcp

    13.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再查看对象的操作方法。

    示例:

     
    查看网络设备地址:
    # 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

    13.53 nc

    功能:TCP和UDP连接和监听

    常用选项:

    -i interval 指定间隔时间发送和接受行文本

    -l  监听模式,管理传入的连接

    -n  不解析域名

    -p  指定本地源端口

    -r  指定本地和远程主机端口

    -s  指定本地源IP地址

    -u  使用udp协议,默认是tcp

    -v  执行过程输出

    -w  timeout 连接超时时间

    -x  proxy_address[:port]  请求连接主机使用代理地址和端口

    -z  指定扫描监听端口,不发送任何数据

    示例:

     
    端口扫描:
    # 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

    13.54 time

    功能:执行脚本时间

    常用选项:

    示例:

     
    查看执行ls所需的时间:
    # time ls

    13.55 ssh

    功能:

    常用选项:

    示例:

    13.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

    端口范围,以逗号分隔

    示例:常用的规则配置方法

    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链缺省操作丢弃所有数据包,只要不符合规则的数据包都丢弃。注意要在最后设置,以免把自己关在外面!
  • 相关阅读:
    1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布
    JS。 问题类型:穷举,迭代。两个关键词:break和continue
    for循环计算游戏通关分数
    36抽8 模拟抽奖
    冒泡排序
    折纸---珠穆朗玛问题----简单for 循环
    水仙花数------"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。(for循环的嵌套)
    九九乘法表---for循环的嵌套
    百鸡百钱===百马百担====for循环嵌套
    控制台输入年龄,根据年龄输出不同的提示 ------if……else if ……else 语句
  • 原文地址:https://www.cnblogs.com/hackerlin/p/12504108.html
Copyright © 2011-2022 走看看