防火墙-firewalld
转载:
一.简介
firewalld是centos7系统默认的防火墙,和iptables一样,是使用系统中netfilter内核模块的管理工具。
和iptables不一样的点
firewalld 使用区域和服务而不是链式规则。
它动态管理规则集,允许更新规则而不破坏现有会话和连接。
优点:
支持动态的配置规则
有多个预设的区域,可以在不同环境下,简单方便的变更规则
对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf中配置的默认zone 优先级最低
firewalld有的区域(zone)
block(拒绝)
dmz(非军事化)
drop(丢弃)
external(外部)
home(家庭)
internal(内部)
public(公开)
trusted(信任)
work(工作区)
文件:
/etc/firewalld/zones #用户自己定义的
/usr/lib/firewalld #系统配置文件,预定义配置文件
状态
target:目标 icmp-block-inversion:icmp协议类型黑白名单开关(yes/no) interfaces:关联的网卡接口 sources:来源,可以是ip地址,也可以是mac地址 services:允许的服务 ports:允许的目标端口,即本地开放的端口 protocols:允许通过的协议 masquerade:是否允许伪装(yes/no),可改写来源ip地址及mac地址 forward-ports:允许转发的端口 source-ports:允许的来源端口 icmp-blocks:可添加icmp类型,当icmp-block-inversion为no时,这些icmp类型被拒绝;当icmp-block-inversion为yes时,这些icmp类型被允许。 rich rules:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。
二.操作命令
启动systemctl start firewalld
查看状态systemctl status firewalld
/ firewall-cmd --state
停止systemctl stop firewalld
禁用systemctl disable firewalld
三.使用命令
firewall的状态
查看防火墙的状态--state
重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置--reload
重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)--complete-reload
紧急模式,强制关闭所有网络连接,–panic-off是关闭紧急模式--panic-on
配置集
使用firewall-cmd添加的操作,重启会失效
添加–permanent可以写到配置文件里,永久生效firewall-cmd --zone=public --add-service=http
区域
可以将配置写到不同与其中,例如public区域允许22端口,而external则允许80端口访问。这样登陆机器开启public,而提供服务的机器开启external。
查看支持的所有icmp类型--get-icmptypes
查看所有区域--get-zones
查看当前的默认区域--get-default-zone
更改默认的区域--set-default-zone=work
查看当前正在使用的区域--get-active-zones
查看当前区域支持的服务--get-services
查看当前区域开放的服务列表--list-services
查看此区域内的所有配置,类似与iptables -l -n--zone=public --list-all
查看所有区域配置--list-all-zones
限制规则
add添加 remove删除/禁用
将网络接口添加到默认的区域内--add-interface=eth0
将网络接口在默认的区域内删除--remove-interface=eth0
添加端口到区域开放列表中--add-port=12222/tcp
将端口范围添加到开放列表中--add-port=5000-10000/tcp
添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表中的名称一致)--add-service=ftp
区域内将http服务删除在开放列表中删除--remove-service=ftp
添加源地址的流量到指定区域--add-source=192.168.1.1
删除源地址的流量到指定区域--remove-source=192.168.1.1
改变指定的接口到其他区域--change-interface=eth1
确定该网卡接口是否存在于此区域--query-interface=eth1
开启snat(源地址转换)--add-masquerade
查询snat的状态--query-masquerade
开启snat(源地址转换)--add-masquerade
端口转发,本地513到其他机器的22端口,要开启masquerade--add-forward-port=port=513:proto=tcp:toport=22:toaddr=192.168.100.101
四.例子
服务与端口
在public中添加一个允许访问http服务firewall-cmd --zone=public --add-service=http
在public中拒绝访问http服务firewall-cmd --zone=public --remove-service=http
允许访问12345端口的tcp流量firewall-cmd --zone=public --add-port=12345/tcp
拒绝访问12345端口的tcp流量firewall-cmd --zone=public --remove-port=12345/tcp
转发
将本地80端口的流量转发到本地12345端口上firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345
转发到另一台服务器上需要的区域中激活 masquerade。firewall-cmd --zone=public --add-masquerade
将本地80端口转发到123.456.78.9的8080上firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9
将add变成remove就是去除这条firewall-cmd --zone="public" --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9
五.丰富规则
列出你目前的丰富规则firewall-cmd --list-rich-rules
允许192.168.0.14的所有ipv4流量firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
拒绝192.168.1.10的ipv4访问22端口firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
允许10.1.0.3的ipv4访问80端口的tcp,并把流量转发到6532上firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'
六.实际操作
跳板机
跳板机通常只开放22端口,其它关闭,并且只允许某ip连接,其它需要拨vpn
选择public做默认区域firewall-cmd --set-default-zone=public
允许指定ip访问固定端口firewall-cmd --add-rich-rule="rule family="ipv4" source address=10.10.10.140 port protocol="tcp" port="22" accept"
对外服务机器
允许所有访问80端口firewall-cmd --add-port=80/tcp
允许固定ip访问所有端口firewall-cmd --add-rich-rule 'rule family="ipv4" source address=10.10.10.140 accept'
允许跳板机ip访问22端口firewall-cmd --add-rich-rule="rule family="ipv4" source address=10.10.10.140 port protocol="tcp" port="22" accept"
内部应用服务器
允许所有端口访问firewall-cmd --add-port=1-65535/tcp
firewall-cmd --add-port=1-65535/udp