当前位置 : 主页 > 操作系统 > centos >

iptables防火墙总结

来源:互联网 收集:自由互联 发布时间:2022-07-05
iptables是Linux下自带的开源的一款免费的基于包过滤的防火墙工具,可以对 流入、流出、流经服务器的数据包进行精细的控制 iptables的工作流程 iptables是采用数据包过滤机制工作的,所

iptables是Linux下自带的开源的一款免费的基于包过滤的防火墙工具,可以对

流入、流出、流经服务器的数据包进行精细的控制

iptables的工作流程

iptables是采用数据包过滤机制工作的,所以他会对请求的数据包的包头进行

分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机

  • 防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  • 如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不能向下匹配新规则了。
  • 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  • 防火墙的默认规则是对应链的所有的规则执行完才会执行的(最后执行的规则)
  • iptables的五表

    filter***

    过滤功能,确定是否放行该数据包,属于真正的主机防火墙(默认)

    nat***

    网络地址转换功能,修改数据包中的源、目标IP地址或端口

    mangle

    对数据包进行重新封装功能,为数据包设置标记

    raw

    确定是否对数据包进行跟踪

    security

    是否定义强制访问控制规则(后加上的)

    iptables的五链

    INPUT

    处理入站数据包

    OUTPUT

    处理出站数据包

    FORWARD

    处理转发数据包(流经本机)

    PREROUTING

    在进行路由选择前处理数据包,适用于外网访问内网,修改到达防火墙的数据包的目的IP

    POSTROUTING

    在进行路由选择后处理数据包,适用于内网访问外网,修改要离开防火墙的数据包的源IP

    iptables中表链之间的关系

    这里只对常用的表进行记录

    优先级:nat>filter

    filter

    nat

    INPUT

    PREROUTING

    OUTPUT

    POSTROUTING

    FORWARD

    OUTPUT

    数据包流经iptables的流程

    iptables防火墙总结_iptables总结

  • 所有的数据包在进入iptables之前,都会匹配NAT表的PREROUTING链
  • 如果数据包的目标就是本机,在进入本机之前,还会匹配FILTER表的INPUT链,离开本机后还会匹配NAT表的OUTPUT链与FILTER表的OUTPUT链
  • 如果数据包是流经本机的,会匹配FILETER表的FORWARD链
  • 所有的数据包在离开iptables的时候,都会匹配NAT表的POSTROUTING链
  • iptables语法结构

    iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 动作]

    注意:

    不指定表名时,默认表示filter表

    不指定链名时,默认表示该表内所有链

    除非设置链的默认策略,否则需要指定匹配条件

    管理选项

    链管理

    -F:清空指定的链上的规则
    -P:制定链的默认策略(ACCEPT|DROP)

    -N:新建一个自定义的规则链
    -X:删除用户自定义的引用计数为0的空链
    -E:重命名链
    -Z:置零计数器

    规则管理

    -A:追加新规则于指定链的尾部
    -I:插入新规则于指定链的首部

    -R:替换指定的规则为新的规则
    -D:删除规则
    可以根据规则编号删除规则,也可以根据规则本身删除规则

    规则显示

    -L:列出规则
    -v:详细信息
    -n:数字格式显示主机地址和端口号
    --line-numbers:列出规则时,显示其在链上的相应的编号

    -vv:更详细的信息
    -x:显示计数器的精确值,而非圆整后的数据
    -S:显示指定链的所有规则

    匹配条件

    基本匹配条件

    匹配协议,源目IP,出入接口

    -p 指定规则协议,tcp udp icmp all
    -s 指定数据包的源地址
    -d 指定目的地址
    -i 输入接口
    -o 输出接口
    ! 取反

    扩展匹配条件

    隐式匹配

    匹配源目端口

    -p tcp
    --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
    --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
    --tcp-flags mask comp 匹配报文中的tcp协议的标志位
    -p udp
    --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
    --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
    --icmp-type
    0/0:echo reply 允许其他主机ping
    8/0:echo request 允许ping其他主机

    显式匹配

    multiport 多端口

    iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --dports 22,80 -j ACCEPT
    #在INPUT链中开放本机tcp 22,tcp80端口

    iptables -I OUTPUT -s 192.168.2.10 -p tcp -m multiport --sports 22,80 -j ACCEPT
    #在OUTPUT链中开放源端口tcp 22,tcp80

    iprange 多ip地址

    iptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT

    iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 23 -m iprange --dst-range 192.168.2.11-192.168.2.21 -j ACCEPT

    time 指定访问时间范围

    iptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT

    iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 901 -j ACCEPT

    动作

    ACCEPT:允许数据包通过

    DROP:直接丢弃数据包,不给任何回应信息

    REJECT:拒绝数据包通过,发送回应信息给客户端

    SNAT:源地址转换
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.12.10.100

    MASQUERADE:伪装,类似于SNAT,适用于动态的、临时会变的ip地址上
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE

    DNAT:目标地址转换
    iptables -t nat -A PREROUTING -i eth1 -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.11:8080

    REDIRECT:在本机做端口映射

    LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则

    iptables规则的保存与重载

    保存

    iptables-save > /etc/sysconfig/iptables

    重载

    iptables-restore < /etc/sysconfig/iptables

    iptables范例

    清空现有规则

    清空所有链的规则
    iptables -F

    清空具体链的规则
    iptables -F INPUT

    查看规则

    iptables -nL

    详细查看
    iptables -nvL

    查看规则的时候显示编号
    iptables -nL --line-numbers

    设置链的默认规则

    iptables -P INPUT ACCEPT
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

    删除规则

    根据规则编号删除
    iptables -D INPUT 2

    根据规则本身删除
    iptables -D INPUT -p tcp --dport 80 -j ACCEPT

    禁止来自10.0.0.188 ip地址访问80端口的请求

    iptables -A INPUT -p tcp -s 10.0.0.188 --dport 80 -j DROP

    实现把访问10.0.0.3:80的请求转到172.16.1.17:80(DNAT)

    iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80

    实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网(SNAT)

    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26

    只允许远程主机访问本机的80端口

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT 允许80端口访问
    iptables -P INPUT DROP 默认拒绝所有服务、端口访问

    允许通过本地回环网卡访问本机

    [root@localhost ~]# iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT

    [root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT

    允许连接态产生的衍生态

    iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    实现共享主机上网

    iptables防火墙总结_iptables总结_02

  • 实现PC-D可以经过linux网关B上网,上因特网浏览网页等
  • iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.8

    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
  • 实现外部用户A通过访问Linux网关B:10.0.0.8 即可以访问到内部 Server 172.16.1.51:80提供的web服务
  • iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.61:80
  • 假如1,2都配好了,但是问题处在内网普通PC-D和内部server-C,没有配置正确的网关,如何通过tcpdump来排查
  • windows:ping 10.0.0.8
    内网机器:tcpdump|grep -i icmp(两台机器上分别监测)


    网友评论