zoukankan      html  css  js  c++  java
  • iptables

    一、四表五链理论

    四表,filter表(包过滤)、nat表(网络地址转换)、mangle表(包重构,修改) raw表(数据跟踪处理)

    五链(chains)是数据包传播的路径,

    1.INPUT——进来的数据包应用此规则链中的策略

    2.OUTPUT——外出的数据包应用此规则链中的策略  

    3.FORWARD——转发数据包时应用此规则链中的策略 

    4.PREROUTING——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)

    5.POSTROUTING——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

    每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

    二、常用设置

    1、放行ssh端口:

      1 iptables -A INPUT -p tcpdport 22 -j ACCEPT
      2 iptables -A OUTPUT -p tcpsport 22 -j ACCEPT

    注:/etc/rc.d/init.d/iptables save,否则直接执行service iptables restart命令后, 刚才添加的将丢失.

    2、解决iptables导致的脑裂问题

      1 iptables -A INPUT -i lo -j ACCEPT  允许来自于lo接口的数据包
      2 iptables -A OUTPUT -o lo -j ACCEPT  允许向lo接口发送数据包
      3 iptables  -A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT       #允许组播地址通信
      4 iptables  -A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT       #允许VRRP虚拟路由器冗余协通信
    

    lo 是 loopback 的缩写,也就是环回地址网卡,linux主机向自身发送数据包时,实际上的数据包是通过虚拟的lo接口来发送接受的,而不会通过你的物理网卡 eth0/eth1。

    3、脚本

    # vim iptables.sh
    #!/bin/bash
    
    #清空 filter 表和 nat 表
    iptables -F
    iptables -t nat -F
    
    #关掉 firewalld
    systemctl stop firewalld &>/dev/null
    systemctl disable firewalld &>/dev/null
    
    #以下两行允许某些调用 localhost 的应用访问
    iptables -A INPUT -i lo -j ACCEPT #规则1
    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #规则2
    
    #以下一行允许从其他地方 ping
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT #规则3
    
    #以下一行允许从其他主机、网络设备发送 MTU 调整的报文
    #在一些情况下,例如通过 IPSec VPN 隧道时,主机的 MTU 需要动态减小
    iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT #规则4
    
    #以下两行分别允许所有来源访问 TCP 80,443 端口
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT #规则5
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT #规则6
    
    #以下一行允许所有来源访问 UDP 80,443 端口
    iptables -A INPUT -p udp -m multiport --dports 80,443 -j ACCEPT #规则7
    
    #以下一行允许 192.168.1.63 来源的 IP 访问 TCP 22 端口(OpenSSH)
    iptables -A INPUT -p tcp -s 192.168.1.63 --dport 22 -j ACCEPT #规则8
    
    #以下一行允许 192.168.1.3(发起SSH连接的系统对应网卡的IP) 来源的 IP 访问 TCP 22 端口(OpenSSH)
    #如果是在远程终端跑本脚本,最好开启以下一行以防被踢掉
    #另一种更加简便的方式:iptables -I INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp -s 192.168.1.3 --dport 22 -j ACCEPT #规则9
    
    #以下一行允许 192.168.1.26 来源的 IP 访问 UDP 161 端口(SNMP)
    iptables -A INPUT -p udp -s 192.168.1.26 --dport 161 -j ACCEPT #规则10
    
    #配置 NAT
    #启用内核路由转发功能
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
    sysctl -p &>/dev/null
    
    #配置源地址转换 SNAT
    #将 192.168.2.0/24 转换成 192.168.1.63
    iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63 #规则11
    
    #配置目的地址转换 DNAT
    #将 192.168.1.63 的 80 端口请求转发到 192.168.2.2 的 80 端口
    iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80 #规则12
    
    我们期望10.0.10.62为用户访问目标,而不是web服务192.168.0.110,但62上是没有web服务的,所以有人访问62的web服务必须将其转换到110上
    iptables -t nat -A PREROUTING -d 10.0.10.62 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.110
    #以下一行禁止所有其他的进入流量 iptables -A INPUT -j DROP #规则13 #以下一行允许本机响应规则编号为 1-12 的数据包发出 iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT #规则14 #以下一行禁止本机主动发出外部连接 iptables -A OUTPUT -j DROP #规则15 #以下一行禁止本机转发数据包 iptables -A FORWARD -j DROP #规则16 #固化 iptables iptables-save > /etc/sysconfig/iptables
  • 相关阅读:
    性能调试工具
    c++11笔记
    根据样式创建内嵌页面
    VMware安装两张网卡
    【赵强老师】使用Oracle的跟踪文件
    【赵强老师】Kafka的消息持久化
    【赵强老师】Kubernetes的探针
    【赵强老师】阿里云大数据ACP认证之阿里大数据产品体系
    【赵强老师】NoSQL数据库之Cassandra基础
    【赵强老师】使用Weblogic的WLST工具
  • 原文地址:https://www.cnblogs.com/zjz20/p/11918285.html
Copyright © 2011-2022 走看看