您的位置:新葡亰496net > 电脑系统 > 新葡亰496net:19个Linux防火墙应用技巧,Linux系统

新葡亰496net:19个Linux防火墙应用技巧,Linux系统

发布时间:2019-08-03 20:45编辑:电脑系统浏览(136)

    命令格式:命令 -选项 参数,例如:ls -la /usr;当有多个选项时,可以写在一起。
    ifconfig:查看当前机器的IP信息
    service network restart:重启网络服务
    service iptables status:查看当前机器防火墙状态
    hostname XX:查看或者修改主机名
    pwd:查看当前所在文件全路径
    ls -l或者ll或者ls:查看当前目录内容
    cat 文件名:表示查看文件的内容(小文件)
    more 文件名:表示查看文件内容(大文件),使用空格进行翻页,回车显示下一行,q(或者ctrl c)退出
    mkdir:创建文件夹
    mkdir -p d3/d4/d5:递归创建文件夹
    touch:创建文件
    head -number [文件名]:查看文件的前多少行
    tail -number [文件名]:查看文件的后多少行
    mv 1 修改文件名称的功能 : mv [源文件名称] [新文件名称]
    2 移动文件位置: mv [源文件名称] [新文件位置 新文件名称]

    Linux系统常用命令汇总,linux常用命令汇总

    命令格式:命令 -选项 参数,例如:ls -la /usr;当有多个选项时,可以写在一起。
    ifconfig:查看当前机器的IP信息
    service network restart:重启网络服务
    service iptables status:查看当前机器防火墙状态
    hostname XX:查看或者修改主机名
    pwd:查看当前所在文件全路径
    ls -l或者ll或者ls:查看当前目录内容
    cat 文件名:表示查看文件的内容(小文件)
    more 文件名:表示查看文件内容(大文件),使用空格进行翻页,回车显示下一行,q(或者ctrl c)退出
    mkdir:创建文件夹
    mkdir -p d3/d4/d5:递归创建文件夹
    touch:创建文件
    head -number [文件名]:查看文件的前多少行
    tail -number [文件名]:查看文件的后多少行
    mv 1 修改文件名称的功能 : mv [源文件名称] [新文件名称]
    2 移动文件位置: mv [源文件名称] [新文件位置 新文件名称]

    命令:chmod
    语法:chmod [{ugo}{ -=}{rwx}] [文件或目录]
    chmod [mode=421] [文件目录]
    描述:改变文件或目录的权限
    形如:chmod g w filename
    形如:chmod 761 filename

    问题示例:新建一个新目录,下面一个新文件,尝试用普通用户去删除新目录下的新文件。
    1 尝试修改:新文件的读写权限设置为 777,进行删除文件操作
    2 尝试修改:新目录的读写权限设置为 777,进行删除文件操作

    文件的rwx权限:
    r:可以执行catch、more等读操作。
    w:修改文件的内容等写操作,但是不代表你可以把这个文件删除。
    x:对文件进行执行操作。
    目录的rwx权限:
    r:可读操作,可以列出目录的内容,比如ls命令。
    w:表示可以在目录下创建或删除文件的权限。
    x:表示可以进入这个目录(基本上所以的目录都会有rx权限)。
    所以:删除文件的权限,是拥有你当前文件所在的目录的写权限。

    命令:chown
    语法:chown user 文件
    描述:改变文件的所有者
    示例:chown newuser t1.sh
    useradd username 添加用户
    passwd username 为用户设置密码

    命令:chgrp
    语法:chgrp group 文件
    描述:改变文件的所属组
    示例:chgrp adm t1.sh
    查看系统默认的权限 :umask -S (umask查看权限掩码值022 使用777-022得到真实权限)

    命令:find
    语法:find [搜索范围路径] -name 【文件名称】(根据文件名查找)
    find [搜索范围路径] -size [( -)文件大小] (根据文件大小查找,大于 小于-)
    find [搜索范围路径] -user(文件的所有者)
    find [时间查找] [以天为单位]
    [以天为单位] 1 ctime、atime、mtime
    [以分钟为单位] 2 cmin、amin、mmin
    。。。。。
    描述:查找任何文件或目录(所有)

    find [时间查找] [以天为单位]
    天: ctime、atime、mtime
    分钟:cmin、amin、mmin
    c表示:change 改变文件属性的意思(比如所有者、所属组、权限变更)。
    a表示:access 表示被访问过的意思(比如被查看过等)。
    m表示:modify 更改内容的意思。
    在时间前面添加:-表示之内, 表示之外

    find应用的连接符:
    -a (and的意思,逻辑与)
    -o(or的意思,逻辑或)

    find查找:根据文件类型进行查找:
    -type
    其中:f表示二进制文件,l表示软连接文件 d表示目录

    find的连接执行符号:
    find ... -exec [执行命令] {} ;
    注意:“{}"表示find命令查找的结果,而""表示转义符
    find ... -exec [执行命令] {} ;
    find ... -ok [执行命令] {} ;
    ok和exec的区别就是ok有询问确认的意思。
    find -inum [i节点标号] 根据i节点查找文件,在linux系统中,所有的文件都有一个唯一的标识,方便linux内核去调用,这就是i节点

    命令:locate
    语法:locate [文件名称]
    描述:查找文件,根据linux数据库内部的索引(updatedb命令,可以手工更新updatedb数据库,一般和locate配合使用)
    注意:locate的查找速度非常快,比find查找快很多,原因是locate查找的是linux系统构建的文件数据库的索引值,所以速度非常快,但是有的时候新创建的文件使用locate命令查找不到,原因是这个文件的索引没有马上更新到linux系统文件数据库里。

    命令:man
    语法:man [命令或者配置文件],
    描述:帮助命令,非常的有用,可以获得命令的帮助文档,如何使用等。

    命令:whatis
    语法:whatis [命令]
    描述:查看命令的描述。

    命令:--help
    语法:[命令] --help
    描述: 查看命令的选项用法。

    命令:gzip
    语法:gzip [文件名称]
    描述:压缩的时候不保留原文件,并且只能压缩文件不能压缩目录

    命令:gunzip
    语法:gunzip [已压缩的文件]
    描述:解压缩文件,不不保留源文件

    命令:tar
    语法:tar [zcvf] [zxvf] [打包文件名.tar.gz] [源文件]
    -c 产生tar打包文件(必选)
    -x 产生的解压缩文件(必选)
    -v 显示详细信息
    -f 指定压缩后的文件名
    -z 打包同时压缩
    描述:打包目录 生成的后缀名 .tar.gz,或者进行解压
    最后配置加-C 表示文件解压后存放的路径
    file命令可以查看任何文件的类型

    命令:zip
    语法:zip 选项[-r] [压缩后文件名称] [源文件]
    描述:zip的格式是windows和linux通用的格式,可以压缩文件和目录,压缩目录时需要选项-r。

    命令:unzip
    语法:unzip [解压缩的文件]
    描述:进行解压缩
    最后配置加-d 表示文件解压后存放的路径

    ping
    (注意:ping 不通对方网络的原因有很多种,需要一步步详细排查)
    (1)首先ping一下回环地址 127.0.0.1 检查自己本机的网络协议是否正确
    (2)再ping一下本机ip 查看自己本机的网络是否正确
    (3)然后检查对方网络设置、防火墙、插件等等
    (4)如果发现丢包率里有丢失数据包,可能是网络、网线的原因
    (5)ping 配置选项 ping -c 6 192.168.80.100(表示ping 6次之后断开)
    (6)ping 配置选项 ping -s 60000 (最大65507)

    查看网卡信息:ifconfig
    关机:shutdown -h now
    重启:reboot
    ctrl l 清屏。
    ctrl c 退出应用。
    tab键,信息补全。

    过滤:grep,可以将指定内容进行过滤然后输出。

    管道:
    将一个命令的输出传送给另一个命令,作为另外一个命令的输入。管道可以连接N个命令。
    ls -l /etc | more (表示将ls -l /etc的输出,当做more命令的输入,即more命令浏览的内容为前面命令的输出结果)
    ls -l /etc | grep init(表示将ls -l /etc的输出结果进行过滤,显示为init的结果)
    ls -l /etc | grep init | wc -l (最后进行统计显示的个数)

    逻辑与(&&)
    形如:ls && pwd(第一个命令如果执行成功。第二个命令才会执行)
    逻辑或(||)
    形如:ls || pwd (第一个命令执行成功,则第二个不执行,第一个命令执行失败,则执行第二个)

    输入输出重定向:
    Shell对每一个进程预先定义了3个文件描述字(0,1,2)
    0 (stdin) 标准输入 1 (stdout)标准输出 2 (stderr)标准错误输出
    输出重定向:就是把输出的结果显示到一个文件上 (>表示输出重定向)

     

    文件信息说明:
    drwxr-xr-x. 2 root root 6 Nov 5 2016 etc
    d:开始为d,表示目录directory,表示文件夹
    -:开头为-,表示普通的二进制文件
    l:开始为l,表示软连接文件(link)
    r:read读权限,w:write写权限,x:execute执行权限
    Linux中的文件如:drwxr-xr-x 可以看做三个部分(rwx r-x r-x),分别是文件的所有者rwx(user)的权限、所属组r-x(group)的权限和其他人r-x(others)的权限

    在进入编辑文本之后,需要按a或者i或者o才可以进行文本编辑
    退出文本编辑的操作顺序是:首先按ESC键,然后在按SHIFT :,输入wq表示保存并且退出,输入q!表示不保存并强制退出

    Linux文件说明
    1、文件的rwx
    2、硬连接数
    3、所有者
    4、所属组
    5、文件大小(不精确)
    6、文件的创建或者修改时间
    7、文件的名称

    /usr/software/JDK/jdk1.8.0_131
    export JAVA_HOME=/usr/software/JDK/jdk1.8.0_131
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。

    1、关闭firewall:
    systemctl stop firewalld.service #停止firewall
    systemctl disable firewalld.service #禁止firewall开机启动
    firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

    2、iptables防火墙(这里iptables已经安装,下面进行配置)
    vi/etc/sysconfig/iptables #编辑防火墙配置文件
    # sampleconfiguration for iptables service
    # you can edit thismanually or use system-config-firewall
    # please do not askus to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT[0:0]
    :OUTPUT ACCEPT[0:0]
    -A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -jACCEPT
    -A INPUT -i lo -jACCEPT
    -A INPUT -p tcp -mstate --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -jACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080-j ACCEPT
    -A INPUT -j REJECT--reject-with icmp-host-prohibited
    -A FORWARD -jREJECT --reject-with icmp-host-prohibited
    COMMIT
    :wq! #保存退出

    备注:这里使用80和8080端口为例。***部分一般添加到“-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT”行的上面或者下面,切记不要添加到最后一行,否则防火墙重启后不生效。
    systemctlrestart iptables.service #最后重启防火墙使配置生效
    systemctlenable iptables.service #设置防火墙开机启动

    命令格式:命令 -选项 参数,例如:ls -la /usr;当有多个选项时,可以写在一起。 ifconfig:查看当...

    Part1:iptables

    20个Linux防火墙应用技巧

    1.显示防火墙的状态

     

    以root权限运行下面的命令:

     

    # iptables -L -n -v 

     

    参数说明:

     

    -L:列出规则。

     

    -v:显示详细信息。此选项会显示接口名称、规则选项和TOS掩码,以及封包和字节计数。

     

    -n:以数字形式显示IP地址和端口,不使用DNS解析。

     

    如果希望输出的结果中显示行号,可以运行:

     

    # iptables -L -n -v --line-nmubers 

     

    这样,就可以按照行号在防火墙中添加、删除规则。

     

    要显示输入或输出链规则,可以运行:

     

    # iptables -L INPUT -n -v  

    # iptables -L OUTPUT -n -v --line-numbers 

     

    2.停止、开启和重启防火墙

     

    如果你使用的是RHEL/Fedora/CentOS系统,可以运行:

     

    # service iptables stop  

    # service iptables start  

    # service iptables restart 

     

    我们也可以使用iptables命令停止防火墙并删除所有规则:

     

    # iptables -F  

    # iptables -X  

    # iptables -t nat -F  

    # iptables -t nat -X  

    # iptables -t mangle -F  

    # iptables -t mangle -X  

    # iptables -P INPUT ACCEPT  

    # iptables -P OUTPUT ACCEPT  

    # iptables -P FORWARD ACCEPT 

     

    参数说明:

     

    -F:删除所有的规则

    -X:删除链

    -t table_name:匹配表(称为nat或mangle)

    -P:设置默认策略(如DROP、REJECT或ACCEPT)

     

    3.删除防火墙规则

     

    以带行号的形式显示已有的防火墙规则,请运行:

     

    # iptables -L INPUT -n --line-numbers  

    # iptables -L OUTPUT -n --line-numbers  

    # iptables -L OUTPUT -n --line-numbers | less  

    # iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1 

    下面我们使用行号删除规则:

     

    # iptables -D INPUT 4 

    将IP地址202.54.1.1从规则中删除:

     

    # iptables -D INPUT -s 202.54.1.1 -j DROP 

     

    参数说明:

     

    -D:从选择的链中删除一条或多条规则

     

    4.插入防火墙规则

     

    首先运行下面的命令:

     

    # iptables -L INPUT -n --line-numbers 

     

    得到运行结果:

     

    Chain INPUT (policy DROP)  

    num  target    prot opt source     destination  

    1   DROP      all  --  202.54.1.1  0.0.0.0/0  

    2   ACCEPT    all  --  0.0.0.0/0    0.0.0.0/0 

    在行1和行2之间插入规则:

     

    # iptables -I INPUT 2 -s 202.54.1.2 -j DROP 

     

    查看更新后的规则,会发现插入成功,下面是示例:

     

    Chain INPUT (policy DROP)  

    Num  target    prot opt source    destination     

    1     DROP    all  --  202.54.1.1  0.0.0.0/0  

    2     DROP    all  --  202.54.1.2  0.0.0.0/0  

    3     ACCEPT  all  --  0.0.0.0/0    0.0.0.0/0 

     

    5.保存防火墙规则

     

    在RHEL/Fedora/CentOS Linux下,可以使用下面的命令保存防火墙规则:

     

    # service iptables save 

    在其它Linux发行版(如Ubuntu)上,可以使用iptables-save命令保存防火墙规则:

     

    # iptables-save > /root/my.active.firewall.rules  

    # cat /root/my.active.firewall.rules 

     

    6.重新加载防火墙规则

     

    我们可以使用iptables-restore命令重新加载使用iptables-save命令保存的防火墙规则:

     

    # iptables-restore < /root/my.active.firewall.rules 

     

    我们还可以利用这种特性来快速部署防火墙规则。

     

    7.设置默认防火墙策略

     

    我们首先来配置一个防火墙策略,它默认丢弃所有的网络数据包:

     

    # iptables -P INPUT DROP  

    # iptables -P OUTPUT DROP  

    # iptables -P FORWARD DROP  

    # iptables -L -v -n

    #连接失败,因为防火墙丢弃所有的网络数据包  

    # ping cyberciti.biz  

    # wget  

     

    在此基础上,我们只关闭入站连接:

     

    # iptables -P INPUT DROP  

    # iptables -P FORWARD DROP  

    # iptables -P OUTPUT ACCEPT  

    # iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT  

    # iptables -L -v -n  

    #ping和wget可以正常工作  

    # ping cyberciti.biz  

    # wget  

     

    8.在公网网络接口上停用私有网络地址

     

    我们可以从公网网络接口上删除私有IPv4网段,以防止IP欺骗。运行下面的命令,没有源路由地址的数据包会被丢弃:

     

    # iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP  

    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 

     

    下面是私有网络IPv4地址范围,请确认在公网接口予以屏蔽:

     

    10.0.0.0/8 -j (A)

    172.16.0.0/12 (B)

    192.168.0.0/16 (C)

    224.0.0.0/4 (多播 D)

    240.0.0.0/5 (E)

    127.0.0.0/8 (回环)

     

    9.屏蔽IP地址访问

     

    如果我们想屏蔽一个IP地址,比如1.2.3.4,可以运行:

     

    # iptables -A INPUT -s 1.2.3.4 -j DROP  

    # iptables -A INPUT -s 192.168.0.0/24 -j DROP 

     

    10.屏蔽入栈端口请求

     

    如果我们想80端口上屏蔽所有的服务请求,可以运行:

     

    # iptables -A INPUT -p tcp --dport 80 -j DROP  

    # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP 

     

    只想屏蔽IP地址1.2.3.4对80端口的请求,可以运行:

     

    # iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP  

    # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP 

     

    11.屏蔽出栈IP地址

     

    现在我们来演示如何屏蔽对主机名和IP地址的出栈访问。

     

    首先,我们来获取一个域名的IP地址:

     

    # host -t a cyberciti.biz 

     

    输出示例:

     

    cyberciti.biz has address 75.126.153.206 

     

    要屏蔽访问域名cyberciti.biz的网络数据包,可以运行:

     

    # iptables -A OUTPUT -d 75.126.153.206 -j DROP 

     

    下面是使用子网掩码的示例:

     

    # iptables -A OUTPUT -d 192.168.1.0/24 -j DROP  

    # iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP 

     

    下面我们以屏蔽facebook.com为例,进行说明。首先,我们需要facebook的所有IP地址:

     

    # host -t a www.facebook.com 

     

    示例输出:

     

    www.facebook.com has address 69.171.228.40 

     

    找出IP地址69.171.228.40的CIDR:

     

    # whois 69.171.228.40 | grep CIDR 

     

    示例输出:

     

    CIDR:69.171.224.0/19 

     

    现在我们来阻止对facebook.com的访问:

     

    # iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP 

     

    我们也可以直接屏蔽域名:

     

    # iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP  

    # iptables -A OUTPUT -p tcp -d facebook.com -j DROP 

     

    12.记录并丢弃数据包

     

    在公网网络接口上记录并丢弃IP地址欺骗数据包:

     

    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "  

    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 

     

    默认情况下日志记录在/var/log/messages文件中:

     

    # tail -f /var/log/messages  

    # grep --color 'IP SPOOF' /var/log/messages 

     

    我们还可以用-m参数对日志记录进行限制,以防止日志文件过度膨胀。

     

    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "  

    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 

     

    13.根据MAC地址允许或阻止数据包的传入

     

    我们可以根据MAC地址允许或阻止数据包的传入:

     

    # iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

     

    14.屏蔽ICMP ping请求

     

    我们可以通过允许下面的命令屏蔽ping请求:

     

    # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP  

    # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP 

     

    也可以按照特定的网段和主机限制ping请求:

     

    # iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT 

     

    以下命令只接受受限制的ping请求:

     

    #假定默认INPUT策略为丢弃数据包  

    # iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT  

    # iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT  

    # iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT  

    #所有的服务器都对ping请求作出应答  

    # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT 

     

    15.开启端口序列

     

    下面的命令可以允许7000到7010范围内的TCP端口访问:

     

    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT 

     

    16.允许一系列IP地址访问

     

    下面的命令可以允许IP地址范围

     

    #运行IP地址范围192.168.1.100 到192.168.1.200 访问80端口  

    # iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT  

    #NAT示例  

    # iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25 

     

    17.建立连接并重启防火墙

     

    当重启iptables服务时,它会断开所有已建立的连接。这是因为在重启防火墙时,会卸载IPTABLES_MODULES_UNLOAD模块。

     

    要解决这个问题,可以编辑/etc/sysconfig/iptables-config

     

    IPTABLES_MODULES_UNLOAD = no 

    18.使用Crit日志级别

     

    # iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit 

     

    19.屏蔽或开启常见端口

     

    屏蔽或开启常用的TCP、UDP端口:

     

    #可以使用DROP替换ACCEPT,实现端口屏蔽。  

    #打开22端口(SSH)  

    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT  

    #打开TCP/UDP631端口(打印服务)  

    # iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT  

    # iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT  

    # 打开123端口,允许局域网用户进行NTP时间同步  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT  

    #打开25端口(SMTP)  

    # iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT  

    # 打开DNS端口  

    # iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT  

    # iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT  

    #打开http/https端口  

    # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT  

    # iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT  

    #打开TCP110端口(POP3)  

    # iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT  

    #打开TCP143端口  

    # iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT  

    #为局域网用户开启Samba访问  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT  

    #为局域网用户开启代理服务器访问  

    # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT  

    #为局域网用户开启MySQL访问  

    # iptables -I INPUT -p tcp --dport 3306 -j ACCEPT 

     

    20.限制客户端IP的并发连接数

     

    我们可以使用connlimit模块限制客户端IP的并发连接数。下面的命令允许每个客户端只能并发3个ssh连接:

     

    # iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT 

    设置HTTP并发连接为20个:

     

    # iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP 

     

    参数说明:

     

    --connlimit-above 3:连接数超过3个自动匹配

    --connlimit-mask 24:子网掩码匹配

     

    更好的使用iptables

     

    首先,我们要学会查看man手册:

     

    $ man iptables 

     

     我们还可以这样查看帮助:

     

    # iptables -h 

     

    我们还可以查看特定命令的帮助:

     

    # iptables -j DROP -h 

     

    新葡亰496net:19个Linux防火墙应用技巧,Linux系统常用命令汇总。测试防火墙

     

    测试端口是否开放:

     

    # netstat -tulpn 

     

    测试TCP 80端口是否开放:

     

    # netstat -tulpn | grep :80 

     

    如果80端口未开放,请确保启动Apache服务器:

     

    # service httpd start 

     

    并确保打开iptables防火墙80端口:

     

    # iptables -L INPUT -v -n | grep 80 

     

    如果80端口没有开放,可以运行下面的命令:

     

    # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT  

    # service iptables save 

     

    下面使用telnet命令测试是否可以连接到80端口:

     

    $ telnet www.cyberciti.biz 80 

     

    下面是示例输出:

     

    Trying 75.126.153.206...  

    Connected to www.cyberciti.biz.  

    Escape character is '^]'.  

    ^]  

    telnet> quit  

    Connection closed. 

     

    最后,我们也推荐使用嗅探工具(如tcpdump、ngrep)对防火墙设置进行测试。

     

    以上只是一些基本的防火墙配置策略,如果你想构造更复杂的防火墙策略,需要对TCP/IP和Linux内核配置文件sysctl.conf进行更深入的学习。

    1.显示防火墙的状态 以root权限运行下面的命令: # iptables -L -n -v 参数说明: -L:列出规则。 -v:显示详细信息。此...

    命令:chmod
    语法:chmod [{ugo}{ -=}{rwx}] [文件或目录]
    chmod [mode=421] [文件目录]
    描述:改变文件或目录的权限
    形如:chmod g w filename
    形如:chmod 761 filename

       环境:centos6.7

    问题示例:新建一个新目录,下面一个新文件,尝试用普通用户去删除新目录下的新文件。
    1 尝试修改:新文件的读写权限设置为 777,进行删除文件操作
    2 尝试修改:新目录的读写权限设置为 777,进行删除文件操作

    目前我只配置了INPUT。OUTPUT和FORWORD都是ACCEPT的规则

    文件的rwx权限:
    r:可以执行catch、more等读操作。
    w:修改文件的内容等写操作,但是不代表你可以把这个文件删除。
    x:对文件进行执行操作。
    目录的rwx权限:
    r:可读操作,可以列出目录的内容,比如ls命令。
    w:表示可以在目录下创建或删除文件的权限。
    x:表示可以进入这个目录(基本上所以的目录都会有rx权限)。
    所以:删除文件的权限,是拥有你当前文件所在的目录的写权限。

    由于想要先实现防火墙规则,所以前面的内容讲的是方法,后面是详解iptables

    命令:chown
    语法:chown user 文件
    描述:改变文件的所有者
    示例:chown newuser t1.sh
    useradd username 添加用户
    passwd username 为用户设置密码

    注意centos7.0服务启动命令不一样 

    命令:chgrp
    语法:chgrp group 文件
    描述:改变文件的所属组
    示例:chgrp adm t1.sh
    查看系统默认的权限 :umask -S (umask查看权限掩码值022 使用777-022得到真实权限)

    一、检查iptables服务状态

    命令:find
    语法:find [搜索范围路径] -name 【文件名称】(根据文件名查找)
    find [搜索范围路径] -size [( -)文件大小] (根据文件大小查找,大于 小于-)
    find [搜索范围路径] -user(文件的所有者)
    find [时间查找] [以天为单位]
    [以天为单位] 1 ctime、atime、mtime
    [以分钟为单位] 2 cmin、amin、mmin
    。。。。。
    描述:查找任何文件或目录(所有)

    首先检查iptables服务的状态

    find [时间查找] [以天为单位]
    天: ctime、atime、mtime
    分钟:cmin、amin、mmin
    c表示:change 改变文件属性的意思(比如所有者、所属组、权限变更)。
    a表示:access 表示被访问过的意思(比如被查看过等)。
    m表示:modify 更改内容的意思。
    在时间前面添加:-表示之内, 表示之外

     1 [root@izp**** ~]# service iptables status

    find应用的连接符:
    -a (and的意思,逻辑与)
    -o(or的意思,逻辑或)

    2 iptables: Firewall is not running. 
    说明iptables服务是有安装的,但是没有启动服务。
    如果没有安装的话可以直接yum安装

    find查找:根据文件类型进行查找:
    -type
    其中:f表示二进制文件,l表示软连接文件 d表示目录

    yum install -y iptables
    启动iptables

    find的连接执行符号:
    find ... -exec [执行命令] {} ;
    注意:“{}"表示find命令查找的结果,而""表示转义符
    find ... -exec [执行命令] {} ;
    find ... -ok [执行命令] {} ;
    ok和exec的区别就是ok有询问确认的意思。
    find -inum [i节点标号] 根据i节点查找文件,在linux系统中,所有的文件都有一个唯一的标识,方便linux内核去调用,这就是i节点

     1 [root@izp**** ~]# service iptables start

    命令:locate
    语法:locate [文件名称]
    描述:查找文件,根据linux数据库内部的索引(updatedb命令,可以手工更新updatedb数据库,一般和locate配合使用)
    注意:locate的查找速度非常快,比find查找快很多,原因是locate查找的是linux系统构建的文件数据库的索引值,所以速度非常快,但是有的时候新创建的文件使用locate命令查找不到,原因是这个文件的索引没有马上更新到linux系统文件数据库里。

    2 iptables: Applying firewall rules: [ OK ] 
    看一下当前iptables的配置情况

    命令:man
    语法:man [命令或者配置文件],
    描述:帮助命令,非常的有用,可以获得命令的帮助文档,如何使用等。

     1 [root@izp**** ~]# iptables -L -n 
    二、清除默认的防火墙规则

    命令:whatis
    语法:whatis [命令]
    描述:查看命令的描述。

    #首先在清除前要将policy INPUT改成ACCEPT,表示接受一切请求。
    #这个一定要先做,不然清空后可能会悲剧
     1 [root@izp**** ~]# iptables -P INPUT ACCEPT 

    命令:--help
    语法:[命令] --help
    描述: 查看命令的选项用法。

    #清空默认所有规则
     1 [root@izp**** ~]# iptables -F 

    命令:gzip
    语法:gzip [文件名称]
    描述:压缩的时候不保留原文件,并且只能压缩文件不能压缩目录

    #清空自定义的所有规则
     1 [root@izp**** ~]# iptables -X 

    命令:gunzip
    语法:gunzip [已压缩的文件]
    描述:解压缩文件,不不保留源文件

    #计数器置0
     1 [root@izp**** ~]# iptables -Z 

    命令:tar
    语法:tar [zcvf] [zxvf] [打包文件名.tar.gz] [源文件]
    -c 产生tar打包文件(必选)
    -x 产生的解压缩文件(必选)
    -v 显示详细信息
    -f 指定压缩后的文件名
    -z 打包同时压缩
    描述:打包目录 生成的后缀名 .tar.gz,或者进行解压
    最后配置加-C 表示文件解压后存放的路径
    file命令可以查看任何文件的类型

    三、配置规则

    命令:zip
    语法:zip 选项[-r] [压缩后文件名称] [源文件]
    描述:zip的格式是windows和linux通用的格式,可以压缩文件和目录,压缩目录时需要选项-r。

    #允许来自于lo接口的数据包
    #如果没有此规则,你将不能通过127.0.0.1访问本地服务,例如ping 127.0.0.1
     1 [root@izp**** ~]# iptables -A INPUT -i lo -j ACCEPT  

    命令:unzip
    语法:unzip [解压缩的文件]
    描述:进行解压缩
    最后配置加-d 表示文件解压后存放的路径

    #ssh端口22
     1 [root@izp**** ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

    ping
    (注意:ping 不通对方网络的原因有很多种,需要一步步详细排查)
    (1)首先ping一下回环地址 127.0.0.1 检查自己本机的网络协议是否正确
    (2)再ping一下本机ip 查看自己本机的网络是否正确
    (3)然后检查对方网络设置、防火墙、插件等等
    (4)如果发现丢包率里有丢失数据包,可能是网络、网线的原因
    (5)ping 配置选项 ping -c 6 192.168.80.100(表示ping 6次之后断开)
    (6)ping 配置选项 ping -s 60000 (最大65507)

    #FTP端口21
     1 [root@izp**** ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT 

    查看网卡信息:ifconfig
    关机:shutdown -h now
    重启:reboot
    ctrl l 清屏。
    ctrl c 退出应用。
    tab键,信息补全。

    #web服务端口80
     1 [root@izp**** ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEP 

    过滤:grep,可以将指定内容进行过滤然后输出。

    #tomcat
     1 [root@izp**** ~]# iptables -A INPUT -p tcp --dport xxxx -j ACCEP 

    管道:
    将一个命令的输出传送给另一个命令,作为另外一个命令的输入。管道可以连接N个命令。
    ls -l /etc | more (表示将ls -l /etc的输出,当做more命令的输入,即more命令浏览的内容为前面命令的输出结果)
    ls -l /etc | grep init(表示将ls -l /etc的输出结果进行过滤,显示为init的结果)
    ls -l /etc | grep init | wc -l (最后进行统计显示的个数)

    #mysql
     1 [root@izp**** ~]# iptables -A INPUT -p tcp --dport xxxx -j ACCEP 

    逻辑与(&&)
    形如:ls && pwd(第一个命令如果执行成功。第二个命令才会执行)
    逻辑或(||)
    形如:ls || pwd (第一个命令执行成功,则第二个不执行,第一个命令执行失败,则执行第二个)

    #允许icmp包通过,也就是允许ping
     1 [root@izp**** ~]# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 

    输入输出重定向:
    Shell对每一个进程预先定义了3个文件描述字(0,1,2)
    0 (stdin) 标准输入 1 (stdout)标准输出 2 (stderr)标准错误输出
    输出重定向:就是把输出的结果显示到一个文件上 (>表示输出重定向)

    #允许所有对外请求的返回包
    #本机对外请求相当于OUTPUT,对于返回数据包必须接收啊,这相当于INPUT了
     1 [root@izp**** ~]# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 

     

    #如果要添加内网ip信任(接受其所有TCP请求)
     1 [root@izp**** ~]# iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT 

    文件信息说明:
    drwxr-xr-x. 2 root root 6 Nov 5 2016 etc
    d:开始为d,表示目录directory,表示文件夹
    -:开头为-,表示普通的二进制文件
    l:开始为l,表示软连接文件(link)
    r:read读权限,w:write写权限,x:execute执行权限
    Linux中的文件如:drwxr-xr-x 可以看做三个部分(rwx r-x r-x),分别是文件的所有者rwx(user)的权限、所属组r-x(group)的权限和其他人r-x(others)的权限

    #过滤所有非以上规则的请求
     1 [root@izp**** ~]# iptables -P INPUT DROP 

    在进入编辑文本之后,需要按a或者i或者o才可以进行文本编辑
    退出文本编辑的操作顺序是:首先按ESC键,然后在按SHIFT :,输入wq表示保存并且退出,输入q!表示不保存并强制退出

    四、保存

    Linux文件说明
    1、文件的rwx
    2、硬连接数
    3、所有者
    4、所属组
    5、文件大小(不精确)
    6、文件的创建或者修改时间
    7、文件的名称

    首先iptables -L -n看一下配置是否正确。
    没问题后,先不要急着保存,因为没保存只是当前有效,重启后就不生效,这样万一有什么问题,可以后台强制重启服务器恢复设置。
    另外开一个ssh连接,确保可以登陆。

    /usr/software/JDK/jdk1.8.0_131
    export JAVA_HOME=/usr/software/JDK/jdk1.8.0_131
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    确保没问题之后保存

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。

    #保存
     1 [root@izp**** ~]# service iptables save 

    1、关闭firewall:
    systemctl stop firewalld.service #停止firewall
    systemctl disable firewalld.service #禁止firewall开机启动
    firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

    #添加到自启动chkconfig
     1 [root@izp**** ~]# chkconfig iptables on 

    2、iptables防火墙(这里iptables已经安装,下面进行配置)
    vi/etc/sysconfig/iptables #编辑防火墙配置文件
    # sampleconfiguration for iptables service
    # you can edit thismanually or use system-config-firewall
    # please do not askus to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT[0:0]
    :OUTPUT ACCEPT[0:0]
    -A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -jACCEPT
    -A INPUT -i lo -jACCEPT
    -A INPUT -p tcp -mstate --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -jACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080-j ACCEPT
    -A INPUT -j REJECT--reject-with icmp-host-prohibited
    -A FORWARD -jREJECT --reject-with icmp-host-prohibited
    COMMIT
    :wq! #保存退出

    iptables 25个最常用的命令

    备注:这里使用80和8080端口为例。***部分一般添加到“-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT”行的上面或者下面,切记不要添加到最后一行,否则防火墙重启后不生效。
    systemctlrestart iptables.service #最后重启防火墙使配置生效
    systemctlenable iptables.service #设置防火墙开机启动

    1、清空存在的策略
    当你开始创建新的策略,你可能想清除所有的默认策略,和存在的策略,可以这么做:
    iptables -F 或者iptables --flush
    2、设置默认策略
    默认链策略是ACCEPT,改变所有的链策略为DROP:
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    3、阻止一个指定的ip
    BLOCK_THIS_IP=“x.x.x.x"
    iptables -A INPUT -s ”$BLOCK_THIS_IP“ -j DROP
    iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
    iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
    4、允许SSH
    允许所有通过eth0接口使用ssh协议连接本机:
    iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    5、允许某个网段通过ssh连接
    iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    6、允许http和https
    允许所有进来的web流量:http协议的80端口
    iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    允许所有进来的web流量:https协议的443端口
    iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    7、多个策略联合一起
    允许ssh,http,https:
    iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
    8、允许SSH连接其他主机
    iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    9、允许SSH连接指定的网段
    iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    10、允许https出去
    iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    11、对web请求做负载均衡(每三个包,均衡到指定服务器,需要扩展iptables)
    iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
    iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
    iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
    12、允许ping
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    13、允许ping远程
    iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
    14、允许本地回环
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    15、允许内网访问外部网络
    这个例子eth1 连接外部网络,eth0连接内部网络
    iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
    16、允许DNS出去
    iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
    iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
    17、允许NIS连接
    NIS端口是动态的,当ypbind启动时它分配端口。
    首先运行 rpcinfo -p 显示得到端口号,这个例子使用端口850,853。
    iptables -A INPUT -p tcp --dport 111 -j ACCEPT
    iptables -A INPUT -p udp --dport 111 -j ACCEPT
    iptables -A INPUT -p tcp --dport 853 -j ACCEPT
    iptables -A INPUT -p udp --dport 853 -j ACCEPT
    iptables -A INPUT -p tcp --dport 850 -j ACCEPT
    iptables -A INPUT -p udp --dport 850 -j ACCEPT
    上面的例子当ypbind重新启动时将失效,有2种解决方案:
    (1)分配nis服务静态ip(2) 使用精妙的脚本
    18、允许指定网段连接Rsync
    iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
    19、允许mysql从指定的网段连接
    iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
    20、允许sendmail或者postfix
    iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
    21、允许IMAP和IMAPS
    IMAP:
    iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
    IMAPS:
    iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
    22、允许POP3和POP3S
    POP3:
    iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
    POP3S:
    iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
    23、预防DOS攻击
    iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    -m : 使用iptables扩展
    --limit 25/minute : 限制分钟连接请求数
    --limit-burst:触发阀值,一次涌入数据包数量
    24、端口转发
    来自442的都转到22端口
    iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
    你还必须明确允许442端口
    iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
    25、包丢弃日志
    你也许想查看所有丢弃包的日志。
    首先创建一个新链叫 LOGGING
    iptables -N LOGGING
    确保所有的连接跳到LOGGING
    iptables -A INPUT -j LOGGING
    记录这些包通过自定义名字 "log-prefix"
    iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped:" --log-level 7
    最后丢弃这些数据包
    iptables -A LOGGING -j DROP

     

     

    Part2:linux ls命令

       当输出的内容超出一屏时,可以使用管道(|)结合more命令来实现分屏显示

    1 ls | more
    

    按enter键 是向上滚动一行

    按空格键 是向上滚动一页

      ls

      命令选项 (非必选项)

      -a 列出目录下所有文件,包含以.开头的隐藏文件

      -A显示出.和..以外的所有文件

      -d显示目录的自身属性,不显示目录下的文件(不是很清楚,只显示一个.)

      -l列出目录和文件的详细信息

      -h 和 -l参数合用,以人可读取的方式显示文件的大小,如4k,2M,3G,

      -i 显示文件或者目录的inode信息,即索引信息

      -t 按修改时间排序显示文件或者目录(时间由近及远排序)

      -r 与其他参数一起使用,使之反向排序

      --color=auto 让输出的内容按照类别显示颜色(grep中也有该参数)

    part3:Linux索引节点inode

      1.inode的简介

        文件存储在硬盘上,硬盘的最小存储单位叫做"扇区"(sector).每个扇区存储512字节(相当于0.5kb)。

        操作系统读取硬盘的时候不会一个一个扇区的读取,这样效率太低,而是一次性读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存

      储的最小单位。“块”的大小,最常见的是“4KB”,即连续的八个扇区(sector)组成一个block。

        文件数据都存储在“块”中,那么显然,我们必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就

      叫做inode,中文译名“索引节点”。

      2.inode的内容

      inode包含文件的元信息,具体来说有以下内容:

      *文件的字节数

      *文件拥有者的User ID

      *文件的Group ID

      *文件的读写执行权限

      *文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

      *链接数,即有多少文件名指向这个inode

      *文件数据block的位置

      可以用stat命令,查看某个文件的inode的信息:

       [root@izr**** /]# stat bin 

      总之,除了文件名以外的所有文件信息,都存放在inode之中。

      3.inode的大小

        inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域,一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所

      包含的信息。

        每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或2KB就设置一个inode。

        查看每个硬盘分区的inode的总数和已经使用的数量,可以使用df命令。  

    1 [root@izr**** ~]# df -i
    2 Filesystem      Inodes IUsed   IFree IUse% Mounted on
    3 /dev/xvda1     2621440 37659 2583781    2% /
    4 tmpfs           240056     1  240055    1% /dev/shm
    

        查看每个inode节点的大小,可以用一下的命令

    1 [root@izr**** ~]# dumpe2fs -h /dev/xvda1 | grep "Inode size"
    2 dumpe2fs 1.41.12 (17-May-2010)
    3 Inode size:               256
    

        由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还没存满的情况。这时,就无法在硬盘上存放新文件。

      4.inode号码

        没有inode都有一个号码,操作系统用inode号码来识别不同的文件。

        这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

        表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三部:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;

      最后,根据inode信息,找到文件数据所在的block,读出数据。

        使用ls -i 命令,可以看到文件名对应的inode号码:

    1 [root@iZr**** /]# ls -i
    2 1835009 bin    786433 home        1048577 media   131073 root           1 sys
    3 1966081 boot   393217 lib          655361 mnt    1441793 sbin     2228225 tmp
    4       4 dev    262145 lib64        917505 opt     524289 selinux  1310721 usr
    5 2490369 etc        11 lost found        1 proc    131076 srv      2097153 var
    

       5.目录文件

          Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

          目录文件的结构非常简单,就是一些列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

          ls命令只列出目录文件中的所有文件名:

    1 [root@iZr**** ~]# ls /
    2 bin   dev  home  lib64       media  opt   root  selinux  sys  usr
    3 boot  etc  lib   lost found  mnt    proc  sbin  srv      tmp  var
    

          ls -i命令列出整个目录文件,即文件名和inode号码:

          

    1 [root@iZr**** ~]# ls -i /
    2 1835009 bin    786433 home        1048577 media   131073 root           1 sys
    3 1966081 boot   393217 lib          655361 mnt    1441793 sbin     2228225 tmp
    4       4 dev    262145 lib64        917505 opt     524289 selinux  1310721 usr
    5 2490369 etc        11 lost found        1 proc    131076 srv      2097153 var
    

          如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。

          

     1 [root@iZr**** ~]# ls -l /
     2 total 96
     3 dr-xr-xr-x.  2 root root  4096 Jun 25 07:20 bin
     4 dr-xr-xr-x.  4 root root  4096 Jun 25 07:16 boot
     5 drwxr-xr-x  16 root root  3380 Oct 14 18:05 dev
     6 drwxr-xr-x. 69 root root  4096 Oct 14 18:05 etc
     7 drwxr-xr-x.  2 root root  4096 Sep 23  2011 home
     8 dr-xr-xr-x.  9 root root  4096 Jun 25 07:20 lib
     9 dr-xr-xr-x.  9 root root 12288 Jun 25 07:20 lib64
    10 drwx------.  2 root root 16384 Jun 25 07:13 lost found
    11 drwxr-xr-x.  2 root root  4096 Sep 23  2011 media
    12 drwxr-xr-x.  2 root root  4096 Sep 23  2011 mnt
    13 drwxr-xr-x.  2 root root  4096 Sep 23  2011 opt
    14 dr-xr-xr-x  93 root root     0 Oct 15  2017 proc
    15 dr-xr-x---.  4 root root  4096 Jul 18 11:00 root
    16 dr-xr-xr-x.  2 root root 12288 Jun 25 07:21 sbin
    17 drwxr-xr-x.  2 root root  4096 Jun 25 07:13 selinux
    18 drwxr-xr-x.  2 root root  4096 Sep 23  2011 srv
    19 drwxr-xr-x  13 root root     0 Oct 15  2017 sys
    20 drwxrwxrwt.  3 root root  4096 Oct 14 18:05 tmp
    21 drwxr-xr-x. 13 root root  4096 Jun 25 07:13 usr
    22 drwxr-xr-x. 18 root root  4096 Jun 25 07:19 var
    

        6.硬链接

          一般情况下,文件名和inode号码是“一一对应”关系,每个inode号码对应一个文件名。但是,Unix/Linux系统,允许多个文件名指向同一个inode号码。这意味着,可以

        用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为“硬链接”(hard

         link)

          ln命名可以创建硬链接 

     1 [root@iZr**** init.d]# ln sshd sshdbak
     2 [root@iZr**** init.d]# ls
     3 aegis             cloud-init-upgrade  iscsi         network      saslauthd
     4 agentwatch        crond               iscsid        nscd         single
     5 atd               ecs_mq-service      killall       ntpd         sshd
     6 auditd            eni-service         lvm2-lvmetad  ntpdate      sshdbak
     7 blk-availability  functions           lvm2-monitor  postfix      sysstat
     8 cloud-config      halt                mdmonitor     rdisc        udev-post
     9 cloud-final       ip6tables           multipathd    restorecond  xinetd
    10 cloud-init        iptables            netconsole    rsyslog
    11 cloud-init-local  irqbalance          netfs         sandbox
    

          注意:文件夹不能创建硬链接(hard link)

          运行上面这条命令后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做“链接数”,记录指向该inode的文件名总数,这是就会增加1。

          反过来,删除一个文件名,就会使得inode节点中的“链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block

        区域

          目录文件的“链接数”。创建目录时,默认会生成两个目录项:“.”和“..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的“硬链接”;后者的inode号码就是

        当前目录的父目录的inode号码,等同于父目录的“硬链接”。所以,任何一个目录的“硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是本身自己的“硬链接”和当前目录下的“.硬链接”。

        7.软链接

          除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件的B。因

        此,无论打开哪一个文件,最终读取的都是文件B。这是文件A就称为文件B的“软链接”(soft link)或者符号链接(symblic link)。

          这就意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:“No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文

        件名,而不是文件B的inode号码,文件B的inode“链接数”不会因此发生改变。

        ln -s 命令可以创建软链接

     1 [root@iZr**** ~]# ln /etc/init.d/sshd sshdbak
     2 [root@iZr**** ~]# ls
     3 Finished  Package  Running  sshdbak
     4 [root@iZr**** ~]# stat sshdbak
     5   File: `sshdbak'
     6   Size: 4621            Blocks: 16         IO Block: 4096   regular file
     7 Device: ca01h/51713d    Inode: 2490875     Links: 2
     8 Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
     9 Access: 2017-10-14 10:32:25.014202525  0800
    10 Modify: 2017-03-22 16:33:18.000000000  0800
    11 Change: 2017-10-14 23:09:46.819151064  0800
    12 [root@iZr**** ~]# stat /etc/init.
    13 init.conf  init.d/
    14 [root@iZr**** ~]# stat /etc/init.d/sshd
    15   File: `/etc/init.d/sshd'
    16   Size: 4621            Blocks: 16         IO Block: 4096   regular file
    17 Device: ca01h/51713d    Inode: 2490875     Links: 2
    18 Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    19 Access: 2017-10-14 10:32:25.014202525  0800
    20 Modify: 2017-03-22 16:33:18.000000000  0800
    21 Change: 2017-10-14 23:09:46.819151064  0800
    22 [root@iZr**** ~]# ln -s /etc/init.d/sshd sshdbakk
    23 [root@iZr**** ~]# ls
    24 Finished  Package  Running  sshdbak  sshdbakk
    25 [root@iZr**** ~]# stat sshdbakk
    26   File: `sshdbakk' -> `/etc/init.d/sshd'
    27   Size: 16              Blocks: 0          IO Block: 4096   symbolic link
    28 Device: ca01h/51713d    Inode: 131097      Links: 1
    29 Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
    30 Access: 2017-10-14 23:11:26.788314281  0800
    31 Modify: 2017-10-14 23:11:24.983275362  0800
    32 Change: 2017-10-14 23:11:24.983275362  0800
    

        8.inode的特殊作用

          由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

          1.有时,文件名包含特殊的字符,无法正常删除。这是直接删除inode节点,就能起到删除文件的作用。

          2.移动文件或者重命名文件,只是改变文件名,不影响inode号码

          3.打开一个文件以后,系统就以inode号码来识别这个文件,不在考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

          第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版的

        文件以同样的文件名,生成一个新的inode,不会影响的运行中的文件,等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

        9.实际问题

          在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用

        了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和

        文件。 
             查找原因:
            /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。 
           解决方案:
            1.删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
            2.用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:

     

    1 [root@izp**** /]# ln -s /opt/newcache /data/cache  
    

    就是/data/cache的内容是指向/opt/newcache的路径。

        总结:

          1)磁盘分区格式化文件系统后,会分为indode和block两部分内容。

          2)inode存放文件的属性以及指向文件实体的指针,文件名不在inode里。

          3)访问文件,通过文件---->inode---->blocks。

          4)inode一般情况默认大小256b,block大小1/2/4k。默认是4K,注意,引导分区等特殊分区除外。

          5)通过df -i查看inode数量及使用情况,dump2fs /dev/xvda1 查看inode及block的大小及数量。

          6)一个文件至少要占用一个inode及一个block,多个文件可以占用同一个inode(硬链接)。

          7)一个block只能被一个文件使用,如果文件很小,block很大,剩余空间浪费,无法继续被其他文件使用。

          8)block不是越大越好,要根据业务的文件大小进行选择,一般就是默认4k

          9)可以在格式化的时候改变inode和block的大小。

      面试题:

          1、一个100M的磁盘分区,分别写入1k的文件,及写入1M的文件,分别可以写多少个

          答:1)一个文件至少包含一个inode和一个block,inode是存放文件的属性信息的,但不包含文件名,默认大小128byte(c58),256byte(c64).

            block是存放文件实际内容的,默认大小1kb(boot),4K(非系统分区默认给4K)。

            2)默认分区常规情况下,inode是足够的,而block消耗的会更快。因此一般都是block被耗尽。  

            3)假设文件大小是Y,block大小为X(1-4k),当Y<X时,可以写多个,当Y>=X时,可以写多个,假设Y<= X写入的文件数量就是block的数量

              假设Y>X时,写入的文件数量==总的block数量/(Y/X)个

          2、磁盘报错”No space left on device”,但是通过命令df –h查看磁盘空间没有满,请问为什么?

           答:该磁盘的inode数量被用尽,无法再写入文件。

    本文由新葡亰496net发布于电脑系统,转载请注明出处:新葡亰496net:19个Linux防火墙应用技巧,Linux系统

    关键词: