iptables学习笔记

1. 压力测试
    ab
    host1 ab -n 100000 -c 40 http://192.168.1.112/
    host2 netstat -an|grep 80|grep 192.168.1.114 |grep EST -c
          w

2. netfilter
    linux核心层内部的一个数据包处理模块

3. hook point(INPUT OUTPUT FORWARD PREROUTING POSTROUTING)
    数据包在netfilter的挂载点

4. iptables
    四张表(filter nat mangle raw)+五条链(hook point)+规则

    规则
        数据包访问控制 ACCEPT DROP REJECT
        数据包改写 SNAT DNAT
        信息记录 LOG

    table     command    chain        params         target
   -t filter    -A        INPUT        -p tcp        -j ACCEPT        
      nat        -D        FORWARD        -s               DROP
                -L        OUTPUT        -d               REJECT
                -F        PREROUTING    -m  tcp           DNAT
                -P        POSTROUTING        state       SNAT
                -I                        multiport
                -R
                -n

5. iptables配置
    iptables -L #列出规则
        -F 清除已有规则
        -n 不显示主机名
    
    iptables -I INPUT -p tcp --dport 22:80 -j ACCEPT #允许访问22到80端口
    iptables -I INPUT -p icmp -j ACCEPT #允许ICMP
    iptables -A INPUT -j REJECT #屏蔽其它访问

    iptables -D INPUT -p tcp --dport 80 -j ACCEPT #先删除
    iptables -I INPUT -p tcp --dport 80 -j REJECT #后拒绝
    iptables -nL #不显示主机名列出规则

    iptables -I INPUT -i lo -j ACCEPT #本机可以访问自己
    iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    #本机可以访问其它主机

    iptables -D INPUT -p tcp --dport 80 -j ACCEPT #先删除
    iptables -I INPUT -p tcp -s 192.168.1.112 --dport 80 -j ACCEPT
    #只允许指定ip访问本机80端口


ftp主动模式(开放20端口) 客户端必须#iptables -F
    #vim /etc/vsftpd/vsftpd.conf #配置文件
    port_enable=yes
    connect_from_port_20=YES
    #iptables -I INPUT -p tcp --dport 21 -j ACCEPT #允许访问21端口  

ftp被动模式(开放'任意'端口)(默认)
    #vim /etc/vsftpd/vsftpd.conf
    port_enable=NO
    pasv_min_port=50000
    pasv_max_port=60000
    #iptables -I INPUT -p tcp --dport 21 -j ACCEPT #打开21号端口
    #iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT

    #modprobe nf_conntrack_ftp #临时建立ftp被动
    #modprobe -l #查看内核模块
    #vim /etc/sysconfig/iptables-config #永久建立ftp被动
    IPTABLES_MODULES="nf_conntrack_ftp" #设置参数


常见端口
    http 80/tcp
    https 443/tcp

    smtp 25/tcp
    smtps 465/tcp
    pop3 110/tcp

    nfs 123/udp
    samba 137,138,139/tcp 445/tcp
    ftp 20/tcp,21/tcp

    ssh 22/tcp
    mysql 3306/tcp
    oracle 1521/tcp

规则设置
    iptables -F
    iptables -I INPUT -i lo -j ACCEPT
    iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT #指定网段
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
    iptables -I INPUT -p icmp -j ACCEPT
    iptables -A INPUT -j REJECT

    /etc/sysconfig/iptables #配置文件
    /etc/init.d/iptables save #执行以保存iptables设置

nat表规则配置
    SNAT 源地址转换   出口POSTROUTING
    DNAT 目标地址转换 进口PREROUTING
    
    iptables -t nat -F
    iptables -t nat -A PREROUTING -d 192.168.1.112 -p tcp --dport 80 -j DNAT
    --to 192.168.2.112:80
    iptables -t nat -L

6. 利用iptables防CC攻击
    connlimit模块 #限制每一个客户端ip的并发连接数
        --connlimit-above n #限制并发个数

        iptables -I INPUT -p tcp --syn --dport 80 -m connlimit
        --connlimit-above 100 -j REJECT

        iptables -I INPUT -p tcp --dport 80 -s 192.168.1.112 -m connlimit
        --connmlimit-above 10 -j REJECT

    Limit模快 #限速,控制流量
        iptables -A INPUT -m limit --limit 3/hour  #--limit-burst默认值为5

    
        iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
        iptables -A INPUT -p icmp -j DROP

7. 实例脚本
    详见 ./iptables.sh
       

你可能感兴趣的:(linux)