zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/liviniu/p/14951537.html
Copyright © 2011-2022 走看看