• iptables使用示例


    iptables应用

    环境 centos7

    • iptables-services安装

      [root@localhost ~]# yum -y install iptables-services
      #centos7系统中默认存在iptables命令,此命令仅为简单查询及操作命令,不包含配置文件,安装iptablesservices后,将直接生成配置文件,便于配置保存。包含ipv4及ipv6。
    • 设置服务开启

      [root@localhost ~]# systemctl start iptables.service
    • 设置开机自启动

      [root@localhost ~]# systemctl enable iptables.services
    • 查看配置文件

      [root@localhost ~]# rpm -ql iptables-services
    • 保存规则

      [root@localhost ~]# iptables-save > /etc/sysconfig/iptables
    • 重载

      [root@localhost ~]#iptables-restore < /etc/sysconfig/iptables
    • 基本配置

      iptables -F
      #删除现有规则
      
      iptables -P INPUT DROP
      iptables -P FORWARD DROP
      iptables -P OUTPUT DROP
      #配置默认链策略
    • 案例:白名单

      [root@localhost ~]# iptables -t filter -F
      [root@localhost ~]# iptables -P INPUT DROP
      [root@localhost ~]# iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT
      [root@localhost ~]# iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT
    • 案例:黑名单

      [root@localhost ~]# iptables -P INPUT ACCEPT
      [root@localhost ~]# iptables -F
      [root@localhost ~]# iptables -t filter -A INPUT -s 192.168.2.20/24 -p tcp --dport 80 -j DROP
    • 案例:通过lo访问本机数据

      [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
      #允许通过本地回环网卡访问本机
    • 案例:允许连接态产生衍生态

      [root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,1 RELATED -j ACCEPT
    • iptables filter表应用案例

      • 案例1

        [root@localhost ~]# yum -y install httpd vsftpd sshd
        [root@localhost ~]# systemctl start httpd vsftpd sshd
        [root@localhost ~]# iptables -t filter -F
        [root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
        [root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
        [root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
        [root@localhost ~]# iptables -A INPUT -j REJECT
        #在存问题
        本机无法访问本机
        例如:ping 127.0.0.1
        解决方法
        [root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT
        本机无法访问其它主机
        例如:ssh remote_host
        解决方法
        [root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        FTP无法访问 解决方法1: [root@localhost
        ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf pasv_min_port=50000 pasv_max_port=60000 [root@localhost ~]# iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT 解决方法2:使用连接追踪模块 [root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT [root@localhost ~]# modprobe nf_conntrack_ftp #临时方法,添加连接追踪模块 [root@localhost ~]# vim /etc/sysconfig/iptables-config IPTABLES_MODULES="nf_conntrack_ftp" #启动服务时加载 #针对数据端口连接时,将三次握手第一次状态由NEW识别为RELATED
      • 案例2:iptables标准流程

        [root@localhost ~]# iptables -F
        [root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        [root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
        [root@localhost ~]# iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT #允许内网任何访问
        [root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
        [root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
        [root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT
        [root@localhost ~]# iptables -A INPUT -j REJECT
        [root@localhost ~]# modprobe nf_conntrack_ftp
        [root@localhost ~]# iptables-save > /etc/sysconfig/iptables
        [root@localhost ~]# vim /etc/sysconfig/iptables-config
        IPTABLES_MODULES="nf_conntrack_ftp"
      • 案例3:扩展匹配

        #-m icmp [root@localhost ~]# iptables -F [root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT #允许ping回应 [root@localhost ~]# iptables -A INPUT -j REJECT
        #
        -m iprange [root@localhost ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.2.10-192.168.2.100 -j REJECT
        #
        -m multiport [root@localhost ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT
        #
        -m tos 根据ip协议头部 type of service进行过滤 [root@localhost ~]# iptables -F [root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv
        #抓取远程主机访问本机的ssh数据包,观察TOS值 [root@localhost
        ~]# tcpdump -i eth0 -nn port 22 -vvv
        #抓取远程从本机rsync或scp复制文件,观察TOS值 #
        ssh: tos 0x0 0x10 #scp: tos 0x0 0x8 #rsync: tos 0x0 0x8 [root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -j REJECT
        #
        -m tcp 按TCP控制位进行匹配 Flags:SYN ACK FIN RST URG PSH ALL NONE [root@localhost ~]# iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 80 -j ACCEPT
        #
        --tcp-flags SYN,ACK,FIN,RST SYN 检查四个标记位,只有SYN标记位才匹配,即只允许三次握手中的第一次握手,等价于--syn
        #
        -m comment 对规则进行备注说明 [root@localhost ~]# iptables -A INPUT -s 192.168.2.250 -m comment --comment "cloudhost" -j REJECT
        #-m mark 使用mangle表的标记方法,配合mangle表使用 [root@localhost ~]# iptables -t filter -A INPUT -m mark 2 -j REJECT

      • 案例4:扩展动作

        #-j LOG 记录至日志中
        [root@localhost ~]# grep 'kern.*' /etc/rsyslog.conf 
        #添加kern.* /var/log/kernel.log
        [root@localhost ~]# systemctl restart rsyslog
        [root@localhost ~]# iptables -j LOG -h
        [root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j LOG --logprefix " localhost_ssh "
        [root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j ACCEPT
        [root@localhost ~]# iptables -t filter -A INPUT -j REJECT
        
        #-j REJECT
        当访问一个未开启的TCP端口时,应该返回一个带有RST标记的数据包
        当访问一个未开启的UDP端口,结果返回port xxx unreachable
        当访问一个开启的TCP端口,但被防火墙REJECT,结果返回port xxx unreachable
        [root@localhost ~]# iptables -j REJECT -h
        [root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT --rejectwith
        tcp-reset //返回一个自定义消息类型
        
        
        #-j MARK 进行标记,可在LVS调度器中应用
        [root@localhost ~]# iptables -t mangle -L
        [root@localhost ~]# iptables -j MARK -h
        [root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.110 -j MARK --setmark 1
        [root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.25 -j MARK --setmark 2
        [root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 1 -j ACCEPT //按照标记匹配
        [root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT
    • iptables nat表应用案例

      • nat表作用

        • 导流
      • nat表作用位置

        • KVM或OpenStack中虚拟机或云主机与外部通信
        • Docker管理的容器与外部通信
      • nat表规则动作所对应的链

        • SNAT 源地址转换 应用于出口POSTROUTING
        • MASQUERADE 源地址转换 应用于出口POSTROUTING
        • DNAT 目标地址转换 应用于进口PREROUTING
        • REDIRECT 端口重定向 应用于进口PREROUTING
      • 开启路由转发功能

        [root@localhost ~]# sysctl -a | grep ip_forward
        net.ipv4.ip_forward = 1
        [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
        1
        #以上为开启
        #以下为关闭
        [root@localhost ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
        [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
        0
  • 相关阅读:
    C#中一些关联名词的含义归纳
    lua杂记
    项目管理工具与常用网站汇总
    SVN用法及常见问题分析
    递归打印lua中的table
    脚本编辑中的一些名词概念
    quick-cocos2d-x lua框架解析(一)对UI进行操作的UiUtil脚本
    lua的table转为excel表格的方法
    前端mvc与mvvm
    ext--创建store
  • 原文地址:https://www.cnblogs.com/liviniu/p/14951537.html
Copyright © 2020-2023  润新知