• iptables应用大全


    在这里插入图片描述
    在这里插入图片描述

    iptables四表五链:
    1、“四表”是指 iptables 的功能
    ——filter 表(过滤规则表):控制数据包是否允许进出及转发
    ——nat 表(地址转换规则表):控制数据包中地址转换
    ——mangle(修改数据标记位规则表):修改数据包中的原数据
    ——raw(跟踪数据表规则表):控制 nat 表中连接追踪机制的启用状况

    2、“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含 多个数据链,防火墙规则需要写入到这些具体的数据链中。
    ——INPUT(入站数据过滤) :处理来自外部的数据
    ——OUTPUT(出站数据过滤):处理向外发送的数据。
    ——FORWARD(转发数据过滤):将数据转发到本机的其他网卡设备上
    ——PREROUTING(路由前过滤) :– 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
    ——POSTROUTING(路由后过滤): – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。

    filter表有三个链:forward 、input、output
    nat表有三个链:prerouting、postrouting、output
    mangle表有五个链:prerouting、forward、input、output、postrouting

    iptables规划:
    iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

    -i eht0 从哪个口进
    -o eth0 从哪个网卡出

    处理动作大全:accept、reject、drop、redirect、log、masquerade、dnat、snat、mirror、queue、return、mark

    filter表使用的主要动作:accept、reject、drop、log

    drop和reject区别是:如果是drop直接超时,不回发任何信息
    如果是reject就会返回信息回来提示(目标端口不可达)Destination port unreachable

    首先先来翻译一下dport和sport的意思:
    dport:目的端口
    sport:来源端口
    初学iptables比较容易迷糊,但是我尽量用通俗的语言给你讲解。
    dport 和sport字面意思来说很好理解,一个是数据要到达的目的端口,一个是数据来源的端口。
    但是在使用的时候要分具体情况来对待,这个具体情况就是你的数据包的流动行为方式。(INPUT还是OUTPUT)
    比如你的例子:/sbin/iptables -A INPUT -p tcp –dport 80 -j ACCEPT
    注意里面的INPUT参数,这个代表你的这条数据包的进行的 “进入” 操作!
    那么你的这条数据包可以这么描述:
    1.这是一条从外部进入内部本地服务器的数据。
    2.数据包的目的(dport)地址是80,就是要访问我本地的80端口。
    3.允许以上的数据行为通过。
    总和:允许外部数据访问我的本地服务器80端口。

    再看第2条列子:/sbin/iptables -A INPUT -p tcp –sport 80 -j ACCEPT
    1.这是一条从外部进入内部本地服务器的数据。
    2.数据包的来源端口是(sport)80,就是对方的数据包是80端口发送过来的。
    3.允许以上数据行为。
    总结:允许外部的来自80端口的数据访问我的本地服务器。
    input方式总结: dport指本地,sport指外部。

    如果你的数据包是(OUTPUT)行为,那么就是另外一种理解方式:
    比如:
    /sbin/iptables -A OUTPUT -p tcp –dport 80 -j ACCEPT
    1.这是一条从内部出去的数据。
    2.出去的目的(dport)端口是80。
    3.允许以上数据行为。
    output行为总结:dport指外部,sport指本地。

    iptables -nvL
    查看规划所有

    iptables -nvL --line-number
    查看规则带编号

    iptables -R INPUT 3 -j ACCEPT
    修改第三条规则

    iptables -F 规则清空
    iptables -X
    iptables -Z 清空记数器

    iptables -R 替换规则

    /etc/sysconfig/iptables-config
    配置文件
    例如增加ftp主和备动访问等模块:
    IPTABLES_MODULES=“ip_conntrack_ftp ip_nat_ftp”

    /etc/rc.d/init.d/iptables save
    centos6保存重启不丢失

    /etc/sysconfig/iptables
    保存在这个文件里

    [root@localhost ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables: [ 确定 ]
    centos7保存重启不丢失

    iptables -A INPUT -j REJECT
    默认放在最后拒绝所有

    iptables -I INPUT -p tcp --dport 22 ACCEPT
    放行22端口

    iptables -I INPUT -s 192.168.1.5 -j DROP
    在前面新增拒绝这个ip的所有通信,不写哪行就默认第1行

    iptables -I INPUT 3 -s 192.168.1.3 -j DROP
    插入一条规则到第3行

    iptables -D INPUT -s 192.168.1.5 -j DROP
    删除这条规则

    iptables -L -n --line-number
    看序号,直接删除序号对应的也可以
    iptables -t filter -D INPUT 1

    直接拒绝icmp 的请求包
    sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
    这时候尝试ping这台主机的话会出现
    Reply from 192.168.50.131: Destination port unreachable.

    iptables -t filter -P INPUT ACCEPT
    input链默认全部允许

    如果centos7 做为防火墙或路由网关,那就要两块网卡,内网卡不能设置网关,
    只在里面填IP地址和子网掩码,如果再加一块网卡的话,如果从第一个配置文件
    ifcfg-eth0复制的话,要注销掉uuid和mac地址,其它名称也要改成对应的。

    开启centos7路由转发功能:
    vim /etc/sysctl.conf
    net.ipv4.ip_forward=1

    马上生效:
    sysctl -p

    查看路由:
    route -n

    添加静态路由(放入脚本开机启动):
    route add -net 192.168.100.0/24 gw 192.168.90.20

    另一种方法加静态路由:
    改配置文件(如果没有就增加这个文件,route-eth?要和出口网关对应上):
    vi /etc/sysconfig/network-scripts/route-eth1
    ADDRESS0=192.168.100.0
    NETMASK0=255.255.255.0
    GATEWAY0=192.168.90.20
    如果有多个下一跳就把上面的0依次改为1…n
    重启网卡服务

    只允许22连接centos7路由器,把input链改为默认禁止所有连接,只开22:
    iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
    iptables -t filter -P INPUT DROP

    iptables在中间以路由模式对其它网段进行过滤全部用FORWARD链
    禁止两个网段互ping
    iptables -t filter -I FORWARD -p icmp -s 192.168.80.0/24 -d 192.168.100.0/24 -j DROP

    禁止80段访问100的远程桌面,但是他可以反向连接
    iptables -t filter -I FORWARD -p tcp -s 192.168.80.0/24 -d 192.168.100.0/24 --dport 3389 -j DROP

    禁止80段访问100段的123主机的远程桌面,但是他可以反向连接
    iptables -t filter -I FORWARD -p tcp -s 192.168.80.0/24 -d 192.168.100.123/32 --dport 3389 -j DROP

    基于状态包过滤规则:
    –state(NEW,ESTABLISHED,INVALID,RELATED)
    new 表示该包属于一个新连接
    related表示属于已建立的连接,类似于防火墙上的server-map表(ftp连接要用这个)
    iptables -t filter -A INPUT -m state --state RELATED -j ACCEPT

    禁止单个方向不能拼通
    iptables -I FORWARD -p icmp -m icmp --icmp-type echo-request -s 192.168.80.123/32 -d 192.168.100.123/32 -j DROP

    禁止多个端口连接
    iptables -A FORWARD -p tcp -m multiport --dports 1:1024,3389 -s 192.168.80.123/32 -d 192.168.100.123/32 -j DROP

    iptables -A FORWARD -p tcp -m iprange --src-range 192.168.80.1-192.168.80.10 -j DROP
    限制IP范围段访问

    iptables -A FORWARD -p tcp -m limit --limit 3000/second -s 192.168.80.123/32 -d 192.168.100.123/32 -j DROP
    两个IP地址之间限速(一秒不能超过3000个)

    对每个用户限速(每秒只允许最多300个数据包通过限制):
    写个脚本生成:
    vi /etc/sysconfig/limit.sh
    for (i=2;i<254;i++)
    do
    iptables -I FORWARD -s 192.168.10. i − j D R O P i p t a b l e s − I F O R W A R D − s 192.168.10. i -j DROP iptables -I FORWARD -s 192.168.10. ijDROPiptablesIFORWARDs192.168.10.i -m limit --limit 300/sec --limit-burst 400 -j ACCEPT
    done

    瞬间流量控制(5为数量包的数量):
    -m limit --limit-burst 5

    限制最大连接数(最多2个连接上去远程桌面):
    iptables -A FORWARD -p tcp --dprot 3389 -m connlimit --connlimit-above 2 -s 192.168.80.0/24 -d 192.168.100.0/24 -j DROP

    限制MAC地址访问:
    iptables -A INPUt -m mac --mac-source C0-9F-8D-5F-6D

    限制这个主机的MAC地址访问80网段:
    iptables -A FORWARD -d 192.168.80.0/24 -m mac --mac-source C0-9F-8D-5F-6D

    LOG动作日志设置在/etc/syslog.conf中,日志记录在:/var/log/message里面
    添加iptabls-icmp标记,方便在message里查找
    iptables -t filter -I FORWARD -p icmp -d 192.168.100.0/24 -j LOG --log-prefix “iptables-icmp”
    iptables -t filter -A FORWARD -p icmp -d 192.168.100.0/24 -j REJECT
    先记录日志,再阻止连接

    centos7做为web服务器,用iptables保护,只允许123地址远程过来:
    iptables -t filter -P INPUT DROP
    iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
    iptables -t filter -I INPUT -p tcp --dport 22 -s 192.168.10.123/32 -j ACCEPT

    recent模块实现服务器安全:
    –seconds 指定时间
    –set 将地址添加到列表,并更新信息,包含地址加入时间戳。
    –rcheck 检查地址是否在列表,以第一个匹配开始计时。
    –name 设定列表名,默认DEFAULT
    –rsource 源地址,此为默认
    –rdest目的地址
    –remove列表中删除相应地址
    –update和rcheck类似,以最后一个匹配开始计算时间
    –hitcount命中次数

    SSH连接一个客户端60秒只能连接2回,防穷举攻击,表名定义为SSHPOOL表
    iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 60 --hitcount 2 -j DROP //负责读表中的记录是否过了2个
    iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT //负责记录连接客户端数量
    iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT //当已建立了,就允许进入。

    保护网站防ddos攻击,每秒建立连接数限制:
    iptables -t filter -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix “DDOS” --log-ip-options //先进行日志记录
    iptables -t filter -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP //连接数量限制
    iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT //已建立的连接不阻止。

    设置打开端口钥匙(指定ping这个开启22服务的服务器,来打开允许ssh连接,完了再ping一个包就自动关闭连接):
    iptables -t filter -A INPUT -p icmp --icmp-type echo-request -m length --length 1078 -j LOG --log-prefix “SSHOPEN” //先记录连接日志
    iptables -t filter -A INPUT -p icmp --icmp-type echo-request -m length --length 1078 -m recent --set --name sshopen --rsource -j ACCEPT
    //指定ping过来包为1078大小,包含IP头20和icmp头8,所以应该ping -l 1050
    iptables -t filter -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 60 --name sshopen --rsource -j ACCEPT //看sshopen表中60秒内的记录如果有源地址就允许访问tcp22端口
    iptables -t filter -AINPUT -p icmp --icmp-type echo-request -m length --length 1178 -m recent --name sshopen --remove -j ACCEP //ping个1178包大小就删除22端口连接了
    iptables -A INPUT -m state --state ESTABLISHED -j ACCEP //已建立的就允许连接

    保护网段安全,先改forward默认drop
    从ens34网卡进来的,只可以访问此目标网段内的所有主机3389,其它禁止
    iptables -t filter -I FORWARD -p tcp --dport 3389 -d 192.168.80.0/24 -i ens34 -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED -j ACCEP //已建立的就允许连接,不然回不了包,建立不起来

    NAT地址转换上网(外网ip是192.168.90.10):
    iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens34 -j SNAT --to-source 192.168.90.10
    如果有多个外线IP就:
    iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens34 -j SNAT --to-source 192.168.90.10-192.168.90.12

    端口映射(端口映射前必须先做好上面的nat地址转换):
    iptables -t nat -A PREROUTING -i ens34 -d 192.168.90.10/32 -p tcp --dport 4000 -j DNAT --to 192.168.80.123:3389

    修改通过iptables路由的TTL值,来迷惑攻击者
    iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 2 //经过就增加2个TTL值
    iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 3 //经过就删除3个TTL值
    iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 30 //改TTL回显为30开始递减

  • 相关阅读:
    Python 二进制数据处理与转换
    计算机网络——IPv4地址的划分
    Python实现ACO蚁群优化算法优化支持向量机分类模型(SVC算法)项目实战
    [问题已处理]-在win10上安装prometheus监控
    软件测试项目实战案例分解,跟着我一步一步操作【人力资源管理系统】
    docker.6-Dockerfile精讲及新型容器镜像构建技术
    ubuntu系统简单尝试
    小学期-中期总结报告
    算法竞赛进阶指南:士兵(Python)
    Git学习笔记 - 搭建GitLab服务器与Idea集成GitLab
  • 原文地址:https://blog.csdn.net/ydaxia110/article/details/128041441