firewall
CentOS 7中防火墙已经由firewalld来管理,Centos7默认安装了firewalld。
与iptables区别
- iptables 仅能通过命令行进行配置;而 firewalld 提供了图形接口,类似windows防火墙的操作方式;
- iptables 每一个单独更改意味着清除所有旧的规则,并从 /etc/sysconfig/iptables 中读取所有新的规;则;而 firewalld 在有规则变动后,可以仅仅运行规则中的不同之处,即在 firewalld 运行时间内,改变设置时可以不丢失现行链接;
- iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件中;
- iptables 没有守护进程,并不能算是真正意义上的服务;而 firewalld 有守护进程;
- iptables 通过控制端口来控制服务,而 firewalld 则是通过控制协议来控制端口;
- firewalld默认是拒绝;而iptables默认是允许。
firewall 服务
shell
# 查看服务状态
service firewalld status
systemctl status firewalld
firewall-cmd --state
# 启动
service firewalld start
systemctl start firewalld
# 重启
service firewalld restart
systemctl start firewalld
# 关闭
service firewalld stop
# 重新加载
firewall-cmd --reload # 每次修改规则、配置后,需要重新加载使其生效!
开机启动
shell
# 设置开机启动
systemctl enable firewalld
# 停止并禁用开机启动
systemctl disable firewalld
firewalld区域与配置规则
宽松模式::trusted ,单独拒绝的源ip地址写入block,适合于拒绝的少,允许的多的应用场景 :
严格模式: block,单独允许的源IP地址写入trusted,适合于允许的少,拒绝的多的应用场景;
shell
# 默认为 public
-public: 仅允许访问本机的sshd,dhcp,ping少数几个服务
-trusted: 允许任何访问
-block: 阻塞任何来访请求(明确拒绝)
-drop: 丢弃任何来访的数据包(直接丢弃,不给客户端回应,节省资源)
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,都保存在**/usr/lib/firewalld/zones/**目录下。
查看默认区域
shell
firewall-cmd --get-default-zone #默认就是public
修改默认区域
shell
# 修改默认区域为: trusted 区域
firewall-cmd --set-default-zone=trusted
在一个区域添加协议
shell
# 查看区域public里面的所有配置,ping服务没有列出来
firewall-cmd --zone=public --list-all
# runtime,添加http到public区域中,可以正常访问http了
firewall-cmd --zone=public --add-service=http
# runtime,添加ftp到public区域中,可以正常访问ftp了
firewall-cmd --zone=public --add-service=ftp
# 永久添加,写到了相当的配置文件中了
firewall-cmd --zone=public --add-service=http --permanent
# 从public中永久的移除dhcpv6-client服务
firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent
拒绝源IP
1个源IP只能在1个区域中,在block区域中,就不能在trusted区域中了
shell
# firewall-cmd --zone=block --add-source=10.10.67.40 --permanent
firewall-cmd 规则配置
查看规则
shell
firewall-cmd --list-all
prots :所开放、暴漏的端口(包括ipv4、ipv6)
rich rules:自定义防火墙规则,灵活运用,非常的实用(可限制ipv4、ipv6、源地址等)
端口策略
shell
# 查看端口列表
firewall-cmd --permanent --list-port
# 查看所有已开端口
firewall-cmd --list-ports
# 查询8080端口是否开放
firewall-cmd --query-port=8080/tcp
shell
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 开放3306端口(--permanent:永久生效,没有此参数防火墙重启便失效)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 关闭开放的3306端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
firwall-cmd :是Linux提供的操作firewall的一个工具;
permanent :表示设置为持久;
add-port:标识添加的端口;
ipv4、ipv6双协议区分限制
shell
# ipv4
# 默认是public域
# 添加端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="3306" accept'
# 删除端口
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" port protocol="tcp" port="3306" accept'
# ipv6
# 添加端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv6" port protocol="tcp" port="3306" accept'
# 删除端口
firewall-cmd --permanent --remove-rich-rule='rule family="ipv6" port protocol="tcp" port="3306" accept'
# 查看已经设置的规则
firewall-cmd --zone=public --list-rich-rules
对ip段开放所有端口
shell
# 添加
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.127.0/24" accept'
# 删除
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.127.0/24" accept'
firewall-cmd --reload
限制访问源、访问端口
shell
# 限制具体ip
# 添加
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.21.4" port protocol="tcp" port="3005-3007" accept"
# 删除
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.21.4" port protocol="tcp" port="3005-3007" accept"
# 限制ip段
# 添加
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.254.0.0/16" accept'
# 删除
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="10.254.0.0/16" accept'
信任docker、tunl0和calico卡(k8s常用)
shell
# 需要注意的是如果使用了多个域例如trusted、public,加规则时需要加声明参数,否则会有提示
# 例如:--zone=public
firewall-cmd --permanent --zone=trusted --change-interface=docker0
firewall-cmd --permanent --zone=trusted --change-interface=tunl0
firewall-cmd --permanent --zone=trusted --change-interface=calixxx
firewall-cmd --reload
# 查看信任网卡
firewall-cmd --zone=trusted --list-interfaces
实现本机的端口映射
本地应用的端口重定向(8080-->80),应用场景:从客户机访问 8080 的请求,自动映射到本机 80
shell
# 8080映射到80
firewall-cmd --permanent --zone=public --add-forward-port=port=8080:proto=tcp:toport=80
firewall-cmd --reload
清空所有规则
shell
# root执行
firewall-cmd --permanent --list-all | grep ports | head -n 1 | \
cut -d: -f2 | tr ' ' '\n' | xargs -I {} firewall-cmd --permanent --remove-port={}
firewall-cmd --reload