iptables

作者: taobao | 来源:发表于2021-12-14 18:45 被阅读0次

    iptables常用指令

    Comands:
    -A --append 附加规则,将新的规则附加到链的尾部
    -D --detelte 从链中删除匹配的规则
    -I --insert 根据数字插入链中,默认1插入第一位
    -R --replace 替换链中规则,默认1第一个
    -L --list List the rules in a chain or all chains
    -S --list-rules Print the rules in a chain or all chains
    -F --flush 删除链中规则,或者全部链
    -Z --zero 链或所有链计数器清零
    -N --new 新建一条用户自定义链
    -X --delete-chain 删除用户定义的链
    -P --policy 设置默认策略
    -E --rename-chain 改变链名称

    Options:
    -d --destination 目的地址或网关
    -s --source 来源地址或网关
    -i --in-interface 输入网卡设备
    -o --out-interface 输出网卡设备
    -j --jump 跳转到目标规则:-j ACCEPT
    -g --goto 跳转到目标链,没有返回
    -m --match 匹配、扩展
    -n --numeric 以数字输出地址和端口
    -p --protocol 协议类型:tcp、udp
    -t --table table to mainpulate(default:filter)
    其它:
    --dport 目的端口
    --sport 源端口

    1:查看当前规则
    iptables -L -n 
    2:查看当前规则
    iptables -t nat -S
    iptables -L -t filter
    3:设置默认策略
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    4:删除全部规则
    iptables -F
    5:阻止指定IP地址
    iptables -A INPUT -s 1.1.1.1 -j DROP
    iptables -A INPUT -i eth0 -s 1.1.1.1 -j DROP
    iptables -A INPUT -i eth0 -p tcp -s 1.1.1.1 -j DROP
    6:允许所有SSH连接请求
    iptables -A INPUT -i eth0 -p tcp -s 1.1.1.1/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
    7: 允许http和https的连接请求
    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
    iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    8:使用multiport将多个规则结合在一起
    允许所有ssh http https的流量访问
    iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptable -A OUTPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
    9:允许从本地发起ssh请求
    iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    // 限定向特定网段发起ssh请求
    iptables -A OUTPUT -o eth0 -p tcp -d 1.1.1.1/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    10. 负载平衡传入的网络流量
    使用iptables nth将https流量负载平衡到三个不同的IP地址
    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
    11. 允许外部主机ping内部主机
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    12. 允许内部主机ping外部主机
    iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
    13. 允许回环访问
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    14. 允许内部网络与外部网络之间通信
    iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT
    15. 允许出站的DNS连接
    iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    iptables -A INPUT -p udp --sport 53 -j ACCEPT
    16. 防止DOS攻击
    iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    17. 端口转发 
    首先,允许422的端口访问
    其次,将422端口的流量用DNAT转发到22端口
    iptables -t nat -A PREROUTING -p tcp -d 192.168.1.101 --dport 422 -j DNAT --to 192.168.1.101 --dport 22
    18. 记录丢弃的数据表
    首先,新建LOGGING的链
    iptables -N LOGGING
    其次,将所有INPUT链的请求跳转到LOGGING链
    iptables -A INPUT -j LOGGING
    再次,为这些包自定义前缀,命名为"IPTables Packet Dropped"
    iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped" --log-level 7
    最后,丢弃这些数据包
    iptables -A LOGGING -j DROP
    

    四表

    1. filter表,负责过滤功能,防火墙,内核模块:iptable_filter
    2. nat表,网络地址转换功能,内核模块:iptable_nat
    3. mangle表,拆解报文,做出修改,并重新封装,内核模块:iptable_mangle
    4. raw表,关闭nat表上启用的连接追踪机制,iptable_raw

    五链

    1. prerouting 对数据包作路由选择前应用此链中的规则
    2. input 进来的数据包应用此规则链中的规则
    3. forward 转发数据包时应用此规则链中的规则
    4. postrouting 对数据包作路由选择后应用此链中的规则
    5. output 外出的数据包应用此规则链中的规则

    报文流向:

    1. 到本机某进程的报文:prerouting -> input
    2. 由本机转发的报文:prerouting -> forward -> postrouting
    3. 本机某进程发出的报文:output -> postrouting

    四表五链对应关系:

    1. 规则和表对应关系
      PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
      INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
      FORWARD 的规则可以存在于:mangle表,filter表。
      OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
      POSTROUTING 的规则可以存在于:mangle表,nat表。
    2. 表和规则对应关系
      表(功能)<–> 链(钩子):
      raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
      mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
      nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
      filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

    处理动作

    1. ACCEPT 允许数据包通过
    2. DROP 直接丢弃数据包
    3. REJECT 拒绝数据包通过
    4. SNAT 源地址转换
    5. MASQUERADE 是SNAT的一种特俗形式,适用于动态的,临时会变的IP上
    6. DNAT 目的地址转换
    7. REDIRECT 在本机做端口映射
    8. LOG 在/var/log/message文件中记录日志信息,然后将数据包传给下一条规则,也就是除了记录以外,不对数据包做任何其它操作,仍然让下一条规则去匹配

    非常用指令

    // 查看
    iptables -t 表名 -L 链名
    iptables -L INPUT (默认是-t filter)
    iptables -L -t filter INPUT
    // -n 已数字显示端口和IP -v详细的信息
    iptables -nvL INPUT
    
    // 自定义链表
    iptables -t filter -N LXH_IN_WEB
    iptables -L LXH_IN_WEB
    iptables -A LXH_IN_WEB -s 192.168.1.1 -j ACCEPT
    iptables -A LXH_IN_WEB -s 192.168.1.1 -j DROP
    iptables -A LXH_IN_WEB -s 192.168.1.3 -p tcp --sport 80 -j ACCEPT
    // --line显示序号
    iptables --line -nvL LXH_IN_WEB
    // 从LXH_IN_WEB表中删除序号为3的规则
    iptables -D LXH_IN_WEB 3
    // 从LX_IN_WEB表中修改序号为2的规则
    iptables -R LXH_IN_WEB 2 -j ACCEPT
    // 表重命名
    iptables -E LXH_IN_WEB IN_WEB
    // 删除
    iptables -X IN_WEB
    

    规则匹配

    -s 源IP
    -p 目的IP
    --sport 源端口
    --dport 目的端口
    -p 协议,tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
    -i 入口网卡
    -o 出口网卡
    //多个源IP
    -s ip1,ip2
    // 多端口
    -m multiport --sport 21,22,53,80
    //取反
    ! -s ip1,ip2
    // 如果不是192.168.1.1的,就接收,是否拒绝,还要看有没有其他规则匹配,比如默认规则,如果默认规则是接收,依旧会接收,否则拒绝。
    iptables -t filter -A INPUT ! -s 192.168.1.1 -j ACCEPT
    

    常用扩展

    // tcp扩展
    -m tcp --sport 22
    -m tcp --dport 22
    // multiport扩展
    -m multiport --sport 21,22
    -m multiport --dport 21,22
    // iprange扩展
    -m iprange --src-range 192.168.1.127-192.168.1.146 
    -m iprange --dst-range 192.168.1.127-192.168.1.146
    // string扩展 可以指定要匹配的字符串
    //–algo bm表示使用bm算法去匹配指定的字符串
     -m string --algo bm --string "Hello World" 
    // time扩展 根据时间段区匹配报文
    -m time --timestart 09:00:00 --timestop 18:00:00 
    -m time --weekdays 6,7 // 周六、周日
    -m time --monthdays 22,23 //每月22,23号
    –monthdays与–weekdays可以使用”!”取反,其他选项不能取反
    // connlimit扩展 限制每个IP地址同时链接到server端的链接数量
    -m connlimit --connlimit-above 2 -j REJECT //每个IP的链接数量上限为2,超过就要拒绝
    -m connlimit ! --connlimit-above 2 -j ACCEPT //每个IP的链接数量不超过2个,接受,超过不代表拒绝,要匹配其它规则
    -m connlimit --connlimit-above 2 --connlimit-mask 24 //限制某类网段 24网段255个IP,27网段30个IP
    // limit扩展 对”报文到达速率”进行限制的
    -p icmp -m limit --limit 10/minute //每分钟10个包 ,还有second,hour,day
    –limit-burst // 空闲时可放行的包的数量
    // --tcp-flags 指的就是tcp头中的标志位
    -m tcp --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN
    // 匹配第一次握手
    --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN
    --tcp-flags ALL SYN 同上
    --syn 等价于 同上
    // 匹配第二次握手
    --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK
    --tcp-flags ALL SYN,ACK 同上
    // udp扩展
    -p udp --sport 21,22 // 21,22
    -p udp --dport 21:25  // 21 - 25
    // icmp扩展 ping命令使用icmp协议,类型为8
    -p icmp -m icmp --icmp-type 8/0 -j REJECT//禁止别人ping本机, 8/0格式为:type/code,表示类型为8,code为0的报文
    -p icmp -m icmp -icmp-type 'echo-request' // 使用类型描述名称匹配
    // state扩展 可以让iptables实现”连接追踪”机制,五种状态:
    NEW 第一个包
    ESTABLISHED 连接已建立
    RELATED 关系,ftp协议有命令连接和数据连接,数据连接可以是RELATED状态,表示有关系 
    INVALID 一个包没有办法被识别
    UNTRACKED 表示报文未被追踪
    

    黑白名单

    1. 当默认策略是ACCEPT是,链中的规则对应DROP和REJECT,表示只有符合规则的才会被丢弃、拒绝,没有匹配的规则默认接受,这就是黑名单
    2. 当默认策略是DROP、REJECT,链中的规则对应为ACCEPT,表示只有符合规则的才会接受,没有匹配的规则默认拒绝,这就是白名单

    iptables动作

    1. 基础动作 ACCEPT、DROP
    2. 扩展动作 REJECT
    3. LOG动作
    // 将22端口的tcp报文信息记录到日志,日志存储位置/var/log/messages
    iptables -I INPUT -p tcp --dport 22 -j LOG
    
    //vim /etc/rsyslog.conf
    kern.warning /var/log/iptables.log
    //加入上述配置后,报文的相关信息将会被记录到/var/log/iptables.log文件中。
    //完成上述配置后,重启rsyslog服务(或者syslogd)
    service rsyslog restart
    //服务重启后,配置即可生效,匹配到的报文的相关信息将被记录到指定的文件中。
    LOG选项:
     –log-level选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,error,warning,notice,info,debug。
     –log-prefix选项可以给记录到的相关信息添加”标签”之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。
    
    1. SNAT 内部网络的报文发送出去时,报文的源IP会被修改
    iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP
    
    1. DNAT 外部网络的报文响应时,响应报文的目标IP会再次被修改
    iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 公网端口 -j DNAT --to-destination 私网IP:端口号
    iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 8080 -j DNAT --to-destination 10.1.0.1:80
    iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP
    
    1. MASQUERADE 动态的将源地址转换为可用的IP地址,其实与SNAT实现的功能完全一致,都是修改源地址,只不过SNAT需要指明将报文的源地址改为哪个IP,而MASQUERADE则不用指定明确的IP
    iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
    
    1. REDIRECT 在本机上进行端口映射
    //将本机80端口映射到本机8080端口
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    

    centos7中配置iptables-service

    #配置好yum源以后安装iptables-service
    yum install -y iptables-services
    #停止firewalld
    systemctl stop firewalld
    #禁止firewalld自动启动
    systemctl disable firewalld
    #启动iptables
    systemctl start iptables
    #将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务
    systemctl enable iptables
    

    ICMP报文type和code对照表

    ICMP报文
    ICMP报文

    相关文章

      网友评论

          本文标题:iptables

          本文链接:https://www.haomeiwen.com/subject/zezsxrtx.html