zoukankan      html  css  js  c++  java
  • Linux从入门到精通——firewalld和iptables

    ####firewalld和iptables###

       防火墙是内核上的一个插件

       火墙有两种:firewalld 和 iptables
       都通过iptables往内核写入数据
          

    一.firewalld

       firewall域:
       trusted home internal work public external dmz block drop
          

    1.关于iptables

       yum install iptables
       systemctl stop firewalld       ##关闭火墙
       systemctl mask firewalld.service    ##冻结火墙

       iptables -nL               ##查看服务情况,显示策略
       Chain INPUT (policy ACCEPT)
       target     prot opt source               destination        
       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        


    2.火墙的使用

       systemctl stop iptables.service        ##关闭iptables
       systemctl mask iptables.service           ##冻结iptables
       systemctl unmask firewalld.service      ##解冻firewalld   
       systemctl start firewalld.service           ##开启firewalld
          

       cmd命令:
       firewall-cmd --state           ##查看火墙运行状态
       firewall-cmd --get-active-zones     ##查看正在使用的区域
       firewall-cmd --get-default-zone     ##查看当前默认区域
       firewall-cmd --get-zones       ##查看所有可使用区域
       firewall-cmd --zone=public --list-all   ##查看public域的允许的服务和开启的端口以及地址伪装功能的状态,和一些策略
       firewall-cmd --get-services     ##查看所有能设定的服务
       firewall-cmd --list-all-zones      ##查看所有区域的所有服务和端口
       firewall-cmd --set-default-zone=dmz     ##设定当前默认区域为非军事区
          

          

          

          

    指定区域针对网段和设备进行操作:
       firewall-cmd --permanent --zone=internal --add-source=172.25.254.110    ##指定110的默认域为internal,并永久保存
       firewall-cmd --permanent --zone=internal --remove-source=172.25.254.110    ##将指定的110的域删除
       firewall-cmd --permanent --zone=internal --add-internal=eth0
            ##指定eth0这个端口的域为internal
       firewall-cmd --permanent --zone=internal --change-public=eth0
            ##更改eth0这个端口的域为public
       firewall-cmd --permanent --zone=internal --remove-interface=eth0
            ##删除eth0这个端口的域
          

          

    指定区域针对服务和端口域进行操作:
       firewall-cmd --permanent --zone=public --add-service=http
            ##在publlic域中永久设定添加http服务
       firewall-cmd --permanent --zone=public --remove-service=http
       firewall-cmd --zone=public --list-ports        
            ##列出public所有端口  
       firewall-cmd --permanent --zone=public --add-port=8080/tcp
       firewall-cmd --permanent --zone=public --remove-port=8080/tcp
          

       注意:加--permanent参数的要使设定生效需要重新加载火墙
       firewall-cmd --reload


       /etc/firewalld/zones
       可以在该目录中修改对应区域名.xml文件,来添加或删除服务,编辑完后要重启服务或重加载

       /lib/firewalld/services
       现在默认的firewalld域,系统会将etc下的默认域的文件,移动到lib下执行

       想要更改或添加服务要在etc下的文件里面改,这个是永久的;用命令添加的是暂时的,想要永久要加 --permanent,并且重启服务

       firewall-cmd --reload  ##重新加载,但是如果有程序正在运行,也不会阻止程序运行
       firewall-cmd --complete-reload  ##比较强制重新加载,但是如果有程序正在运行,就会立即阻止程序运行

    3.directory rules

       通过firewall-cmd工具,可以使用--direct选项在运行时间里增加或者移除链。
             三表五链
    访问本机的数据,经过内核的数据filter
    不经过本机内核的东西,数据转换nat
    包含所有数据(前两个所有数据)等到前两个表格不够用的时候才使用mangle

       firewall-cmd --direct --get-all-rules  ##获取全部的链
       firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT  ##添加一条链在filter的INPUT的下面,设定源110访问22端口时是允许的
       firewall-cmd --direct --add-rule ipv4 filter INPUT 2 ! -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT    ##添加一条链在filter的INPUT的下面,设定除了源110以外的所有源访问22端口时是允许的
       firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT
       firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 !  -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT
          

           

    4.icmp-block

    用这个命令阻绝一个或者多个ICMP类型。ICMP类型是firewalld支持的ICMP类型之一。比如 ping 172.25.254.110 就是用的ICMP

       firewall-cmd --get-icmptypes   ##查看icmp含有的命令
       firewall-cmd --add-icmp-block=destination-unreachale  ##ping不通该主机的ip
       firewall-cmd --add-icmp-block=echo-request  ##ping不了
       firewall-cmd --add-icmp-block=echo-request --timeout=5   ##刚开始ping不通,5秒以后就能ping通

    5.地址伪装与源地址转换

       firewall-cmd --add-masquerade      ##开启地址伪装功能
          

      firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.10    ##所有通过22端口访问110主机,都会被转到10这个主机上面
          

          

       firewall-cmd --add-rich-rule="rule family=ipv4 source address=172.25.254.100 masquerade"    ##ip隐藏,比如说就是我的ip是10,我通过110这个主机的去连接100这台主机,在100这台主机上用 w -i 命令查看到的ip是110的,而不是10的
          

    6.路由器功能 masquerade

        两个在不同网络区域内的电脑,比如192想要ping通172这个网段的,需要通过一个路由器做一次地址转换

    测试前:
    (1)用desktop当作路由器
    要开通地址伪装功能,还需i要两块虚拟网卡,设定两个虚拟网卡的ip,一个为192的,另一个为172的。
    (2)用server当作测试主机
    修改server的ip为192的,并修改网关为192的
    systemctl restart network
    route -n   ##查看网关是否添加成功

    测试:
    (1)用server刚开始的时候ping 172是ping不通的
    (2)在desktop里面
       firewall-cmd --permanent --add-masquerade  ##开启地址伪装功能
       sysctl -a | grep forward  ##查看一些功能是否开启
       vim /etc/sysctl.conf
        net.ipv4.ip_forward = 1
       sysctl -p
        net.ipv4.ip_forward = 1
       firewall-cmd --reload
          

    二.iptables

    1.iptables的启用
       systemctl stop firewalld
       systemctl mask firewalld   ##冻结firewalld
       systemctl start iptables   ##如果显示冻结,用unmask先打开
       systemctl unmask iptables  
       systemctl start iptables  
          

    2.iptables的应用
       iptables -nL        ##查看所有表的情况
       iptables -t nat -nL ##查看nat表的情况
       iptables -F             ##刷新策略(仅清空链中规则)
       iptables -N redhat      ##添加自定义链名
       iptables -D redhat      ##删除自定义链下的策略
       iptables -X redhat      ##删除自定义链
       iptables -E rehdat      ##修改名称
       iptables --state        ##查看状态
       iptables -i lo          ##设置端口进来
       iptables -o eth0        ##设置从网络接口eth0出去
       iptables -s             ##source 来源
       iptables -A             ##增加
       iptables -I             ##插入 某一链表的第几行
       iptables -R             ##替换
       iptables -P             ##修改默认

           

    3.重新写入策略(数据优化)

    (1)清空原有策略,并添加新的策略并保存
       vim /etc/sysconfig/iptables  ##策略存放的路径
       iptables -F    ##(清空)刷新原有的策略
       cat /etc/sysconfig/iptables   ##查看后发现,原有策略被清空
          

           

    (2)加入新的策略
       iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
       iptables -A INPUT -m state --state new -p tcp --dport 22 -j ACCEPT
       iptables -A INPUT -m state --state new -p tcp --dport 80 -j ACCEPT
       iptables -A INPUT -m state --state new -p tcp --dport 53 -j ACCEPT
       iptables -nL    ##查看新添加的策略
       service iptables save  ##保存添加的策略
       iptables -nL    ##新策略添加成功
       cat /etc/sysconfig/iptables  ##查看策略

          

          

  • 相关阅读:
    Spark学习笔记2(spark所需环境配置
    Spark学习笔记1(初始spark
    zookeeper基本讲解及基本命令和配置 (转)
    计算机网络面试常考(转载)
    C++面试笔试题汇总
    复杂指针解析
    如何限制一个类对象只在栈(堆)上分配空间?
    虚函数实现机制
    C++内存分配方式详解
    C++中指针和引用的区别(转载)
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9497226.html
Copyright © 2011-2022 走看看