美文网首页
iptables 防火墙

iptables 防火墙

作者: DB哥 | 来源:发表于2019-09-29 08:36 被阅读0次

    Linux System Environment

    [root@mn01 ~]# cat /etc/redhat-release                     #==》系统版本
    CentOS release 6.7 (Final)
    [root@mn01 ~]# uname –r                                   #==》内核版本
    3.10.0-862.el7.x86_64
    [root@mn01 ~]# uname -m                                    #==》系统架构
    x86_64
    [root@mn01 ~]# echo $LANG                                  #==》系统字符集
    En_US.UTF-8
    [root@mn01 ~]# iptables –V                                #==》iptables版本
    iptables v1.4.21
    

    iptables简介

    iptables是Linux系统自带的采用数据包过滤机制的开源防火墙,以此过滤主机网络与外部主机网络之间的数据包,达到一种比较安全的控制。CentOS 6.9以前的版本(包括CentOS 6.9版本)系统自带的是iptables防火墙,而CentOS 7.0以后的版本,使用的是firewalld防火墙,iptables和firewalld两者区别不大,iptables在CentOS 7以后的任何版本都可以使用,底层都是调用的命令仍然是iptalbes,本教程以iptables防火墙为主进行讲解。

    iptables生产应用场景

    1、服务器防火墙功能(主要使用filter表控制),适用IDC机房具备有外网IP的服务器。
    2、局域网共享上网(主要使用nat表的POSTROUTING规则控制),适用做企业局域网nat转发上网以及IDC机房内的nat转发上网。
    3、局域网端口映射(主要使用nat表的PREROUTING规则控制),适用做企业局域网端口映射到外网端口。
    4、局域网IP映射(主要使用nat表的PREROUTING规则控制),适用于企业局域网指定的某一个IP映射到指定的外网IP。
    

    iptables名词和术语
    标注:iptables名词和术语用一句话记住:iptables(Netfiter)是一个装了四表五链多规则的大容器

    1、什么是容器?
    容器是指定用来装东西的器具。
    
    2、什么是iptables(Netfilter)?
    Netfilter是表(tables)容器,iptables和Netfilter是相同意思。
    
    3、什么是表(tables)?
    表(tables)是链的容器,即所有的链(chains)都属于其对应的表(tables),表包含有四种表Filter表、Nat表、Mangle表、Raw表。
    
    4、什么是链(chains)?
    链是规则的容器,链包含有五种:INPUT链、OUTPUT链、FORWARD链、PREROUTING链、POSTROUTING链。
    
    5、什么是规则(rules)?
    规则就是在iptables里设置的一条条命令的规则,例如 : iptables -A INPUT –p  tcp –dport 3306 –j  DROP
    

    iptables防火墙表(tables)和链(chains)关系图

    iptables防火墙五种链的作用
    标注:所有的链名称者要大写

    INPUT链            #==》负责过滤所有目标地址是本机地址的数据包,通俗的讲,就是过滤进入主机的数据包。
    FORWARD链          #==》负责转发流经主机的数据包,起转发的作用。
    OUTPUT链           #==》处理所有源地址是本机地址的数据包,通俗的讲,就是处理从主机发出去的数据包。
    PREROUTING链       #==》在数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等。
    POSTROUTING链      #==》在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址、源端口等。
    

    iptables工作原理图

    Iptables注意事项

    1、链名称要大写
    2、iptables是层层过滤,实际是按照配置规则顺序从上到下,从前到后过滤
    3、如果所有规则没有明确表明是阻止还是通过,也没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
    4、防火墙默认规则是对应链的所有规则执行完才会执行的。
    

    Iptables防火墙规则永久保存
    标注:重启系统后iptables规则会自动清失

    #==》永久保存iptables
    [root@rsync ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
    
    #==》iptables防火墙配置规则文件
    [root@rsync ~]# ls -l /etc/sysconfig/iptables
    -rw------- 1 root root 452 Sep  2 17:48 /etc/sysconfig/iptables
    

    iptables命令参数

    -V                  #==》查看iptables版本
    -L                  #==》列表显示所有的链
    -n                  #==》以数字形式显示IP和端口
    -t                  #==》指定表,默认指定filter表
    -F                  #==》清除所有的规则,不会处理默认的规则
    -X                  #==》删除用户自定义的链
    -D                  #==》删除链上的规则
    -Z                  #==》链的计数器清零(数据包计数器与数据包字节计数器)
    -A                  #==》把规则添加到指定的链上,默认添加到最后一行
    -I                  #==》把规则添加到指定的链上,默认添加到第一行
    -s                  #==》指定源地址或网段,前面加!感叹号表示取反
    -d                  #==》指定目的地址
    -i                  #==》指定进入的网络接口(eth0/eth1等)
    -o                  #==》指定出去的网络接口(eth0/eth1等)
    -j                  #==》对规则的具体处理方法(ACCEPT/DROP/REJECT/SNAT/DNAT)
    -p                  #==》指定过滤的协议,例如tcp/udp/icmp等协议
    - - dport           #==》指定目标端口
    - - sport           #==》指定源端口
    - - line-number     #==》显示链上规则的号码
    

    一、安装iptables
    标注:本教程系统是CentOS 7.5版本默认安装了firewalld防火墙,但没有安装iptables防火墙

    1、配置阿里云yum源

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum makecache
    

    2、yum安装iptables

    [root@m01 ~]# yum -y install iptables-services
    [root@m01 ~]# rpm -qa iptables
    iptables-1.4.21-28.el7.x86_64
    

    3、加载防火墙内核模块并检查

    #==》加载防火墙内核模块
    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_state
    
    #==》检查加载情况
    [root@m01 ~]# lsmod | egrep 'filter|nat|ipt'
    

    4、关闭firewalld防火墙

    [root@m01 ~]# systemctl stop firewalld
    [root@m01 ~]# systemctl disable firewalld
    [root@m01 ~]# systemctl status firewalld
    

    5、启动iptables防火墙并设置开机自启动

    [root@m01 ~]# systemctl start iptables.service
    [root@m01 ~]# systemctl enable iptables.service
    [root@m01 ~]# systemctl status iptables.service
    

    二、iptables基本操作

    1、查看防火墙规则

    #==》默认查看的是filter表
    [root@mn01 ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination   
    target     prot opt source               destination   
       
    #==》指定查看nat表   
    [root@mn01 ~]# iptables -L -n -t nat
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination  
    

    2、清除防火墙规则

    [root@mn01 ~]# iptables –F          #==》清除所有规则,不会处理默认的规则
    [root@mn01 ~]# iptables –X          #==》删除用户自定义的链
    [root@mn01 ~]# iptables –Z          #==》链的计数器清零
    

    3、添加防火墙规则

    [root@mn01 ~]# iptables -t filter -A INPUT -p tcp --dport 555 -j DROP
    [root@mn01 ~]# iptables -t filter -A INPUT -p tcp --dport 666 -j DROP
    

    4、删除指定的规则

    [root@mn01 ~]# iptables -L -n --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:555
    2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:666
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination         
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination    
         
    [root@mn01 ~]# iptables -t filter -D INPUT 2
    
    [root@mn01 ~]# iptables -L -n --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:555
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination         
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination    
    

    三、iptables实战

    1、禁用某个端口访问

    iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
    
    规则拆分说明
    
    -t filter       #==》指定表,默认指定是filter表
    -A INPUT        #==》把规则添加到指定的链上,默认添加到最后一行
    -p tcp          #==》指定协议
    - - dropt 22    #==》指定目标端口
    -j DROP         #==》对规则的具体处理方法(ACCEPT/DROP/REJECT/SNAT/DNAT)
    

    2、禁用连续或指定多个的端口范围

    iptables -t filter -A INPUT -p tcp --dport 20:30 -j DROP
    iptables -t filter -A INPUT -p tcp -m multiport --dport 20,21,22,23 -j DROP
    
    规则拆分说明
    -t filter       #==》指定表,默认指定是filter表
    -A INPUT        #==》把规则添加到指定的链上,默认添加到最后一行
    -p tcp          #==》指定协议
    -m multiport    #==》指定多个端口
    - - dropt 22    #==》指定目标端口
    -j DROP         #==》对规则的具体处理方法(ACCEPT/DROP/REJECT/SNAT/DNAT)
    

    3、禁用某个IP或网段访问

    iptables -t filter -A INPUT -p tcp -s 10.0.0.100 -j DROP
    iptables -t filter -A INPUT -p tcp ! -s 10.0.0.100 -j DROP
    iptables -t filter -A INPUT -p tcp -i eth0 -s 10.0.0.100 -j DROP
    iptables -t filter -A INPUT -p tcp -i eth0 -s 10.0.0.0/24 -j DROP
    
    规则拆分说明
    
    -t filter           #==》指定表,默认指定是filter表
    -A INPUT            #==》把规则添加到指定的链上,默认添加到最后一行
    -p tcp              #==》指定协议
    -i eth0             #==》指定网络接口
    -s  10.0.0.100      #==》指定源IP地址10.0.0.100
    ! – s 10.0.0.100    #==》排除源IP地址 10.0.0.100的除外的所有IP地址
    -j DROP             #==》对规则的具体处理方法(ACCEPT/DROP/REJECT/SNAT/DNAT)
    

    4、禁用某个协议(禁用icmp协议)

    iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.100 -j DROP
    iptables -t filter -A INPUT -p tcp -s 10.0.0.100 -j DROP
    iptables -t filter -A INPUT ! -p udp -s 10.0.0.100 -j DROP
    
    规则拆分说明
    
    -t filter           #==》指定表,默认指定是filter表
    -A INPUT            #==》把规则添加到指定的链上,默认添加到最后一行
    -p icmp             #==》指定协议
    --icmp-type 8       #==》指定icmp的类型大小
    -i eth0             #==》指定网络接口
    -s  10.0.0.100      #==》指定源IP地址10.0.0.100
    -j DROP             #==》对规则的具体处理方法(ACCEPT/DROP/REJECT/SNAT/DNAT)
    

    5、禁用指定的网络连接状态

    Iptables –t filter -A INPUT -m state --state ESTABLISHED -j DROP
    
    规则拆分说明
    
    -t filter           #==》指定表,默认指定是filter表
    -A INPUT            #==》把规则添加到指定的链上,默认添加到最后一行
    -m state            #==》匹配网络连接状态
    - - state           #==》指定匹配的网络连接状态类型
    -j DROP             #==》对规则的具体处理方法(ACCEPT/DROP/REJECT/SNAT/DNAT)
    
    #==》网络连接状态
    NEW                 #==》已经或将启动新的连接
    ESTABLISHED         #==》已建立的连接
    RELATED             #==》正在启动的新连接
    INVALID             #==》非法或无法识别的
    

    三、iptables部署相对安全的防火墙方案(应用之一)

    2种思路:
    1、设置白名单列表,默认规则设置不允许状态。(本教程使用此方法演示)
    2、设置黑名单列表,默认规则设置允许状态。

    1、清空防火墙规则

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

    2、设置白名单列表

    [root@mn01 ~]# iptables -t filter -A INPUT -p all -s 10.0.0.0/24 -j ACCEPT
    [root@mn01 ~]# iptables -t filter -A INPUT -p all -s 10.34.23.165/27 -j ACCEPT
    [root@mn01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT
    [root@mn01 ~]# iptables -t filter -A INPUT -i lo -j ACCEPT
    

    3、设置默认规则为不允许

    [root@mn01 ~]# iptables -t filter -P INPUT DROP
    [root@mn01 ~]# iptables -t filter -P OUTPUT ACCEPT
    [root@mn01 ~]# iptables -t filter -P FORWARD DROP
    

    4、查看iptables规则

    [root@mn01 ~]# iptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
    ACCEPT     all  --  10.34.23.160/27      0.0.0.0/0           
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 22,80,443
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    
    Chain FORWARD (policy DROP)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination        
    

    四、iptables局域网共享上网(应用之二)

    1、内部服务器网卡设置

    [root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    IPADDR=172.16.1.100
    NETMASK=255.255.255.0
    GATEWAY=172.16.1.60
    ONBOOT=yes
    

    2、iptables route服务器网卡设置

    #==》eth0 网卡
    [root@mn01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    IPADDR=10.0.0.60
    NETMASK=255.255.255.0
    GATEWAY=10.0.0.2
    DNS1=223.6.6.6
    ONBOOT=yes
    
    #==》eth1 网卡
    [root@mn01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth1
    DEVICE=eth1
    IPADDR=172.16.1.60
    NETMASK=255.255.255.0
    ONBOOT=yes
    

    3、iptables route服务器加载iptables内核模块

    #==》iptables加载内核模块
    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_state
    
    #==》查看内核加载情况
    [root@mn01 ~]# lsmod | egrep 'filter|nat|ipt'
    nf_nat_ftp             12770  0 
    nf_conntrack_ftp       18638  1 nf_nat_ftp
    iptable_nat            12875  0 
    nf_nat_ipv4            14115  1 iptable_nat
    nf_nat                 26787  2 nf_nat_ftp,nf_nat_ipv4
    ipt_REJECT             12541  0 
    nf_reject_ipv4         13373  1 ipt_REJECT
    nf_conntrack          133053  7 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
    iptable_filter         12810  0 
    ip_tables              27126  2 iptable_filter,iptable_nat
    libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
    

    4、开启iptables防火墙filter表FORWARD链允许转发功能

    [root@mn01 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    [root@mn01 ~]# tail -1 /etc/sysctl.conf 
    net.ipv4.ip_forward = 1
    

    5、关掉iptables防火墙filter功能或设置全允许,否则影响到测试

    [root@mn01 ~]# systemctl stop iptables.service
    

    6、设置局域网共享上网规则(nat表)
    标注:设置局域网共享上网规则有两种方法

    #==》适合于有固定IP的外网地址(带固定IP的光纤)
    [root@mn01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.60
    [root@mn01 ~]# iptables -L -n -t nat
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.60
    
    #==》适合动态IP地址的外网地址(ADSL)
    [root@mn01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
    [root@mn01 ~]# iptables -L -n -t nat
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    MASQUERADE  all  --  172.16.1.0/24        0.0.0.0/0        
    

    7、内部服务器测试

    [root@mn01 ~]# ping -c 3 www.baidu.com
    PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.
    64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=1 ttl=128 time=8.87 ms
    64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=2 ttl=128 time=9.63 ms
    64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=3 ttl=128 time=9.60 ms
    --- www.a.shifen.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2007ms
    rtt min/avg/max/mdev = 8.877/9.371/9.633/0.367 ms
    
    [root@mn01 ~]# traceroute www.baidu.com
    traceroute to www.baidu.com (163.177.151.110), 30 hops max, 60 byte packets
     1  gateway (10.0.0.2)  0.140 ms  0.070 ms  0.080 ms
    

    五、iptables端口映射 (应用之三)

    1、设置前测试

    [root@master ~]# curl 172.16.1.100
    web01
    [root@master ~]# curl 10.0.0.60
    curl: (7) Failed connect to 10.0.0.60:80; Connection refused
    

    2、设置iptables端口映射服务器

    [root@mn01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.60 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.100:80 
    [root@mn01 ~]# iptables -L -n -t nat
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    DNAT       tcp  --  0.0.0.0/0            10.0.0.60            tcp dpt:80 to:172.16.1.100:80
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    

    3、测试

    [root@master ~]# curl 172.16.1.100
    web01
    [root@master ~]# curl 10.0.0.60
    web01
    

    相关文章

      网友评论

          本文标题:iptables 防火墙

          本文链接:https://www.haomeiwen.com/subject/canqyctx.html