Firewalld
一、firewalld的基本使用
- firewalld中没有表、没有链,但是有区域
启动:systemctl start firewalld
查看状态:systemctl status firewalld
停止:systemctl disables firewalld
禁用:systemctl stop firewalld
重启:systemctl restart firewalld
二、区域
-
==drop: 丢弃==
任何转入网络数据包都会丢弃,没有回复。只能进行网络连接。
-
block: 阻止
任何传入的网络连接都会被拒绝,其中包含用于IPV4的icmp-host-prohibited消息和用于IPV6的icmp6-adm-prohibited。只能从系统内启动网络连接。
-
==pubic:公共(默认)==
用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
-
eaxternal: 外部网络
用于特别为罗预期启用伪装的外部网络。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
-
dmz: 管制区
适用于非军事区的计算机,这些计算机可公开访问,并且对内部网络的访问权限有限。仅接受选定的传入连接
-
work: 工作
用于工作区域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接
-
internal:内部
用于内部网络。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。 -
home:家庭
适用于家庭领域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。 -
==trusted:受信任==
接受所有网络连接。
可以将这些区域中的一个指定为more区域,将接口连接添加NetwoekManager时,会将它们分配给默认区域。安装时,firewalld中的默认区域将设置为公共区域。
在不同的区域下,可以设置不同的防火墙策略,以便在需要的时候可以实现快速切换,而不是重新开始配置。对于一套服务器环境来说,通常情况下,没有那么多需要切换。drop、public、其他
三、常用使用场景
拒绝所有包: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 -add-service ftp
开放mysql服务:firewakk-cmd -add-service=mysql
阻止http端口:firewall-cmd -remove-service=http
查看开放的服务:firewall-cmd --list-services
查看对应规则文件:cd /ysr/lib/firewalld/services
开放通过tcp访问3306:firewall-cmd --add-port=3306/tcp
阻止通过tcp访问3306:firewall-cmd --remove-port=80tcp
永久开放80端口:firewall-cmd --zone=public --list-ports
删除postgreql服务:firewall-cmd --add-service=postgreql --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
检查设定是否生效:iptables -L -n | grep 21或firewall-cmd --list-all
四、富规则
添加指定IP访问特定端口规则:
firewall-cmd --permanent --add-rich-ryle 'rule family="ipv4" source address="192.168.112.1" port port="80" protocol=tcp accept'
删除指定某个IP访问特定端口规则:
firewall-cmd --permanent --remove-rich-ryle 'rule family="ipv4" source address="192.168.112.1" port port="80" protocol=tcp accept'
禁止某个IP访问:
iptables -I INPUT -s 138.138.138.138 -j DROP
firewall -cmd --add-rich-rule='rule family="ipv4" source address="129.168" drop'
允许ping:
firewall-cmd --add-rich-rule='rule family="ipv4"protocol calue="icmp" source adderess="192.168.112.1" accept'
于iptables一致:富规则中的动作可以设置为accept、drop、reject(注意是小写)
端口转发:
iptables -t nat -A PREPOUTING -p tcp --dport 80 -j REIRECT --to-port 8080
接收192.168.112.0网段所有IP访问SSH服务:
firewall-cmd --add-rich-rule='rule familly="ipv4" source address="192.168.112.0/24" srevice name=ssh acceprr'
直接模式:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.112.1 -j ACCEPT
注意:INPUT后面的数字1表示优先级,数字越小,优先级越高
查看直接模式下的规则:firewall-cmd --direct --get-all-rules
删除直接模式下的规则:firewall-cmd --diresct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.112.1 -j ACCEPT
五、端口转发
- 端口转发可以将指定地址访问指定的端口时,将流量转发到指定地址的指定的端口。转发的目的弱国不指定IP的话就默认为本机,如果指定了IP却没有指定端口,则默认使用来源端口。
- 如果配置好端口转发之后不能用,可以检查以下两个问题:
- 比如将80端口转发至9090端口,首先检查本地的80端口和目标8080端口是否开放监听
- 其次检查是否允许伪装IP,没允许的话要开启伪装IP
将8888端口的流量转发至80
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
firewall-cmd --remoce-forward=port=port=8888:proto=tcp:toport=80
开启伪装IP
firewall-cmd -query-masqyerade:检查是否允许伪装IP
firewall-cmd --add-masqyerade:允许防火墙伪装IP
firwall-cmd --remove-masqyerade:禁止防火墙伪装IP
将8888端口的流量转发至101.37.65.91的80端口
firewall-cmd -add-forward-port=proto=tcp:toaddr=101.37.65.91:toport=80
- 当我们想把某个端口隐藏起来的时候,就可以在防火墙阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
- 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
在Linux中,通常配置文件是在/etc/目录下,日志信息都保存在/var/log目录下。