iptables 防火墙

iptables 防火墙





Iptables 防火墙



iptables 防火墙 安装

    # systemctl disable firewalld.service     \\ 关闭 firewalld开机启动
    # systemctl stop firewalld.service         \\ 停止 firewalld 服务  停止后iptables会被清空

    # yum install iptables iptables-services     \\ 安装 一般默认就有
    # service iptables save                       \\ 保存规则 即使是空规则 会生成配置文件 /etc/sysconfig/iptables
    # systemctl restart iptables
    # systemctl enable iptables                     \\ 加入开机启动
    # systemctl list-unit-files | grep iptables      \\ 查看所有服务的状态
    # iptables -L -n

    # iptables-save > /iptables.1                      \\ 备份 保存到文件
    # iptables-restore < /iptables.1                    \\ 导入 重新装载回来

    # vim /etc/sysconfig/iptables          \\ iptables 配置文件 可以直接使用

        # Generated by iptables-save v1.4.7 on Tue Nov 19 09:59:12 2019
        *nat
        :PREROUTING ACCEPT [96:4544]
        :POSTROUTING ACCEPT [6:312]
        :OUTPUT ACCEPT [6:312]
        COMMIT
        # Completed on Tue Nov 19 09:59:12 2019
        # Generated by iptables-save v1.4.7 on Tue Nov 19 09:59:12 2019
        *filter
        :INPUT ACCEPT [0:0]
        :FORWARD ACCEPT [0:0]
        :OUTPUT ACCEPT [559823219:59422546554]
        -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
        -A INPUT -p icmp -j ACCEPT 
        -A INPUT -i lo -j ACCEPT 
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 65522 -j ACCEPT 
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 81 -j ACCEPT 
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 80:81 -j ACCEPT
        -A INPUT -s 47.91.219.64/32 -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT 
        -A INPUT -j REJECT --reject-with icmp-host-prohibited 
        -A FORWARD -j REJECT --reject-with icmp-host-prohibited 
        COMMIT
        # Completed on Tue Nov 19 09:59:12 2019


常用 iptables 防火墙命令

    # iptables -I INPUT 5 -p tcp -m state --state NEW --dport 443 -j ACCEPT
    # iptables -I INPUT 5 -p tcp -m state --state NEW --dport 80,81,82 -j ACCEPT
    # iptables -I INPUT 5 -p tcp -m state --state NEW -m multiport --dports 80,81,82 -j ACCEPT
    # iptables -I INPUT 5 -p tcp -m state --state NEW -m multiport --dports 80:82 -j ACCEPT    \\ 与下面一样 放行多个端口
    # iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 80:82 -j ACCEPT
    # iptables -I INPUT 5 -p tcp -s 47.91.219.64 -m state --state NEW --dport 80 -j ACCEPT
    # iptables -I INPUT 5 -p tcp -s 47.91.219.0/24 -m state --state NEW --dport 80 -j REJECT
    # iptables -I INPUT 5 -p tcp -s 47.91.219.64 -m state --state NEW --dport 80 -j DROP

    # iptables -I IN_public_allow 5 -s 47.91.219.64 -p tcp --dport 80 -m conntrack --ctstate NEW,UNTRACKED -j DROP \\宝塔

    # service iptables save               \\ 保存规则
    # vim /etc/sysconfig/iptables          \\ 配置文件 直接修改即可


........................................................................................................................


iptables 端口转发                    \\ 把本机所有的 7410 端口转发到 172.21.34.33 的22端口

    ❶. 单个端口转发  不同端口转发
        # iptables -L -n
        # iptables -I FORWARD -p tcp -m state --state NEW -m tcp --dport 7410 -j ACCEPT
        # iptables -I FORWARD -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
        # iptables -L -n -t nat
        # iptables -I PREROUTING -d 172.21.34.204/32 -p tcp -m tcp --dport 7410 -j DNAT --to-destination 172.21.34.33:22
        # iptables -I POSTROUTING -d 172.21.34.33/32 -p tcp -m tcp --dport 22 -j SNAT --to-source 172.21.34.204


    ❷. 端口段 转发  相同端口转发
        # iptables -L -n
        # iptables -I FORWARD -p tcp -m state --state NEW -m tcp --dport 900:1000 -j ACCEPT
        # iptables -L -n -t nat
        # iptables -I PREROUTING -p tcp -m tcp --dport 900:1000 -j DNAT --to-destination 172.21.34.204
        # iptables -I POSTROUTING -d 172.21.34.204/32 -p tcp -m tcp --dport 900:1000 -j SNAT --to-source 192.168.10.13


    ❸. 单个端口转发 详解

        # vim /etc/sysctl.conf            \\ 开启内核转发
            net.ipv4.ip_forward = 1
        # sysctl -p

        # iptables -L -n                    \\ FORWARD 转发链 只放行需要 转发的端口及ip   不用在INPUT链放行7410端口
            Chain FORWARD (policy ACCEPT)

        # iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT            \\ 允许所有 已连接的状态
        # iptables -A FORWARD -p tcp -m state --state NEW -m tcp --dport 7410 -j ACCEPT  \\ 所有ip到 7410 放行
        # iptables -A FORWARD -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT     \\ 所有ip到 22 放行
        # iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited                 \\ 拒绝所有 在最后添加
        # iptables -L -n 

        # iptables -L -n -t nat                  \\ 查看 转发表 规则   未添加的时候为空
        # iptables -A PREROUTING -d 172.21.34.204/32 -p tcp -m tcp --dport 7410 -j DNAT --to-destination 172.21.34.33:22
        # iptables -A POSTROUTING -d 172.21.34.33/32 -p tcp -m tcp --dport 22 -j SNAT --to-source 172.21.34.204

        # iptables -L -n -t nat                     \\ 查看 转发表 规则
            Chain PREROUTING (policy ACCEPT)
            target     prot opt source               destination         
            DNAT       tcp  --  0.0.0.0/0            172.21.34.204        tcp dpt:7410 to:172.21.34.33:22

            Chain POSTROUTING (policy ACCEPT)
            target     prot opt source               destination         
            SNAT       tcp  --  0.0.0.0/0            172.21.34.33         tcp dpt:22 to:172.21.34.204

        注: 
            prerouting 路由前  把所有目标ip为本机端口为7410的 做DNAT 进来的时候改变目标地址为 172.21.34.33:22
            postrouting 路由后 回源的目标ip为34.33端口为22的 做SNAT 源地址转换 就是做 nat 为 172.21.34.204


        # vim /etc/sysconfig/iptables          \\ iptables 关于 端口转发的配置文件 可以直接使用 
            *nat
            :PREROUTING ACCEPT [6987:545148]
            :INPUT ACCEPT [2:58]
            :OUTPUT ACCEPT [2:152]
            :POSTROUTING ACCEPT [2:152]
            -A PREROUTING -d 172.21.34.204/32 -p tcp -m tcp --dport 7410 -j DNAT --to-destination 172.21.34.33:22
            -A POSTROUTING -d 172.21.34.33/32 -p tcp -m tcp --dport 22 -j SNAT --to-source 172.21.34.204
            COMMIT
            *filter
            :INPUT ACCEPT [0:0]
            :FORWARD ACCEPT [0:0]
            :OUTPUT ACCEPT [559823219:59422546554]
            -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
            -A INPUT -p icmp -j ACCEPT 
            -A INPUT -i lo -j ACCEPT 
            -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
            -A INPUT -j REJECT --reject-with icmp-host-prohibited
            -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
            -A FORWARD -s 172.21.34.0/24 -p tcp -m state --state NEW -m tcp -j ACCEP
            -A FORWARD -j REJECT --reject-with icmp-host-prohibited
            COMMIT
            # Completed on Tue Nov 19 09:59:12 2019

.......................................................................................................................


iptables 内网转发         \\ iptables 作为路由 转发内网的流量 使得内网机器可以上网

    内网机器设置
        # route -n
        # vi /etc/sysconfig/static-routes            \\ 路由的配置文件 可永久添加路由 没有需要创建
            any net 0.0.0.0/0 gw 192.168.116.129
        # systemctl restart network
        # route -n
        # vim /etc/sysconfig/network-scripts/ifcfg-ens33   \\ 永久修改 DNS
            DNS1=8.8.8.8


        # route add default gw 192.168.116.129        \\ 临时添加 加个默认 ip  指向 转发服务器
        # route -n
        # vim /etc/resolv.conf                          \\ 临时修改 dns  重启网络 或重启服务器会变
            nameserver 8.8.8.8


    转发 机器 配置                \\ 有两块网卡 ens33 连接的是外网        ens37连接内网
        # iptables -I FORWARD 2 -i ens37 -o ens33 -m state --state NEW -j ACCEPT       \\ 放行 内网网卡 到 外网网卡
        # iptables -t nat -I POSTROUTING -o ens33 -j MASQUERADE                         \\ 只要通过外网的网卡 都做 伪装


        # vim /etc/sysconfig/iptables                 \\ 完整的防火墙配置文件  可直接使用
            # Generated by iptables-save v1.4.21 on Wed Jun 23 05:00:41 2021
            *nat
            :PREROUTING ACCEPT [4:336]
            :INPUT ACCEPT [0:0]
            :OUTPUT ACCEPT [0:0]
            :POSTROUTING ACCEPT [0:0]
            -A POSTROUTING -o ens33 -j MASQUERADE
            COMMIT
            # Completed on Wed Jun 23 05:00:41 2021
            # Generated by iptables-save v1.4.21 on Wed Jun 23 05:00:41 2021
            *filter
            :INPUT ACCEPT [0:0]
            :FORWARD ACCEPT [0:0]
            :OUTPUT ACCEPT [194:32248]
            -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
            -A INPUT -p icmp -j ACCEPT
            -A INPUT -i lo -j ACCEPT
            -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
            -A INPUT -j REJECT --reject-with icmp-host-prohibited
            -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
            -A FORWARD -i ens37 -o ens33 -m state --state NEW -j ACCEPT
            -A FORWARD -j REJECT --reject-with icmp-host-prohibited
            COMMIT
            # Completed on Wed Jun 23 05:00:41 2021
        # systemctl restart iptables                   \\ 配置文件中只放行了 22 端口 需求其他端口自行添加


.......................................................................................................................


iptables 防火墙 基础

    选择表
        -t filter  可以是 filter  nat  mangle  raw 省略为filter

    链管理
        -F: 清空
        -X: 删除空自定义链
        -P: 默认规则 ACCEPT DROP REJECT
            -N: new    新建自定义链
            -Z: zero   清零计数器
            -E: rename 重命名计数为0的自定义链

    查看
        -L: 显示规则
            -n: 不反解
            -v: 详细信息 -vv -vvv
            --line-numbers: 显示规则编号
            -x: exactly 显示计数器结果的精确值 

    规则管理
        -A: 添加规则到尾部
        -I: 添加到某一条规则之上
        -D: 删除某一条规则
            -R: 替换指定链上的指定规则

    匹配条件
        -s: 源IP地址
        -d: 目标IP地址
        -i: 报文的流入接口
        -o: 报文的流出接口
        -p: 协议 tcp udp icmp
            -p tcp --dport  源端口
            -p tcp --sport  目标端口
            -p icmp --icmp-type 8 用于别人ping他  请求回送
            -p icmp --icmp-type 0 用于他ping别人  回显应答 回送应答

    显示扩展匹配
        1 multiport 扩展 以离散方式定义多端口匹配 最多指定15个端口
            -m multiport --sports 22,80 指明多个源端口
            -m multiport --dports 22:30 指明多个目标端口
            -m multiport --ports 22,80  既可以指明源 也可以指明目标 很少用
        2 iprange 扩展     指明连续的(但一般是不能扩展为整个网络)ip地址范围时使用
            -m iprange --src-range 192.168.10.1-192.168.10.120  指明连续的源地址范围
            -m iprange --dst-range 192.168.10.1-192.168.10.120  指明连续的目标地址范围
        3 string 扩展  检查报文中出现的字符串 kmp 可以 已测试      bm不行 待测试
            --dport--dportm string --algo kmp --string 'movie'  \\ 字符串匹配 kmp 为算法 
        4 time 扩展 匹配时间  date查看时间注意是 CST时间是东八区  设置的时间为UTC时间是0时区
            -m time --timestart 14:00 -m time --timestop 16:00
            -m time --datestart
            -m time --datestop
            -m time --monthdays   1-31
            -m time --weekdays    1-7 
        5 connlimit 扩展 并发连接数限制  根据每客户端IP(也可以说地址块) 做并发连接数量匹配
            -m connlimit --connlimit-above 3  \\ 大于 超过的连接数目 一般做拒绝 相对默认放行一般做拒绝
            -m connlimit --connlimit-upto 3    \\ 小于等于此上限 一般做放行 相对默认拒绝一般做放行
        6 limit 扩展 基于收发报文的速率做检查
            -m limit --limit 10/minute         \\ 设定速率是10个每分钟 还有  /hour  /day  /second
            -m limit --limit-burst 3            \\ 设定一开始的峰值是3 不做限制
        7 state 扩展 根据连接追踪机制检查连接的状态  ***
            /proc/sys/net/nf_conntrack_max      调整连接追踪功能所能够容纳的最大连接数量
            /proc/net/nf_conntrack              已经追踪到并记录下的连接
            /proc/sys/net/netfilter/            目录下有不同协议或连接类型追踪的时长
            可追踪的连接状态
                -m state --state NEW: 新发出的请求  连接追踪模板中不存此连接相关的信息条目 因此 将其识别为第一次发出的请求
                -m state --state ESTABLISHED: new状态后  连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态
                -m state --state RELATED: 相关的连接 如ftp协议的命令连接与数据连接之间的关系
                -m state --state INVALIED: 无法识别的连接
            # iptables -I INPUT -d 192.168.10.14 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
            # iptables -I OUTPUT -s 192.168.10.14 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
            可以优化规则  简化
                # iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT   \\ 是这种状态的都放行 后面可以加new 的规则做放行
                # iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT   \\ 是这种状态的都放   

    目标:
        -j: 跳转至指定 处理目标
            accept:     接受
            drop:       丢弃 
            reject:     拒绝
            return:     返回调用链
            redirect:   端口重定向
            log:        记录日志
            mark:       做防火墙标记
            dnat:       目标地址转换
            snat:       源地址转换
            masquerade: 地址伪装
            ...
            自定义链:    由自定义链上的规则进行匹配检查

    基本命令
        # systemctl restart firewalld.service  \\ 重启服务
        # iptables -L -n -v --line-numbers      \\ 显示
        # iptables -F                            \\ 清空链
        # iptables -X                             \\ 删除自定义规则
        # iptables -D INPUT 9                      \\ 删除 第9条规则

示例:
放行所有访问本机的 tcp协议
    # iptables -A INPUT -d 192.168.10.11 -p tcp -j ACCEPT
    # iptables -A OUTPUT -s 192.168.10.11 -p tcp -j ACCEPT
修改链的 默认值
    # iptables -P INPUT DROP     \\ 把 filter 表中3个链 默认状态都改为drop
打开 ping 协议
    # iptables -A INPUT -d 192.168.10.11 -p icmp -j ACCEPT  \\ 如果上面默认为丢弃 则不能ping通 可开通下两条 使之能ping通
    # iptables -A OUTPUT -s 192.168.10.11 -p icmp -j ACCEPT
禁 ping
    # iptables -A OUTPUT -s 192.168.10.11 -p icmp --icmp-type 8 -j ACCEPT  
        \\ 只允许类型为8请求会送 的出去 其他不能出去  只能ping别人 其他人ping不了自己
    # iptables -A INPUT -d 192.168.10.11 -p icmp --icmp-type 0 -j ACCEPT\\ 只允许类型为0 请求应答 的进来 其他不允许 禁ping
限制报文流入流出 网卡
    # IPTABLES -A INPUT -d 192.168.10.11 -i ens33 -j ACCEPT \\ 来着于ens33 网卡 访问本机的所有流量 都放行 -i 数据报文流入接口
    # iptables -A OUTPUT -s 192.168.10.11 -o ens33 -j ACCEPT \\ -o 数据报文流出接口
放行22端口 ssh服务
    # iptables -I INPUT -d 192.168.10.11 -p tcp --dport 22 -j ACCEPT   \\ -I插入最前面 --dport 目标 --sport 源端口
    # iptables -I OUTPUT 2 -s 192.168.10.11 -p tcp --sport 22 -j ACCEPT \\ 放行了22端口  -I OUTPUT 2 插入到第2条
同时放行22 23 和 80端口 
    # iptables -I INPUT -s 192.168.10.0/32 -d 192.168.10.14 -p tcp -m multiport --dports 22:23,80 -j ACCEPT \\ 同时打开多端口
    # iptables -I OUTPUT -s 192.168.10.14 -d 192.168.10.0/32 -p tcp -m multiport --sports 22:23,80 -j ACCEPT 
只放行某一IP段
    # iptables -I INPUT -d 192.168.10.14 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 192.168.10.1-192.168.10.120 -j ACCEPT   
    # iptables -I OUTPUT -s 192.168.10.14 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 192.168.10.1-192.168.10.120 -j ACCEPT
根据字符串匹配
    # iptables -I OUTPUT -m string --algo kmp --string 'movie' -j REJECT  \\ 无论是谁访问的 基于哪种协议 只要有movie都做拒绝
根据时间匹配
    # iptables -I INPUT -d 192.168.10.14 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT \\ 时间段拒绝
限制22端口并发连接数 单IP             
    # iptables -I INPUT -d 192.168.10.14 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT   
限制ping速率是10个每分钟
    # iptables -A INPUT -d 192.168.10.14 -p icmp --icmp-type 8 -m limit --limit-burst 2 --limit 10/minute -j ACCEPT
禁止访问百度
    # iptables -I OUTPUT -m string --string "baidu.com" --algo kmp -j DROP

# vim /etc/sysconfig/iptables                       \\ 防火墙默认配置文件
    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT


手动添加以上命令: 
    # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    # iptables -A INPUT -p icmp -j ACCEPT
    # iptables -A INPUT -i lo -j ACCEPT
    # iptables -A INPUT  -m state --state NEW -p tcp --dport 65522 -j ACCEPT
    # iptables -A INPUT  -s 47.90.1.83 -m state --state NEW -p tcp --dport 10050 -j ACCEPT
    # iptables -A INPUT  -m state --state NEW -p tcp --dport 80 -j ACCEPT
    # iptables -A INPUT  -m state --state NEW -p tcp --dport 443 -j ACCEPT
    # iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited        \\ 拒绝所有端口
    # iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited


保存及重载规则
    iptables-save > /iptables.1     \\ 保存到文件
    iptables-restore < /iptables.1   \\ 重新装载回来

    CentOS 7:
        引入了新的iptables前端管理服务工具 firewalld 是以iptables为基准生成规则的
        对于本机的简单防火墙实现 建议使用iptables 首先先要禁用firewalld
            # systemctl disable firewalld.service  \\ 关闭 开机启动
            # systemctl stop firewalld.service      \\ 停止服务  停止后iptables会被清空
            # yum install iptables iptables-services
                # systemctl start iptables
                # service iptables save         \\ 保存规则 即使是空规则 会生成配置文件 /etc/sysconfig/iptables
                # systemctl restart iptables
                # systemctl status iptables       \\ 查询状态
                # systemctl enable iptables        \\ 加入开机启动
                # systemctl list-unit-files          \\ 查看所有服务的状态
                
    CentOS 6:
        service iptables save                        \\ 保存 
            iptables-save > /etc/sysconfig/iptables   \\ 相当于  保存
        service iptables restart                       \\ 重新启动
            iptables-restore < /etc/sysconfig/iptables  \\ 相当于重载
                # service  iptables start
                # service iptables save       \\ 保存规则 即使是空规则 会生成配置文件 /etc/sysconfig/iptables
                # chkconfig --list             \\ 查看是否开机启动
                # chkconfig --level 345 zabbix_agentd on \\ 添加开机启动
                /etc/sysconfig/iptales          \\ 配置文件
                /etc/sysconfig/iptables-config   \\ 加载模块 配置文件
                /etc/init.d/iptables              \\ 启动脚本

iptables 端口转发
    -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    echo 'net.ipv4.ip_forward = 1'  >> / etc/sysctl.conf


-----------------------------------------------------------------------------------------------------------------


iptables 命令详解  为以上命令详解版本
    -t:  filter  nat  mangle  raw    省略时 filter
    链管理
        -F: flush清空规则链  省略链 表示清空指定表上的所有的链
        -N: new 创建新的自定义规则链 
        -X: drop 删除用户自定义的空的规则链 可先用-F清空在删除
        -Z: zero 清零 置零规则计数器
        -P: policy 为指定链设置默认策略 对filter表中的链而言 默认策略通常有 accept允许放行报文 drop丢弃报文 reject拒绝报文
        -E: rename 重命名自定义链 引用计数不为0的自定义链 无法改名 也无法删除
    规则管理
        -A: append 将新规则追加于指定链的尾部
        -I: insert 将新规则插入至指定链的指定位置  不指明插入第几条时 插入到第一条
        -D: delete 删除指定链上的指定规则 
            有两种指定方式:
                1 指定匹配条件 
                2 指定规则编号
        -R: replace 替换指定链上的指定规则
    查看:
        -L: lsit 列出指定链上的所有规则  默认显示为filter表
            -n: numberic 以数字格式显示地址和端口号 不反解
                -vv -vvv    v越多 显示信息越详细
            --line-numbers: 显示规则编号
            -x: exactly 显示计数器结果的精确值 
    规则示例1:
        # iptables -L            \\ 显示filter表上链的规则 虚拟中会显示出很多 自定义链 带有(0 references) 如果使用-F情况
            # iptables -X         \\ 默认清楚filter表上 自定义的规则
            # iptables -L -n       \\ 查看 
        # iptables -t nat  -L       \\ 显示 nat 表上链的规则
        # iptables -t mangle -L
        # iptables -t raw -L
        # iptables -t filter -N IN_public    \\ 在filter表上 创建 自定义规则
            # iptables -L -n                  \\ 查看
            # iptables -t filter -E IN_public OUT_public \\ 改名 自定义链
        # systemctl restart firewalld.service             \\ 重启防火墙服务 重启后 改动的规则就回来了
        # iptables -L -n        \\ 显示的时候详解 
            Chain INPUT (policy ACCEPT 0 packets, 0 bytes)  \\ 但凡不能被本地所指定的规则所匹配的 那么都匹配成默认规则
            链    哪个链  默认策略为 accept 还可以是 drop reject
            target    prot                          opt     source              destination
            处理目标   哪种协议(一般三种tcp,udp,icmp)  选项    源地址 来自哪个地址  目标地址0.0.0.0/0 表上所有地址
            ACCEPT    all                           --      0.0.0.0/0            0.0.0.0/0    ctstate RELATED,ESTABLISHED
            表示接受   所有协议                               所有地址              所有地址       连接追踪状态
            INPUT_DIRECT
            把自定义链 当 target 由这个自定义链所检查去了
        # iptables -L -n -v       \\ 加入 -v选项 会多两个计数器 匹配到的
            pkts      bytes        
            报文个数   字节数
        # iptables -P FORWARD DROP      \\ 修改默认filter表中 FORWARD链中 默认规则为DROP  可以加入-t 现在修改哪张表 的哪条链
        # iptables -L -n --line-numbers  \\ 查看链规则上的编号
        # iptables -D FORWARD 9           \\ 删除 FORWARD链上的 第9条规则
            # iptables -L -n -v -x         \\ -v 查看详细的信 -x 计数器不做单位换算
    匹配条件:
        基本匹配:
            [!] -s   --src   --source        IP|Netaddr: 检查报文中源IP地址是否符合此处指定的地址范围
            [!] -d   --dst   --destination   IP|Netaddr: 检查报文中源IP地址是否符合此处指定的地址范围
                -p   --protocol{tcp|udp|icmp}: 检查报文中的协议 即ip首部中的protocols所标识的协议
                -i   --in-interface IFACE: 数据报文的流入接口: 仅能用于prerouting input及forward链上
                -o   --out-interface IFACE: 数据报文的流出接口: 仅能用于forward output及postrouting链上
        扩展匹配: -m macth_name --spec_options
            例如: -m tcp --dport 22          \\ sport 源端口 dport 目标端口
            隐式扩展: 对 -p protocol指明的协议进行的扩展 可省了-m 选项
                -p tcp 
                    --dport   目标端口匹配 可以是单个端口或连续多个端口
                    --sport   源端口匹配
                    --tcp-flage LIST1 LIST2: 检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1 
                                             而余下的必须为0 没有LIST1中指明的 不作检查
                        SYN   ACK   FIN   RST   PSH   URG   
                    --syn: 相当于--tcp-flags SYN,ACK,FIN,RST SYN  相当于 tcp三次握手的第一次
                -p udp
                    --dport
                    --sport
                -p icmp
                    --icmp-type  可用数字表示其类型
                        0  echo-reply     回显应答 回送应答 用在他ping别人
                        8  echo-request   请求回送  用在别人ping他
            显式扩展: 必须使用 -m 选项指定使用的扩展
                # man iptables                   \\ CentOS 6 获取帮助
                # man iptables-extensions         \\ CentOS 7 获取帮助
                1 multiport 扩展   以离散方式定义多端口匹配 最多指定15个端口
                    -m multiport --sports 22,80  指明多个源端口    22和80   下面有示例
                    -m multiport --dports 22:30  指明多个目标端口  22到30
                    -m multiport --ports 22,80 既可以指明源 也可以指明目标 很少用
                2 iprange 扩展     指明连续的(但一般是不能扩展为整个网络)ip地址范围时使用
                    -m iprange --src-range 192.168.10.1-192.168.10.120    指明连续的源地址范围
                    -m iprange --dst-range 192.168.10.1-192.168.10.120    指明连续的目标地址范围
                3 string 扩展  检查报文中出现的字符串       \\ 使用kmp 可以   使用 bm不行
                    -m string --algo kmp --string 'movie'  \\ kmp bm  两种算法 都差不多 用一个就行
                4 time 扩展 匹配时间  date查看时间注意是 CST时间是东八区  设置的时间为UTC时间是0时区
                    -m time --timestart 14:00 -m time --timestop 16:00
                    -m time --datestart
                    -m time --datestop
                    -m time --monthdays   1-31
                    -m time --weekdays    1-7
                5 connlimit 扩展 并发连接数限制  根据每客户端IP(也可以说地址块) 做并发连接数量匹配
                    -m connlimit --connlimit-above 3   大于 超过的连接数目 一般做拒绝 相对默认放行一般做拒绝
                    -m connlimit --connlimit-upto 3    小于等于此上限 一般做放行 相对默认拒绝一般做放行
                6 limit 扩展 基于收发报文的速率做检查
                    -m limit --limit 10/minute         设定速率是10个每分钟 还有  /hour  /day  /second
                    -m limit --limit-burst 3      设定一开始的峰值是3 不做限制
                7 state 扩展 ***根据连接追踪机制检查连接的状态 
                    /proc/sys/net/nf_conntrack_max      调整连接追踪功能所能够容纳的最大连接数量
                    /proc/net/nf_conntrack              已经追踪到并记录下的连接
                    /proc/sys/net/netfilter/            目录下有不同协议或连接类型追踪的时长
                    可追踪的连接状态
                        -m state --state NEW: 新发出的请求 连接追踪模板中不存此连接相关的信息条目 将其识别为第一次发出的请求
                        -m state --state ESTABLISHED: new状态后  连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态
                        -m state --state RELATED: 相关的连接 如ftp协议的命令连接与数据连接之间的关系
                        -m state --state INVALIED: 无法识别的连接
                    # iptables -I INPUT -d 192.168.10.14 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
                    # iptables -I OUTPUT -s 192.168.10.14 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
                        可以优化规则  简化
                            # iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT  \\ 可以加new 的规则做放行
                            # iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT  \\ 是这种状态的都放行
                    开启被动模式的ftp服务  26天4 没看 已跳过 
                        1 装载ftp追踪时的专用模块
                            # modprobe nf_conntrack_ftp
                        2 放行请求报文
                            命令连接: NEW  ESTABLISHED
                            数据连接: RELATED  ESTABLISHED
                            # iptables -A INPUT -d 192.168.10.14 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
                            # iptables -A INPUT -d 192.168.10.14 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
                        3 放行响应报文:
                            ESTABLISEHD
                            # iptables -A OUTPUT -s 192.168.10.14 -p tcp -m state --state ESTABLISHED -j ACCEPT
    目标:
        -j  jump至指定的 target处理目标
            accept:     接受
            drop:       丢弃 
            reject:     拒绝
            return:     返回调用链
            redirect:   端口重定向
            log:        记录日志
            mark:       做防火墙标记
            dnat:       目标地址转换
            snat:       源地址转换
            masquerade: 地址伪装
            ...
            自定义链:    由自定义链上的规则进行匹配检查
    规则示例2:
        # iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.10.11 -p tcp -j ACCEPT  \\ 凡是访问本机的报文属于tcp协议都放行
            首先 放行 就是 过滤 所以是-t filter表  可以省略
            访问本机 就是到本机内部来的 在-A规则后面 添加到 INPUT链上 到本机内部只有两个一个inpu 一个是perrouting 第二个不能过滤
            源地址是   所有主机  -s 0.0.0.0/0    可以省略 写的时候要有掩码
            目标地址是 本地主机  -d 192.168.10.11
            协议是 -p tcp     目标 -j accept 都放行
        # iptables -t filter -A OUTPUT -s 192.168.10.11 -d 0.0.0.0/0 -p tcp -j ACCEPT
            凡是由本机发出的tcp协议报文跟任何主机通信都允许出去



Teo

You must be logged in to post a comment