zoukankan      html  css  js  c++  java
  • 2、iptables基本应用

    iptables:规则管理工具

    添加、修改、删除、显示等;

    规则和链有计数器:

    pkts:  由规则或链所匹配到的报文的个数;

    bytes:由规则或链匹配到的所有报文大小之和;

    iptables命令:

    iptables [-t table] {-A|-D} chain rule-specification     chain:链    

    iptables [-t table] -I chain [rulenum] rule-specification

    iptables [-t table] -R chain rulenum rule-specification

    iptables [-t table] -D chain rulenum

    iptables [-t table] -S [chain [rulenum]] 

    iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

    iptables [-t table] -N chain

    iptables [-t table] -X [chain]

    iptables [-t table] -P chain target

    iptables [-t table] -E old-chain-name new-chain-name

     

    -t table:filter, nat, mangle, raw

    链管理:

    -F:flush       清空规则链;省略链,表示清空指定表上的所有的链;

    -N:new        创建新的自定义规则链;

    -X:drop        删除用户自定义的空的规则链,如果有规则,先使用-F清空;

    -Z:zero        清零,置零规则计数器;

    -P:Policy     为指定链设置默认策略;对filter表中的链而言,默认策略通常有ACCEPT, DROP, REJECT;

    -E: rEname    重命名自定义链;引用计数不为0的自定义链,无法改名,也无法删除;

    链上的规则管理:

    -A:append,将新规则追加于指定链的尾部;

    -I:insert,将新规则插入至指定链的指定位置;

    -D:delete,删除指定链上的指定规则;

    有两种规则指定方式:

    (1) 指定匹配条件;

    (2) 指定规则编号;

    -R:replace,替换指定链上的指定规则;

    查看规则:

    -L:list,列出指定链上的所有规则;

    -n: numberic,以数字格式显示地址和端口号;

    -v: verbose,显示详细信息;

    -vv, -vvv,越多,显示越详细

    --line-numbers:显示规则编号;

    -x: exactly, 显示计数器计数结果的精确值;

    示例

    # iptables -t filter -N IN_PUBLIC //添加自定义规则连

    # iptables -L -n  //查看,默认是filter

    Chain IN_PUBLIC (0 references)     //此时的计数为空,没有引用,而且内部内有规则,可以修改名称
    target        prot        opt source     destination

    # iptables -t filter -E IN_PUBLIC OUT_PUBLIC

    Chain OUT_PUBLIC (0 references)
    target    prot      opt source     destination

    # systemctl restart firewalld   //如果重启firewalld的话,会自动生成很多规则

    # iptables -L -n

    Chain INPUT (policy ACCEPT)
    target      prot   opt   source     destination
    ACCEPT      all    --    0.0.0.0/0  0.0.0.0/0     ctstate RELATED,ESTABLI

    all:表示所有协议tcp、udp、icmp

    ctstate:表示链接追踪状态,后面表示追踪的状态

    RELATED:

    ESTABLI

    target还可以是一个自定义链,自定义链放在内置链上,当报文被内置链检查时,一旦由自定义链所匹配,就由自定义链上的规则所检查

    某个链被引用了,它不可以被删除;链不被引用,内部的规则是不会生效的

    # systemctl restart firewalld
    # iptables -L -n

    RETURN:返回调用者 

    匹配条件:

    基本匹配:

    [!] -s, --src, --source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围; [!]:表示取反,可省

    [!] -d, --dst, --destination IP|Netaddr:检查报文中源IP地址(目标地址转为源IP)是否符合此处指定的地址范围;

    [!] -p, --protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议;

    [!] -i, --in-interface IFACE:数据报文的流入接口;仅能用于PREROUTING, INPUT及FORWARD链上;

    [!] -o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上;

    扩展匹配:-m macth_name --spec_options

    例如:-m tcp --dport 22  检查tcp目标端口,如果已经使用-p指明协议,就不需要在使用-m指明了

    隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m选项;

    • -p tcp 
    • --dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口(必须是连续的);
    • --sport PORT[-PORT]:匹配源端口
    • --tcp-flags LIST1 LIST2:检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1,而余下的必须为0;没有LIST1中指明的,不作检查;

    SYN, ACK, FIN, RST, PSH, URG

    示例:--tcp-flags SYN,ACK,FIN,RST SYN  //表示只检查SYN、ACK、FIN、RST这四个位,其他都不做检查,并且SYN必须为1,其他的都为0,

                                                                         //因为这SYN在LIST2列表中,此示例表示第一次握手

               --syn:相当于--tcp-flags SYN,ACK,FIN,RST SYN,两个功能相同

    • -p udp
    • --dport
    • --sport
    • -p icmp

    --icmp-type   //报文类型

    可用数字表示其类型:

    • 0:echo-reply   回显应答
    • 8:echo-request  回显请求

    显式扩展: 必须使用-m选项指定使用的扩展;

    允许自己ping别的主机,不允许别的主机ping自己   //这里首先需要把INPUT/OUTPUT/FORWARD的默认规则改为DROP,但需要提前开放22号端口,否则无法使用ssh服务

    # iptables -A OUTPUT -s 192.168.184.144 -p icmp --icmp-type 8 -j ACCEPT  ping别的主机,先从本主机出去,目标地址不知道,ping请求是8
    # iptables -A INPUT -d 192.168.184.144 -p icmp --icmp-type 0 -j ACCEPT   ping别的主机,要接受ping后的报文,目标地址是本机,报文类型是回显应答

    别的主机无法ping通,因为144只放行了响应报文,即从本机出去的报文

    目标:

    -j     TARGET:jump至指定的TARGET

    • ACCEPT: 接受
    • DROP: 丢弃
    • REJECT: 拒绝,有回应报文
    • RETURN: 返回调用链
    • REDIRECT:端口重定向
    • LOG: 记录日志
    • MARK:做防火墙标记
    • DNAT:目标地址转换
    • SNAT:源地址转换
    • MASQUERADE:地址伪装
    • ...
    • 自定义链:由自定义链上的规则进行匹配检查;为什么要用自定义链:当链上的规则过多时,可以把功能相近的放在一个单独的链上,做单独管理;

    示例

    # iptables -t filter -A INPUT -s 0.0.0.0 -d 192.168.184.144 -p tcp -j ACCEPT  //访问本机的属于TCP的报文,都放行,-s IP:表示全部主机,可省略

    # iptables -t filter -A OUTPUT -s 192.168.184.144 -p tcp -j ACCEPT  //TCP协议报文跟任何主机通信都允许出去

    现在把filter表的所有规则改为drop,ssh链接还能保持?

    # iptables -P INPUT DROP  //一定要谨慎
    # iptables -P OUTPUT DROP
    # iptables -P FORWARD DROP   

    此时并没有断开,因为有之前定义的ACCEPT规则,这里只允许tcp协议的报文访问,如果icmp协议即ping命令的话,则报文无法进来,如果设置了INPUT能进来,也无法OUTPUT出去,所以报文要能进能出,当不希望某个IP访问服务器时,因该在INPUT上直接拒绝。

    在测试iptables规则是,为了防止定义的DROP规则无法使ssh服务登录,可以利用&&

    # iptables -t filter -A INPUT -d 192.168.184.144 -p tcp -j DROP   //访问本机的报文且属于tcp协议的都拒绝,这是ssh服务就无法链接

    # iptables -t filter -A INPUT -d 192.168.184.144 -p tcp -j DROP && sleep 5 && iptables -F

                                                  //拒绝后过5面直接清空iptables规则,执行后不会拒绝ssh服务 

    做报文流入接口限制,ping进来时限制流入,ping出去时限制流出

    # iptables -A INPUT -d 192.168.184.144 -o eth0 -j ACCEPT   //流入接口是不能做流出限制的

    iptables v1.4.21: Can't use -o with INPUT

    Try `iptables -h' or 'iptables --help' for more information.

    # iptables -A INPUT -d 192.168.184.144 -i eth0 -j ACCEPT   //如果有多块网卡,除了eth0允许报文流入,其他都是不被允许的

    # iptables -A OUTPUT -s 192.168.184.144 -o eth0 -j ACCEPT   //报文从eth0流出

    如何只放行一个ssh端口,而非所有tcp端口(ssh端口属于tcp协议)?这里就是用到扩展匹配的隐式扩展

    仅放行对本机ssh服务的访问。客户端端口是随机的,只能限定所放行的目标端口

    # iptables -I INPUT -d 192.168.184.144 -p tcp --dport 22 -j ACCEPT  //仅放行对本机访问的22端口,这里仅放行了入栈

    # iptables -I OUTPUT -s 192.168.184.144 -p tcp --sport 22 -j ACCEPT  //这里是服务器响应报文请求的内容,所以也用22号端口进行响应

    此时访问没有问题

    如果想让web服务访问,只需要开启80端口

    # iptables -I INPUT -d 192.168.184.144 -p tcp --dport 80 -j ACCEPT    //所有访问144主机且的端口是80的报文
    # iptables -I OUTPUT -s 192.168.184.144 -p tcp --sport 80 -j ACCEPT   //所有从144主机发出且是从80端口发出的

    此时浏览器就可以访问80端口了

  • 相关阅读:
    从 i++ 和 ++i 说起局部变量表和操作数栈
    数据库连接情况查询相关sql语句
    db2相关语句
    BeanUtils源码详解
    Spring注解驱动开发之AOP
    Spring注解驱动开发之IOC
    正则表达式
    linux特殊符号
    linux下面如何让一个软件/命令开机自启动
    linux文件属性
  • 原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/9786979.html
Copyright © 2011-2022 走看看