Linux防火墙是通过netfilter来处理的,它是内核级别的框架。iptables被作为netfilter的用户态抽象层,iptables将包通过一系列的规则进行检查,如果包与特定的IP/端口/协议的组合匹配,规则就会被应用到这个包上,以决定包是被通过、拒绝或丢弃。firewalld是最新的netfilter用户态抽象层。firewalld可以通过定义的源IP和/或网络接口将入站流量分类到不同区域zone。每个区域基于指定的准则按自己配置去通过或拒绝包。另外的改进是基于iptables进行语法简化。firewalld通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用,例如,是使用samba而不是使用UDP端口137和138和TCP端口139和445。它进一步简化语法,消除了iptables中对语句顺序的依赖。
1、常用的两张表:filter、nat,filter用于过滤数据包,nat用于路由转发功能
2、常用的两条链:INPUT、OUTPUT
3、常见的三个行为:ACCEPT、DROP、REJECT
4、限制流量的三个特征:端口、协议、IP,对应的五元组: -d -s --dport --sport -p
5、端口转发:本机端口、远程端口
启动: systemctl start firewa11d
查看状态:systemctl status firewal1d
停止:systemct1 disable firewa11d
禁用:systemct1 stop firewa1ld
重启:systemct1 restart firewalld
drop:丢弃
任何传入的网络数据包都被丢弃,没有回复。只能进行传出网络连接。
b1ock:阻止
任何传入的网络连接被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接。
public:公共(默认)
用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
external :外部网络
用于特别为路由器启用伪装的外部网络。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
dmz:管制区
适用于非军事区中的计算机,这些计算机可公开访问,并且对内部网络的访问权限有限。仅接受选定的传入连接。
work:工作
用于工作区域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
home:家庭
适用于家庭领域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
internal:内部
用于内部网络。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
trusted:受信任
接受所有网络连接。
可以将这些区域中的一个指定为默认区域。将接口连接添加到NetworkManager时,会将它们分配给默i认区域。安装时,firewa1ld中的认区域将设置为公共区域。
运行firewall-cmd --list-all
查看基础配置信息:
public (default,active):表示 public 区域是默认区域(当接口启动时会自动默认),并且它是活动的。
interfaces: ens 33 列出了这个区域上关联的接口。
sources :列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们应该是这样的格式XXX.XXX.XXX.XXX/XX
services: dhcpv6-client ssh列出了允许通过这个防火墙的服务。可以通过运行 firewall-cmd --get-services得到一个防火墙预定义服务的详细列表。
ports:列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewalld 中定义的服务的情况下。masquerade: no 表示这个区域是否允许IР 伪装。如果允许,它将允许IP转发,它可以让你的计算机作为一个路由器。
forward-ports:列出转发的端口。
icmp-blocks:阻塞的 icmp流量的黑名单。rich rules:在一个区域中优先处理的高级配置。
default:是目标区域,它决定了与该区域[匹配而没有由上面设置中显式处理的包的动作。
运行以下命令理解firewall规则用法:
查看所有打开的端口:firewall-cmd --zone=public --list-port
更新防火墙规则:firewall-cmd --reload
列出所有区域: firewall-cmd --get-zones
查看区域信息:firewall-cmd --get-active-zones
设定默认区域,立即生效:firewall-cmd --set-default-zone=public
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=ens33
查看所有规则: firewall-cmd --list-a11
通过以下两种手段可以进行永久修改:
firewall-cmd --permanent <some modification>
firewall-cmd --reload
如果这篇文章对你帮助很大,麻烦帮忙,点下友情链接: 鱼儿项目网(直接点这里),进去之后切换几个页面,停留几十秒。感激不尽。本站采集全网自媒体,网赚类,电商营销课程。里面有一些免费项目大家也可以看看
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
暂时开放 ftp 服务:firewall-cmd --add-service=ftp
永久开放 ftp 服务:firewall-cmd --add-service=ftp --permanent
查询服务的启用状态:firewall-cmd --query-service ftp
开放mysql端口:firewall-cmd --add-service=mysq1
阻止http端口:firewall-cmd --remove-service=http
查看开放的服务:firewall-cmd --list-services
查看对应规则库文件:cd /usr/lib/firewalld/services
开放通过tcp访问3306:firewall-cmd --add-port=3306/tcp
阻止通过tcp访问3306: firewall-cmd --remove-port=80/tcp
永久开放80端口:firewall-cmd --zone=public --add-port=80/tcp permanent
查看80端口:firewall-cmd --zone=public --query-port=80/tcp
查看所有开放端口: firewall-cmd --zone=public --list-ports
删除80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
开放postgresql服务:firewall-cmd --add-service=postgresql --permanent
允许http服务通过1分钟: firewall-cmd --zone=public --add-service=http --timeout=1m,这个timeout 选项是一个以秒(s)、分(m)或小时(h)为单位的时间值。
重载防火墙:firewall-cmd --reload
检查防火墙状态:firewall-cmd --state
让设定生效:systemctl restart firewalld
检查设定是否生效: iptab1es -L -n | grep 21或 firewall-cmd --list-al1
添加指定ip访问特定端口规则:
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.112.1 port port=80
protocol=tcp accept'
删除指定某个ip访问特定端口规则:
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.112.1" port protoco1="tcp" port="80" accept"
禁止某个ip访问:
iptables -I INPUT -s 138.138.138.138 -j DROP
firewall -cmd --add-rich-rule='rule family=ipv4 source address="192.168.112.1" drop'
允许Ping:
firewall-cmd --add-rich-rule='rule family="ipv4" protocol value="icmp" source address="192.168.112.1" accept'
与iptables一致:富规则中的动作可以设置为:accept,drop,reject(注意是小写)
端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
接受192.168.112.0网段所有IP访问sSH服务:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.112.0/24" service name=sshaccept '
直接模式:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.112.1 -j ACCEPT
注意:INPUT后面的数字1代表规则的优先级,数字越小,优先级越高,建议优先级从1开始。
查看直接模式下的规则:firewall-cmd --direct --get-al1-rules
删除直接模式下的规则: firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s192.168.112.1 -j ACCEPT
端口转发可以将指定地址访问指定的端口时,将流星转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。
如果配置好端口转发之后不能用,可以检查下面两个问题:
#将8888端口的流量转发至80
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8888 :proto=tcp:toport=80
#开启伪装IP
firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade #允许防火墙伪装IP
firewall-cmd --remove-masquerade#禁止防火墙伪装IP
#将8888端口的流量转发至101.37.65.91的80端口
firewall-cmd --add-forward-port=port=8888:proto=tcp:toaddr=101.37.65.91:toport=80
1、检查IP tables处于关闭状态,firewalld处于开启状态
[root@numberone ~]# systemctl status iptables
[root@numberone ~]# systemctl status firewalld
2、[root@numberone ~]# firewall-cmd --list-all
现在活动区域是public
物理机去ping该虚拟机的IP地址,可以ping得通
[root@numberone ~]# /opt/lampp/lampp start
开启服务。
物理机去访问192.168.88.131,默认情况下80端口是不能访问的。因为防火墙没有没有开启80端口。
3、设置默认区域:[root@numberone ~]# firewall-cmd --set-default-zone=trusted
。之后就发现可以访问80端口了。这是一个全开放的区域
4、设置默认区域为drop:[root@numberone ~]# firewall-cmd --set-default-zone=drop
发现不仅ping不通,也访问不了80端口
5、设置默认区域为block:[root@numberone ~]# firewall-cmd --set-default-zone=block
物理机ping服务器,是服务器发信息回来了,告诉物理机不能访问自己。
6、切换回public区域
添加80端口:[root@numberone ~]# firewall-cmd --add-port=80/tcp
物理机可以访问网页了:
再删掉80端口:[root@numberone ~]# firewall-cmd --remove-port=80/tcp
再添加http服务:[root@numberone ~]# firewall-cmd --add-service=http
物理机可以也访问网页了:
IP tables也可以看到相关信息:[root@numberone ~]# iptables -nL|grep 80
7、不知道可以添加什么服务时,可以查看:[root@numberone ~]# firewall-cmd --get-service
8、重启防火墙,发现之前配置的东西全部重置了:[root@numberone ~]# firewall-cmd --get-service
9、想永久配置东西,就得在命令后面添加个小单词,是永久的意思:[root@numberone ~]# firewall-cmd --add-service=http --permanent
之后要重新加载配置文件:[root@numberone ~]# firewall-cmd --reload
10、查看现在开启的端口:[root@numberone ~]# firewall-cmd --list-port
查看现在活跃的区域:[root@numberone ~]# firewall-cmd --get-active-zone
查看有哪些区域:[root@numberone ~]# firewall-cmd --get-zones
11、拒绝所有包:[root@numberone ~]# firewall-cmd --panic-on
Xshell已经连接不上了:
回虚拟机取消拒绝状态,Xshell才自动重新连接:firewall-cmd --panic-off