服务端的防火墙需求,通常如下:
1、允许所有出站流量,
2、限制所有入站流量,
3、允许HTTP和HTTPS这类流量,
4、只允许从堡垒机登录服务器,
5、只允许从监控主机访问服务器的被监控端口,或只允许代理机访问一些内部服务,
6、如果有双机热备,可能还要允许VRRP通过,否则会发生脑裂。
防火墙大都是firewalld,而不再是iptables了。
下面我们看具体的firewalld配置
0、可能要清空之前的防火墙策略
rm -rf /etc/firewalld/zones
因为是可能,所以它是第0条。
0、启动firewalld
并设置默认区域(假设使用public
区域):
systemctl start firewalld
firewall-cmd --set-default-zone=public
通常有如下区域,这个区域类似于配置模版。
- public: (公共区域)一般默认为该区域,仅允许访问本机的sshd, dhcp, ping等服务
- trusted:(信任区域)允许任何访问
- block: (限制区域)阻塞任何来访请求
- drop:(丢弃区域)丢弃任何来访的数据包(不做出任何回应,直接丢弃) 能节省资源
不同的区域,可以作用在不同的网卡,如下:
firewall-cmd --permanent --zone=trusted --change-interface=eth0
firewall-cmd --permanent --zone=public --change-interface=eth1
firewall-cmd --reload
最简配置:除了启动firewalld,其他均可以不配置。
1、允许所有出站流量:
firewalld
默认情况下允许所有出站流量,所以你不需要做额外的设置。
2、限制所有入站流量:
设置默认入站规则为拒绝:
firewall-cmd --zone=public --set-target=DROP
3、允许HTTP和HTTPS流量:
使用以下命令允许HTTP和HTTPS流量通过:
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
4、 只允许从堡垒机登录服务器:
// 先移除默认开启的没有访问限制的ssh服务
firewall-cmd --permanent --remove-service=ssh
// 添加复杂规则,只允许指定IP段访问22端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
5、只允许从监控主机访问服务器的被监控端口,或只允许代理机访问一些内部服务
//zabbix监控
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="10051" accept'
//mysql
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
//redis
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
//mongodb
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept'
6、.开启VRRP协议:
主备机都运行下面的命令
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface em1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
7、 重新加载防火墙以应用更改:
firewall-cmd --reload