美文网首页
CentOS 7 下使用iptables

CentOS 7 下使用iptables

作者: clam314 | 来源:发表于2020-05-29 22:37 被阅读0次

    一、iptables的简介

    iptables/netfilter(下文中简称为iptables)组成Linux平台下的包过滤防火墙,含有网络地址转换(Network Address Translate)、数据包内容修改以及数据包过滤等功能。

    1. iptables可以理解成一个是client,用户通过iptables这个客户端代理,将安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,名字叫netfilter;
    2. netfilter是iptables的backend,是防火墙真正的安全框架(framework),netfilter位于内核空间。

    二、iptable下,数据经过防火墙的流程

    1、表tables:各类功能相似的规则rule的集合

    iptables内置了4个表优先级次序(由高而低):raw --> mangle --> nat --> filter

    • raw表: 优先级最高,通常与NOTRACK一起使用,用于跳过连接跟踪(conntrack)和 nat 表的处理;iptable_raw
    • mangle表:修改包头部的某些特殊条目,如 TOS、TTL、打上特殊标记 MARK 等,以影响后面的路由决策;iptable_mangle
    • nat表:用于进行网络地址转换,如 SNAT(修改源地址)、DNAT(修改目的地址)、REDIRECT 重定向等;iptable_nat
    • filter表:用于过滤数据包,比如 ACCEPT(允许),DROP(丢弃)、REJECT(拒绝)、LOG(记录日志);iptable_filter


      表链关系
    2、链chains:数据包流转的线路节点

    iptables上有5条链

    • PREROUTING 入站节点,可以存在于:raw表,mangle表,nat表
      INPUT 进入用户空间前的节点,可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)
    • FORWARD 转发节点,可以存在于:mangle表,filter表
    • OUTPUT 离开用户空间的节点,可以存在于:raw表mangle表,nat表,filter表
    • POSTROUTING 出站的节点,可以存在于:mangle表,nat表


      数据经过防火墙的流程

    三、CentOS各个版本防火墙的C/S差异

    1. CentOS 6及以前都是iptables/netfilter
    2. CentOS 7默认使用firewalld作为client,但是中间还是通过iptables的命令操作netfilter
    3. CentOS 8继续使用firewalld作为client,但是底层不再使用iptables命令以及netfilter作为backend了,取而代之的是ntftable


      CentOS各个版本防火墙

    四、CentOS 7 恢复使用iptables.service的方法

    CentOS 7 默认使用firewalld.service,要想切换iptables.service需要安装iptables(默认已经安装了)和iptables-services这两个依赖包

    1. 停止并关闭开机自启动 firewalld
    $ systemctl stop firewalld.service 
    $ systemctl disable firewalld.service 
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    
    1. 安装iptables-service
    $ sudo yum install -y iptables-services
    已加载插件:fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.ustc.edu.cn
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    正在解决依赖关系
    --> 正在检查事务
    ---> 软件包 iptables-services.x86_64.0.1.4.21-34.el7 将被 安装
    --> 解决依赖关系完成
    
    依赖关系解决
    
    ============================================================================================================================================
     Package                                 架构                         版本                                 源                          大小
    ============================================================================================================================================
    正在安装:
     iptables-services                       x86_64                       1.4.21-34.el7                        base                        52 k
    
    事务概要
    ============================================================================================================================================
    安装  1 软件包
    
    总下载量:52 k
    安装大小:23 k
    Downloading packages:
    警告:/var/cache/yum/x86_64/7/base/packages/iptables-services-1.4.21-34.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    iptables-services-1.4.21-34.el7.x86_64.rpm 的公钥尚未安装
    iptables-services-1.4.21-34.el7.x86_64.rpm                                                                           |  52 kB  00:00:00     
    从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
    导入 GPG key 0xF4A80EB5:
     用户ID     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
     指纹       : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
     软件包     : centos-release-7-8.2003.0.el7.centos.x86_64 (@anaconda)
     来自       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      正在安装    : iptables-services-1.4.21-34.el7.x86_64                                                                                  1/1 
      验证中      : iptables-services-1.4.21-34.el7.x86_64                                                                                  1/1 
    
    已安装:
      iptables-services.x86_64 0:1.4.21-34.el7                                                                                                  
    
    完毕!
    
    1. 设置开机自启动和启动iptables.service(此服务没有daemon在执行,会显示active(exited),只运行一次结束退出)
    $ systemctl enable iptables.service
    Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
    $ systemctl start iptables.service
    $ systemctl status iptables.service
    ● iptables.service - IPv4 firewall with iptables
       Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
       Active: active (exited) since 五 2020-05-29 22:13:36 CST; 8s ago
      Process: 74728 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
     Main PID: 74728 (code=exited, status=0/SUCCESS)
    
    5月 29 22:13:36 shell-host systemd[1]: Starting IPv4 firewall with iptables...
    5月 29 22:13:36 shell-host iptables.init[74728]: iptables: Applying firewall rules: [  确定  ]
    5月 29 22:13:36 shell-host systemd[1]: Started IPv4 firewall with iptables.
    
    1. 查看配置文件sudo cat /etc/sysconfig/iptables
    [clam@shell-host ~]$ sudo cat /etc/sysconfig/iptables
    [sudo] clam 的密码:
    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    

    五、一些iptables的命令操作

    #查看iptables现有规则  
    iptables -L -n  
    #先允许所有,不然有可能会杯具  
    iptables -P INPUT ACCEPT  
    #清空所有默认规则  
    iptables -F  
    #清空所有自定义规则  
    iptables -X  
    #所有计数器归0  
    iptables -Z  
    #允许来自于lo接口的数据包(本地访问)  
    iptables -A INPUT -i lo -j ACCEPT  
    #开放22端口  
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT  
    #开放21端口(FTP)  
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT  
    #开放80端口(HTTP)  
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT  
    #开放443端口(HTTPS)  
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT  
    #允许ping  
    iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT  
    #允许接受本机请求之后的返回数据 RELATED,是为FTP设置的  
    iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT  
    #其他入站一律丢弃  
    iptables -P INPUT DROP  
    #所有出站一律绿灯  
    iptables -P OUTPUT ACCEPT  
    #所有转发一律丢弃  
    iptables -P FORWARD DROP<span style="color:#000000;border:none;"><span style="color:#000000;border:none;">
    #保存上述规则  
    service iptables save 
    

    相关文章

      网友评论

          本文标题:CentOS 7 下使用iptables

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