linux防火墙firewalld和iptables的区别和用法

Linux中有两种防火墙软件,ConterOS7.0以上使用的是firewall,ConterOS7.0以下使用的是iptables,本文将分别介绍两种防火墙软件的使用。

一、firewalld
1、firewalld的基本使用

启动: systemctl start firewalld

查看状态: systemctl status firewalld 

停止: systemctl disable firewalld

禁用: systemctl stop firewalld


2、配置firewalld-cmd

查看版本: firewall-cmd --version

查看帮助: firewall-cmd --help

显示状态: firewall-cmd --state

查看所有打开的端口: firewall-cmd --zone=public --list-ports 或 firewall-cmd --list-ports

查看所有打开的服务: firewall-cmd --zone=public --list-services 或 firewall-cmd --list-services

更新防火墙规则: firewall-cmd --reload

查看区域信息:  firewall-cmd --get-active-zones

查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态: firewall-cmd --panic-off

查看是否拒绝: firewall-cmd --query-panic 

3、那怎么开启一个端口呢添加

firewall-cmd  --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)

重新载入

firewall-cmd --reload

查看

firewall-cmd --zone=public --query-port=80/tcp

删除

firewall-cmd  --zone=public --remove-port=80/tcp --permanent

二、iptables

由于CenterOS7.0以上版本并没有预装Iptables,我们需要自行安装。

[root@xxxx]# service iptables status

Redirecting to /bin/systemctl status iptables.service

Unit iptables.service could not be found.

1、查看

iptables -nvL --line-number

-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数

-n 不对ip地址进行反查,加上这个参数显示速度会快很多

-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口

--line-number 显示规则的序列号,这个参数在删除或修改规则时会用到

2、添加

添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。

当前规则:

[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT) num target prot opt source destination

1 DROP all -- 192.168.1.1 0.0.0.0/0

2 DROP all -- 192.168.1.2 0.0.0.0/0

3 DROP all -- 192.168.1.4 0.0.0.0/0

添加一条规则到尾部:

[root@test ~]# iptables -A INPUT -s 192.168.1.5 -j DROP

再插入一条规则到第三行,将行数直接写到规则链的后面:

[root@test ~]# iptables -I INPUT 3 -s 192.168.1.3 -j DROP

查看:

[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT) num target prot opt source destination

1 DROP all -- 192.168.1.1 0.0.0.0/0

2 DROP all -- 192.168.1.2 0.0.0.0/0

3 DROP all -- 192.168.1.3 0.0.0.0/0

4 DROP all -- 192.168.1.4 0.0.0.0/0

5 DROP all -- 192.168.1.5 0.0.0.0/0

可以看到192.168.1.3插入到第三行,而原来的第三行192.168.1.4变成了第四行。

3、删除

删除用-D参数

删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):

[root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP

有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则。

[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT) num target prot opt source destination

1 DROP all -- 192.168.1.1 0.0.0.0/0

2 DROP all -- 192.168.1.2 0.0.0.0/0

3 DROP all -- 192.168.1.3 0.0.0.0/0

删除第二行规则

[root@test ~]# iptables -D INPUT 2

4、修改

修改使用-R参数

先看下当前规则:

[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT) num target prot opt source destination

1 DROP all -- 192.168.1.1 0.0.0.0/0

2 DROP all -- 192.168.1.2 0.0.0.0/0

3 DROP all -- 192.168.1.5 0.0.0.0/0

将第三条规则改为ACCEPT:

[root@test ~]# iptables -R INPUT 3 -j ACCEPT

再查看下:

[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT) num target prot opt source destination

1 DROP all -- 192.168.1.1 0.0.0.0/0

2 DROP all -- 192.168.1.2 0.0.0.0/0

3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

第三条规则的target已改为ACCEPT。

三、firewalld 与 iptables的比较
1,firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;
2,firewalld使用区域和服务而不是链式规则;
3,firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制;
4,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。也就是说,firewalld和iptables一样,它们的作用都用于维护规则,而真正使用规则干活的是内核的netfilter。只不过firewalld和iptables的结果以及使用方法不一样!

firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。它并不是iptables的替代品,虽然iptables命令仍可用于firewalld,但建议firewalld时仅使用firewalld命令。

使用方式区别:

iptables要给http服务添加80端口允许规则,需要在/etc/sysconfig/iptables中添加如下内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

然后systemctl stop iptables

systemctl restart iptables

systemctl enable iptables

firewalld实现同样的功能,可以用下面2种方式:

1.直接添加服务

firewall-cmd --permanent --zone=public --add-service=http

firewall-cmd --reload

2.添加端口

firewall-cmd --permanent --zone=public --add-port=80/tcp

firewall-cmd --reload

当然,firewalld.service需要设为开机自启动。

参考链接:

https://blog.csdn.net/lishuan182/article/details/111581728

http://bcxw.net/article/45.html

https://www.cnblogs.com/makeinchina/p/8032899.html


linux防火墙firewalld和iptables的区别和用法
http://localhost:8090/archives/BHLrvWpL
作者
好瞌睡啊
发布于
2021年11月28日
许可协议