Linux(21)——防火墙
1. 防火墙安装及切换
- firewalld
rhel8中默认使用的是firewalld
安装:
[root@rhclient Desktop]# dnf install iptables-services -y
从iptables切换至firewalld:
[root@rhclient Desktop]# systemctl stop iptables
[root@rhclient Desktop]# systemctl disable iptables
[root@rhclient Desktop]# systemctl mask iptables
[root@rhclient Desktop]# systemctl enable --now firewalld
- iptables
安装:
[root@rhclient Desktop]# dnf install iptables-services -y
从firewalld切换至firewalldiptables:
[root@rhclient Desktop]# systemctl stop firewalld
[root@rhclient Desktop]# systemctl disable firewalld
[root@rhclient Desktop]# systemctl mask firewalld
[root@rhclient Desktop]# systemctl enable --now iptables
-
chain
input #输入 output #输出 forward #内核转发 postrouting #路由之后 prerouting #路由之前
-
tables
filter #使用内核转发(input output forward) nat #不经过内核的数据(postrouting,prerouting,input,output) mangle #当filter和nat表不够用时使用
2. iptables
配置文件储存在 /etc/sysconfig/iptables
- 保存当前策略
[root@rhclient Desktop]# iptales-save > /etc/sysconfig/iptables
[root@rhclient Desktop]# service iptables save
- 恢复默认策略
[root@rhclient Desktop]# iptables -F
- 设置策略
[root@rhclient Desktop]# iptables -[options] <-t table> [chain] [condition] [measure]
-t #指定表名称
-n #不做解析
-L #查看
-A #添加策略
-N #新建链
-E #更改链名称
-X #删除链
-D #删除规则
-F #刷新所有设定
-I #插入规则
-R #更改规则
-P #更改默认规则
-m #修改
-p #协议
--dport #目的地端口
-s #来源
RELATED #建立过连接的(数据包)
ESTABLISHED #正在连接的(数据包)
NEW #新的(数据包)
-j #动作
ACCEPT #允许
DROP #丢弃
REJECT #拒绝
SNAT #源地址转换
DNAT #目的地地址转换
使用范例:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# filter表INPUT中添加规则: 接受状态为RELATED,ESTABLISHED的数据包
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
# filter表INPUT中添加规则: 接受状态为NEW数据包
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# filter表INPUT中添加规则: 接受状态为NEW并且tcp协议来自80端口的数据包
iptables -A INPUT -m state --state NEW ! -s 192.168.0.10 -p tcp --dport 22 -j ACCEPT
# filter表INPUT中添加规则: 接受状态为NEW tcp协议端口为22的来源不是的192.168.0.10 的数据包
iptables -A INPUT -m state --state NEW -j REJECT
# filter表INPUT中添加规则: 拒绝状态为new的数据包
iptable -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.0.20
# 添加snat规则,从ens160发出的数据来源更改为 192.168.0.20
iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 192.168.0.20
# 添加dnat规则,ens160 收到的数据目标地址改为192.168.0.20
启用iptables,查看指定表内容,添加删除NAT规则:
插入SNAT规则
开启内核路由功能:
添加目的地地址转换:
删除规则:
3. firewalld
firewalld 配置目录 /etc/firewalld ;模块目录 /lib/firewalld
firewalld 默认存在数个域,工作在每个域时,防火墙开放接口不同。
域 | 说明 |
---|---|
trusted | 开放所有服务 |
home | 开放ssh mdns ipp-client samba-client dhcp-client |
work | 开放ssh ipp-client dhcp-client |
public | 开放 ssh dhcp-client |
dmz | 军级网络 ssh |
block | 拒绝所有 |
drop | 丢弃 所有数据全部丢弃无任何回复 |
internal | 内部网络,开放 ssh mdns ipp-client samba-client dhcp-client |
external | ipv4网络地址伪装转发 sshd |
- 常规设定
[root@rhclient Desktop]# firewall-cmd [options]
firewall-cmd --state #查看状态
firewall-cmd --get-active-zones #查看生效域
firewall-cmd --get-default-zone #查看默认域
firewall-cmd --list-all #查看默认域中的火墙策略
firewall-cmd --list-all --zone=work #查看指定域的火墙策略
firewall-cmd --set-default-zone=trusted #设定默认域
firewall-cmd --get-services #查看所有可以设定的服务
firewall-cmd --permanent --remove-service=dhcp #移除服务
firewall-cmd --reload #刷新防火墙策略
firewall-cmd --permanent --add-source=192.168.158.0/24 --zone=trusted
# 指定数据来源访问域
firewall-cmd --reload
firewall-cmd --permanent --remove-source=192.168.158.0/24 --zone=trusted
# 删指定的域中的数据来源
firewall-cmd --permanent --add-interface=ens224 --zone=trusted
# 添加网络接口至指定域
firewall-cmd --permanent --remove-interface=ens224 --zone=trusted
# 删除指定域的网络接口
firewall-cmd --permanent --change-interface=ens224 --zone=trusted
# 更改网络接口指定的域
- 高级设定
[root@rhclient Desktop]# firewall-cmd --direct --get-all-rules #查看高级规则
[root@rhclient Desktop]# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 192.168.158.128 -p tcp --dport 22 -j REJECT
# 添加规则:非来自192.168.158.128 tcp 端口为22的数据包拒绝接受
- NAT
SNAT只需开启masquerade功能,DNAT需要进行具体配置
[root@rhclient Desktop]# firewall-cmd --permanent --add-masquerade
[root@rhclient Desktop]# firewall-cmd --permanent --add-forward port=port=22:proto=tcp:toaddr=192.168.158.128
开启firewalld:
查看生效域、默认域,修改默认域:
添加指定网卡、网段至指定域:
删除指定域中的指定资源:
开启路由、设定DNAT: