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  ##查看策略

      

      

猜你喜欢

转载自www.cnblogs.com/wf-aiyouwei/p/9497226.html