zoukankan      html  css  js  c++  java
  • linux下iptables讲解

    iptables(netfilter网络过滤器)

    iptables是linux上特有的防火墙机制,功能非常强大。CentOS默认是没有iptables规则。

    iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。

    常用选项:

    iptables -nvL 查看规则(-n为数字显示输出的ip地址和端口 -v 为可视化显示 -L为列出所有的规则)

    iptables -F   清除规则(flush清除);清除只是临时的,重启系统或者重启iptables服务后还会加载已经保存的规则。清除之后要保存规则。

    /etc/init.d/iptables save  或 service iptables save  保存规则

    防火墙规则保存在配置文件    /etc/sysconfig/iptables

    iptables -Z    计数器清零(zero)

    service iptables stop    暂停防火墙服务,并清除防火墙规则,但是重启后会读取/etc/sysconfig/iptables 从而启动防火墙。即使我们停止防火墙,但是一旦添加任何一条规则,它也会开启。

    iptables -t    指定表名(table),默认不加-t 则是filter表;

    spacer.gifspacer.gif直观图便于理解,4个表,5个链;

    wKiom1U0akLjRYhGAAIyHGE7Rec605.jpg

    wKioL1U0a56g8537AAIbDWY8DEU108.jpg

    filter 这个表主要用于过滤包的,是系统预设的表,内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。  

    nat 主要用处是网络地址转换、端口映射,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。 

    mangle 主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time ToLive,生存周期)值以及为数据包设置Mark标记,以实现Qos (Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

    raw   对报文设置一个标志,决定数据包是否被状态跟踪机制处理   只有两个链:OUTPUT、PREROUTING 

    iptables规则相关:
    查看规则    iptables -t nat -nvL
    清除规则    iptables -t nat -F
    增加/删除规则    iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP 
    插入规则    iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT 
    iptables -nvL --line-numbers    查看规则带有id号
    iptables -D INPUT 1     根据规则的id号删除对应规则
    iptables -P INPUT DROP    用来设定默认规则,默认是ACCEPT ,一旦设定为DROP后,只能使用 iptables -P ACCEPT 才能恢复成原始状态,而不能使用-F参数;

    把ip为192.168.20.0网段所有数据包都丢掉

    1
    [root@yong ~]# iptables -I INPUT -s 192.168.20.0 -j DROP

    删除规则的话,要与添加规则的后缀一样才可以;

    1
    [root@yong ~]# iptables -D INPUT -s 192.168.20.0 -j DROP

    把1.1.1.1 访问本地tcp协议80端口的所有数据包都丢掉;

    1
    [root@yong ~]# iptables -I INPUT -s 1.1.1.1 -p tcp --dport 80 -j DROP

    把发送到10.0.1.14的22端口的所有数据包丢掉;

    1
    [root@yong ~]# iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP

    使用这个命令查看规则带有id号显示;

    1
    2
    3
    4
    5
    [root@yong ~]# iptables -nvL --line-number
    Chain INPUT (policy ACCEPT 84 packets, 5944 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1        0     0 DROP       tcp  --  *      *       1.1.1.1              0.0.0.0/0           tcp dpt:80 
    2        0     0 DROP       all  --  *      *       192.168.20.0         0.0.0.0/0

    然后删除的时候使用iptables -D INPUT 1    删除上面的1规则,不用写很长的后缀。

    禁止别人ping你的主机,你可以ping别人;只需要添加一条规则;icmp-type 8 可以实现;

    [root@yong ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP

    示例,编一个脚本,针对filter表,所有的INPUT链DROP,其他两个链ACCEPT,然后针对192.168.20.0/24网段开通22端口可以连接主机;对所有网段开放80端口;对所有网段开通21端口;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@yong ~]# vim iptables.sh 
    #! /bin/bash    
    ipt="/sbin/iptables"
    $ipt -F
    $ipt -P INPUT DROP
    $ipt -P OUTPUT ACCEPT
    $ipt -P FORWARD ACCEPT
    $ipt -A INPUT -s 192.168.20.0/24 -p tcp --dport 22 -j ACCEPT
    $ipt -A INPUT -p tcp --dport 80 -j ACCEPT
    $ipt -A INPUT -p tcp --dport 21 -j ACCEPT
    1
    [root@yong ~]# sh iptables.sh

    运行脚本即可,如果想开机运行防火墙规则的话,在/etc/rc.d/rc.local 添加一行“/bin/sh /root/iptables.sh”

    spacer.gif

    nat表应用:
    路由器就是使用iptables的nat原理实现.


    假设您的机器上有两块网卡eth0和eth1,其中eth0的IP为192.168.4.11,eth1的IP为192.168.20.1 。eth0连接了internet 但eth1没有连接,现在有另一台机器(192.168.20.10)和eth1是互通的,那么如何设置也能够让连接eth1的这台机器能够连接internet? 

    1
    2
    3
    4
    [root@yong ~]# cat /proc/sys/net/ipv4/ip_forward
    0
    [root@yong ~]# echo "1" > /proc/sys/net/ipv4/ip_forward 
    [root@yong ~]# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth0 -j MASQUERADE

     /proc/sys/net/ipv4/ip_forward 为内核参数相关的文件,默认为0,1为打开路由转发功能。

    第2条命令为iptables对nat表做了一个IP转发的操作,-o 后面跟设备名,表示出口的网卡。MASQUERADE表示伪装的意思;让192.168.20.0网段通过eth0伪装出去连接上网。

    iptables规则备份与恢复:
    service iptables save    这样会保存到/etc/sysconfig/iptables ,如果以后遇到备份防火墙规则的任务,就是拷贝一份这个文件的副本。
    iptables-save > myipt.rule    可以把防火墙规则保存到指定文件中;
    iptables-restore < myipt.rule    这样可以恢复指定的规则;

    1
    2
    3
    4
    5
    6
    [root@yong ~]# iptables-save > myipt.rule
    [root@yong ~]# service iptables stop
    iptables: Setting chains to policy ACCEPT: nat filter      [  OK  ]
    iptables: Flushing firewall rules:                         [  OK  ]
    iptables: Unloading modules:                               [  OK  ]
    [root@yong ~]# iptables-restore < myipt.rule
  • 相关阅读:
    nginx解决Ajax跨域问题
    传入token值到下个操作
    获取token值并写入Excel文件中
    读取配置文件.ini
    js判断页面元素是否存在
    SQL Server数据库管理常用的SQL和TSQL语句
    常用聊天工具(IM)在线客服链接代码
    [转]最大概率选择到“最好女孩”的算法
    Web开发:设置复选框的只读效果
    Web开发常用边框颜色汇总
  • 原文地址:https://www.cnblogs.com/yuzhaokai0523/p/4453098.html
Copyright © 2011-2022 走看看