• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    linux防墙iptables详细介绍、配置方法与案例

    1.1 iptables防火墙简介

    Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的**基于包过滤的防火墙工具**,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑的非常好

    Iptables是Linux2.4及2.6内核中集成的服务。其功能与安全性比其**ipfwadm,ipchains**强大的多,iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持**7层控制**(squid代理+iptables)

    1.2 iptables 名词和术语

    容器:包含和被包含的关系 

    iptables是表的容器 

    iptables包含表 (4张表)表是链的容器,每个表都包含若干个链 

    链是规则的容器,真正过滤规则是属于链里面的 

    级别介绍

    iptables   国家 

    表            省 

    链            市 

    规则        县

    1.3 iptables工作流程

    iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则来进行匹配是否可以进入到主机。

    iptables工作流程小结

    1.4 iptables表(tables)和链(chains)

    iptables根据功能和表的定义划分包含三个表,filter,nat,mangle,其每个表又包含不同的操作链(Chains)

    Filter表 是真正的防火墙功能 

    INPUT 进服务器 OUTPUT出服务器 FORWARD 流经服务器 

    Nat 表 负责数据包改写 网关共享上网、IP和端口映射 

    OUTPUT 

    PREROUTING 

    POSTROUTING 

    Mangle表 路由标记 用的不多 

    ####所有链全有 

    RAW 表 用处很少和Mangle一样 

    我们可以通过man iptables 来获取

    1.5 表介绍

    对于filter表的控制是我们实现本机防火墙的重要手段,特别是对INPUT链的控制 

    1.6 iptables表和链工作流程图

    提示: iptables主要由2个作用,第一是防火墙,第二是路由。 

    NAT功能: 

    企业案例:1)局域网上网共享(路由和网关)NAT POSTROUTING 

         2)外部IP和端口映射为内部IP和端口(DMZ功能),NAT PREROUTING 

    Filter功能:

    即防火墙FILTER INPUT FORWARD 

    企业案例:主要应用于服务器防火墙

    2.1 配置iptables

    iptables默认已经安装
    [root@web02 ~]# iptables -V
    iptables v1.4.7
    [root@web02 ~]# rpm -qa iptables
    iptables-1.4.7-16.el6.x86_64
    [root@web02 ~]# /etc/init.d/iptables status
    iptables: Firewall is not running.

    查看iptables规则

    [root@web02 ~]# iptables -nL
    Chain INPUT (policy ACCEPT)

    表示针对input链 ACCEPT是默认规则,默认是运行通过的

    target prot opt source destination
    input链下面具体的规则
    ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
    REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    如果没有指定表,默认就是filfer表

    iptables默认加载的内核模块
    [root@web02 ~]# lsmod |egrep "nat|filter|ipt"
    ipt_REJECT 2351 2
    iptable_filter 2793 1
    ip_tables 17831 1 iptable_filter

    加载如下模块到linux内核

    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack 连接跟踪
    modprobe ip_conntrack_ftp 连接跟踪
    modprobe ip_nat_ftp
    modprobe ipt_state

    再次过滤,查看生效情况

    [root@web02 ~]# lsmod |egrep "nat|filter|ipt"
    nf_nat_ftp 3443 0
    nf_conntrack_ftp 11953 1 nf_nat_ftp
    iptable_nat 5923 0
    nf_nat 22676 2 nf_nat_ftp,iptable_nat
    ipt_REJECT 2351 2
    nf_conntrack_ipv4 9154 5 iptable_nat,nf_nat
    nf_conntrack 79206 6 nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_state
    iptable_filter 2793 1
    ip_tables 17831 2 iptable_nat,iptable_filter 

    清空所有的规则,只留下默认规则

    [root@web02 ~]# iptables -F
    [root@web02 ~]# iptables -X
    [root@web02 ~]# iptables -Z

    iptables -F 清除所有规则 

    iptables -X 删除用户自定义规则 

    iptables -Z 链的计数器清零 

    2.2 禁止规则

    查看端口

    [root@web02 ~]# netstat -lntup|grep ssh
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1329/sshd
    tcp 0 0 :::22 :::* LISTEN 1329/sshd

    命令如下:

    iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

    -A 添加规则到指定链的结尾,最后一条 

    -I 添加规则到指定链的开头,第一条 

    -t 指定表,也可以不指定默认是filter 

    -p 指定协议(all.tcp,udp.icmp)默认all 

    --dport 指定端口 

    -j 处理的行为 

    ACCPET接收、DROP丢弃、REJECT拒绝

    最好使用ACCPET和DROP,因为拒绝会返回给用户信息。 

    清除规则可以使用iptables -F 

    还可以使用iptables -D INPUT 1 

    -D指定删除的链 

    --line-number 显示序列号 

    iptables -nl --line-number 

    提示:需要写上链和序列号

    温馨提示:恢复刚才断掉的SSH连接 

    1)去机房重启系统或登录服务器删除刚才的禁止规则 

    2)让机房人员重启服务器或者让机房人员拿用户密码登录进去 

    3)通过服务器的远程管理卡管理(推荐) 

    4)先写一个定时任务,每5分钟就停止防火墙 

    5)测试环境测试好,写成脚本,批量执行 

    企业案例

    3.1: 加-A和-I的区别

    [root@web02 ~]# iptables -A INPUT -p tcp --dport 80 -j DROP
    [root@web02 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

    按照iptables匹配规则,首先会先匹配第一行,依次向下。这样设置拒绝就没有用 

    如果想在中间插入可以指定插入行号

    [root@web02 ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    还可以通过序列号插入iptables 命令

    [root@web02 ~]# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
    [root@web02 ~]# iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num target prot opt source destination
    1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    Chain FORWARD (policy ACCEPT)
    num target prot opt source destination
    Chain OUTPUT (policy ACCEPT)
    num target prot opt source destination

    小结:总结下删除规则的方法 

    1. iptables -D INPUT -p tcp --dport 8080 -j DROP 

    2. iptables -F 删所有规则 

    3. /etc/init.d/iptables restart (用iptables命令行配置的命令都是临时生效) 

    4. iptables -D INPUT 规则序号

    3.2:禁止10.0.0.0网段接入 

    基于客户端网段控制

    [root@web02 ~]# iptables -A INPUT -s 10.0.0.0/24 -j DROP

    -s指定源地址 

    还可以使用不是这个网段的进行操作

    [root@web02 ~]# iptables -A INPUT ! -s 10.0.0.0/24 -j DROP

    案例:控制22端口 eth0网卡进来的数据

    iptables -A INPUT -p tcp --dport 22 -i eth0 ! -s 10.0.0.0/24 -j DROP
    iptables -A INPUT -p tcp --dport 22 -i eth0 ! -s 192.168.1.1 -j DROP

    封掉3306端口

    iptables -A INPUT -p tcp --dport 3306 -j DROP

    匹配指定的协议

    iptables -A INPUT -p tcp
    iptables -A INPUT -p udp

    匹配指定协议外的所有协议

    iptables -A INPUT ! -p tcp

    ``匹配单一端口**

    iptables -A INPUT -p tcp --sport 22 源端口
    iptables -A INPUT -p udp --dport 22 目的端口

    匹配端口范围:

    iptables -A INPUT -p tcp --sport 22:80
    iptables -A INPUT -p tcp --dport 21,22,23 -j DROP---->错误语法
    iptables -I INPUT -p tcp -m multiport --dport 22,23,24,25 -j DROP
    iptables -I INPUT -p tcp -m multiport ! --dport 22,23,24,25 -j DROP
    iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
    iptables -I INPUT -p tcp --dport 18:80 -j DROP <----最佳方法

    匹配ICMP类型

    iptables -A INPUT -p icmp-type 8

    icmp中有很多类型,其中8代表ping 

    例:

    iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

    因为icmp类型很多可以使用any,icmp的所有类型全禁

    iptables -A INPUT -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

    企业场景禁ping

    iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.0/24 -j ACCEPT

    匹配网络状态

    -m state --state

    NEW:已经或启动新的连接

    ESTABLISHED:已建立的连接

    RELATED:正在启动的新连接

    INVALID:非法或无法识别的

    FTP服务是特殊的,需要配状态连接

    允许关联的状态包通过(Web服务不要使用FTP服务) 

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    限制指定时间包的允许通过数量及并发数

    -m limit --limit n/{second/minute/hour}

    指定时间内的请求速率“n”为速率,后面为时间分别为:秒、分、时

    --limit-burst [n]

    在同一时间内允许通过的请求“n”为数字,不指定默认为5

    iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 5/min --limit-burst 2 -j ACCEPT

    手动执行iptables命令配置企业生产环境防火墙

    生产环境配置主机防火墙的两种模式 

    1. 允许所有程序,对操作伤害的进行拒绝操纵 应用场景:企业配置上网网关路由 

    2. 拒绝所有操作,允许指定的操作 应用场景:服务器主机防火墙

    配置企业主机防火墙

    [root@web02 ~]# iptables -F
    [root@web02 ~]# iptables -X
    [root@web02 ~]# iptables -Z

    1.设置允许SSH登录端口

    [root@web02 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCETP
    [root@web02 ~]# iptables -A INPUT -p tcp -s 10.0.0.1/24 -j ACCEPT

    2.设置允许本机lo通信规则

    [root@web02 ~]# iptables -A INPUT -i lo -j ACCEPT
    [root@web02 ~]# iptables -A OUTPUT -o lo -j ACCEPT

    3.设置默认规则

    [root@web02 ~]# iptables -P INPUT DROP
    [root@web02 ~]# iptables -P OUTPUT ACCEPT
    [root@web02 ~]# iptables -P FORWARD DROP

    查看规则(现在的服务器是最安全的)

    [root@web02 ~]# iptables -nL --line-number
    Chain INPUT (policy DROP)
    num target prot opt source destination
    1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
    2 ACCEPT tcp -- 10.0.0.0/24 0.0.0.0/0
    3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
    Chain FORWARD (policy DROP)
    num target prot opt source destination
    Chain OUTPUT (policy ACCEPT)
    num target prot opt source destination
    1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

    4.开启信任的IP网段 

    允许IDC LAN/WAN 和办公网IP的访问,及对外合作机构访问

    iptables -A INPUT -s 124.23.62.96/27 -p all -j ACCEPT #办公室固定IP段
    iptables -A INPUT -s 192.168.2.0/24 -p all -j ACCEPT #IDC机房的内网网段
    iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT #其他机房的内网网段
    iptables -A INPUT -s 203.82.24.0/24 -p all -j ACCEPT #IDC机房的外网网段
    iptables -A INPUT -s 203.82.23.0/24 -p all -j ACCEPT #其他IDC机房的外网网段

    现在还只是我们可以访问,对外还无法访问 

    5.允许icmp类型协议通过

    iptables -A INPUT -p icmp -m icmp-type any -j ACCEPT

    提示:如果不想开,就不执行此命令

    iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --icmp-type any -j ACCEPT

    6.允许关联的状态包通过(Web服务不要使用FTP服务)

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    提示:以上配置就是合格服务器应该配置的

    保存

    默认使用iptables并没有永久保存,重启失效。 

    第一种方法:

    /etc/init.d/iptables save

    保存到/etc/sysconfig/iptables 下面

    显示如下格式

    [root@web02 ~]# cat /etc/sysconfig/iptables
    # Generated by iptables-save v1.4.7 on Mon Aug 15 01:33:44 2016
    *nat
    :PREROUTING ACCEPT [1413:153792]
    :POSTROUTING ACCEPT [132:8834]
    :OUTPUT ACCEPT [132:8834]
    COMMIT
    # Completed on Mon Aug 15 01:33:44 2016
    # Generated by iptables-save v1.4.7 on Mon Aug 15 01:33:44 2016
    *filter
    :INPUT DROP [1798:662465]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [288:21100]
    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -s 10.0.0.0/24 -p tcp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    COMMIT
    # Completed on Mon Aug 15 01:33:44 2016

    第二种方法:

    [root@web02 ~]# iptables-save >/etc/sysconfig/iptables

    推荐使用第一种方式

    测试:我通过其他服务器扫描我们配置的防火墙 

    使用nmap工具进行分析,此工具需要安装

    [root@web02 ~]# yum -y install nmap

    使用如下:更多可以使用nmap --help

    [root@web02 ~]# nmap 10.0.0.8 -p 1-65535
    Starting Nmap 5.51 ( http://nmap.org ) at 2016-08-15 04:28 CST
    Nmap scan report for 10.0.0.8
    Host is up (0.0000070s latency).
    Not shown: 65532 closed ports
    PORT STATE SERVICE
    22/tcp open ssh
    80/tcp open http
    3306/tcp open mysql
    Nmap done: 1 IP address (1 host up) scanned in 14.21 seconds

    生产维护

    (1)确定的规则; 

    编辑/etc/sysconfig/iptables 

    加入想要的规则:例如

    -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
    /etc/init.d/iptables reload

    或者改配置的同时命令在执行,也是永久生效。 

    (2)命令试错,没问题了,然后放配置文件,这时不需要重启了

    恶意IP封杀

    封IP,在第一行封。10.0.0.1 这个机器攻击我们服务器或者在BBS里发垃圾帖子 

    手工封IP:

    iptables -I INPUT -s 10.0.0.1 -j DROP #粗,范围大,外部攻击者
    Iptables -I INPUT -s 10.0.0.1 -j DROP
    iptables -I INPUT -p tcp -s 10.0.0.1 --dport 80 -j DROP #细,范围小。内部

    自动封IP:分析Web或应用日志或者网络连接状态封掉垃圾IP 

    脚本:

    #!/bin/bash
    #this is a server firewall created by oldboy 17:03 2006-7-26
    # e_mail:31333741@qq.com
    # qqinfo:49000448
    # function: a server firewall
    # version:1.1
    ################################################
    # oldboy trainning info.
    # QQ 1986787350 70271111
    # site: http://www.etiantian.org
    # blog: http://oldboy.blog.51cto.com
    # oldboy trainning QQ group: 208160987 45039636
    ################################################
    #define variable PATH
    IPT=/sbin/iptables
    #Remove any existing rules
    $IPT -F
    $IPT -X
    $IPT -Z
    #setting default firewall policy
    $IPT --policy OUTPUT ACCEPT
    $IPT --policy FORWARD DROP
    $IPT -P INPUT DROP
    #setting for loopback interface
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT
    #setting access rules
    #one,ip access rules,allow all the ips of
    $IPT -A INPUT -s 10.0.10.0/24 -p all -j ACCEPT
    $IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
    ##下面的是重复的,作为知识点保留,单个服务的配置
    #second,port access rules
    #nagios
    $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 5666 -j ACCEPT
    $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 5666 -j ACCEPT
    #db
    $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 3306 -j ACCEPT
    $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 3307 -j ACCEPT
    $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 3306 -j ACCEPT
    $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 3307 -j ACCEPT
    #ssh difference from other servers here.>>
    $IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 52113 -j ACCEPT
    $IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 52113 -j ACCEPT
    $IPT -A INPUT -p tcp --dport 22 -j ACCEPT
    #http
    $IPT -A INPUT -p tcp --dport 80 -j ACCEPT
    #snmp
    $IPT -A INPUT -s 10.0.0.0/24 -p UDP --dport 161 -j ACCEPT
    $IPT -A INPUT -s 10.0.10.0/24 -p UDP --dport 161 -j ACCEPT
    #rsync
    $IPT -A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
    $IPT -A INPUT -s 10.0.10.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
    #icmp
    #$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
    #others RELATED
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    企业案例:写一个脚本解决DOS攻击生产案例 

    提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP 

    本脚本使用测试文件进行编写 

    [root@db02 scripts]# cat test_6.sh
    #!/bin/sh
    #
    [ -f /etc/init.d/functions ] && . /etc/init.d/functions
    IP_file="/server/scripts/ddos.txt"
    IP_filter_command="iptables -I INPUT -j DROP -s"
    IP_recover_command="iptables -D INPUT -j DROP -s"
    function IP_check(){
    grep "EST" ${IP_file}|awk -F "[ |:]+" '{print $6}'|sort |uniq -c|sort -rn -k1 > /server/scripts/ip.txt
    }
    function IP_filter(){
    exec < /server/scripts/ip.txt
    while read line
    do
    IP_count=`echo $line|awk '{print $1}'`
    IP=`echo $line|awk '{print $2}'`
    IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l`
    if [ ${IP_count} -gt 25 -a ${IP_fil} -eq 0 ];then
    ${IP_filter_command} ${IP}
    echo "${IP}" >> /server/scripts/ip_filtered.txt
    action "Filter ${IP}" /bin/true
    fi
    done
    }
    function IP_recover(){
    exec < /server/scripts/ip.txt
    while read line
    do
    IP_count=`echo $line|awk '{print $1}'`
    IP=`echo $line|awk '{print $2}'`
    IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l`
    if [ ${IP_count} -le 25 -a ${IP_fil} -eq 1 ];then
    ${IP_recover_command} ${IP}
    echo "${IP}" >> /server/scripts/ip_filtered.txt
    action "Recover ${IP}" /bin/true
    fi
    done
    }
    function main(){
    case "$1" in
    filter)
    IP_check
    echo "$(date +%F-%H:%M:%S) filtered by $(whoami)" >> /server/scripts/ip_filtered.txt
    IP_filter
    ;;
    recover)
    IP_check
    echo "$(date +%F-%H:%M:%S) recovered by $(whoami)" >> /server/scripts/ip_filtered.txt
    IP_recover
    ;;
    *)
    echo "USAGE:$0 {filter|recover}"
    exit 1
    esac
    }
    main $*

    生产环境iptables脚本讲解

    技巧:具备外网IP的服务器不对外的服务最好要做源地址限制。对外提供的服务,不能做源地址限制,例如:80 端口 

    问题:企业硬件防火墙和IPTABLES防火墙是否要同时用。 

    解决:可以同时使用企业硬件防火墙一般放在网关位置,相当于大厦的保安,但是楼里的每个屋子还是需要有人锁门的iptables

    问题: IDC机房部署了硬件防火墙,我们的服务器可以不开防火墙吗? 

    解答:绝对不可以,大厦有了保安,你的办公室门就不锁了吗?

    NAT表设置

    共享上网设置 

    linux网关B: 

    局域网共享的两条命令方法:

    方法1:适合于有固定外网地址的:

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7

    (1)-s192.168.1.0/24 办公室或IDC内网网段。 

    (2)-oeth0 为网关的外网卡接口。 

    (3)-jSNAT --to-source 10.0.0.7 是网关外网卡IP地址。 

    方法2:适合变化外网地址(ADSL):

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE #伪装。

    配置如下

    第一步:外网服务器配置

    [root@lb01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.5
    
    [root@lb01 ~]# iptables -t nat -L -n

    开启内核转发

    net.ipv4.ip_forward = 1
    vim /etc/sysctl.conf
    sysctl -p #生效 

    需要上网服务器设置 

    添加路由

    route add default gw 172.16.1.5#此处写提供外网的IP地址
    
    vim /etc/resolv.conf

    添加 nameserver 223.5.5.5 

    route -n 检查

    案例2:实现把访问10.0.0.5:80的请求转到172.16.1.8:80

    [root@web02 ~]# iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.8:80
    [root@web02 ~]# iptables -P FORWARD DROP

    iptables常用企业案例:

    1、Linux主机防火墙(表:FILTER 控制链:INPUT) 

    2、局域网机器共享上网(表:NAT 控制链:POSTROUTING)

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7

    3、外部地址和端口,映射为内部地址和端口(表:NAT 控制的链:PREROUTING)

    iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.8:9000

    企业案例:实现外部IP 124.42.34.112 一对一映射到内部server 10.0.0.8 

    网关Ip:eth0:124.42.60.109 eth1:10.0.0.254 

    首先在路由网关上绑定VIP 124.42.34.112,可以是别名或辅助IP的方式。

    -A POSTROUTING -s 10.0.0.0/255.255.240.0 -d 124.42.34.112 -j SNAT --to-source 10.0.0.254
    -A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8
    -A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112

    iptables 生产应用场景

    1)局域网共享上网(适合做企业内部局域网上网网关,以及IDC机房内网的上网网关[nat POSTROUTING]) 

    2)服务器防火墙功能(适合IDC机房具有外网IP的服务器)(主要是filter INPUT的控制) 

    3)把外部IP及端口映射到局域网内部(可以一对一IP映射,也可以针对某一个端口映射)也可能是IDC把网站的外网VIP及网站端口映射到负载均衡器上(硬件防火墙)。(nat PREROUTING) 

    4)办公路由器+网关功能(zebra路由+iptables过滤及NAT+squid正向透明代理)80+ntop/iftop/iptraf流量查看+tc/cbq流量控制限速 

    5)邮件的网关

    iptables防火墙的应用

    1)主机防火墙 

    2)网关的应用(IP映射,端口映射) 

    3)过滤信息,监控限制流量及员工上网行为(squid(正向代理缓存加过滤)+ntop(图形流量监控)+通常(流量限制)+iptraf/iftop(流量查看)) 

    如果IPTABLES的服务器升级内核可以实现类似squid的过滤功能 

    4)网关装杀毒软件监听9999端口,(网关杀毒)

    iptables -A PREROUTING -i eth0 -d 211.167.253.109 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.10.6:9025

    5)结合zebra配置企业级路由器

    映射多个外网IP上网

    iptables -t nat -A POSTROUTING -s 10.0.0.1/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
    
    iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.106
    
    #iptables -t nat -A postrouting -S 192.168.1.0/22 -o eth0 -j SNAT --to-source 10.0.0.241-10.0.0.249

    问题: 

    1、2000人被封 

    2、可用65535端口资源有限

    企业案例: ip_conntrack: table full, dropping packet.的错误提示 

    以下是我的生产环境的某个服务器的配置:

    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000 65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    #5、dmesg里面显示ip_conntrack: table full, dropping packet.的错误提示.如何解决。 
    #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。 
    c58:
     
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max=25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
    ################################################################
    C64:
     
    net.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_tcp_timeout_established = 180
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

    调整内核参数/etc/sysctl.conf后,需执行/sbin/sysctl -p使得修改生效。 

    强调:如果并发比较大,或者日PV多的情况下,开启防火墙要注意,很可能导致网站访问缓慢 

    大并发(并发1万,PV日3000万)要么购买硬件防火墙,要么不开iptables防火墙

    iptables 参数简介

    -n 数字 

    -L 列表 

    -F 清除所有规则,不会处理默认规则 

    -X 删除用户自定义的链 

    -Z链的计数器清零 

    -A 添加规则到指定链的结尾,最后一条 

    -I 添加规则到指定链的开头,第一条 

    -t指定表,也可以不指定默认是filter 

    -p 指定协议(all.tcp,udp.icmp)默认all 

    -P 设置默认规则 

    -s指定源地址 

    -d 目的地址 

    --dport 指定端口 

    -j处理的行为 ACCPET接收、DROP丢弃、REJECT拒绝 

    -iinput 匹配进入的网卡接口 

    -ooutput 匹配出去的网卡接口 

    -m state --state 匹配网络状态 

    更多关于linux防墙iptables详细介绍请查看下面的相关链接

    上一篇:ESXI内虚拟机内安装workstation网络不通解决方法
    下一篇:linux压缩文件命令zip的实例用法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    linux防墙iptables详细介绍、配置方法与案例 linux,防墙,iptables,详细,介绍,