课程内容
防火墙
linux常用的防火墙
iptables(基于netfilter)
nftables(iptables的后继,现代化的防火墙)
ufw(基于iptables)
firewalld
基本概念
四表五链
四表(table):Filter表、NAT表、Mangle表、Raw表
五链(chain):PREROUTING链、INPUT链、FORWARD链、OUTPUT链、POSTROUTING链
规则(以iptables为例)
匹配条件:
指定规则适用的数据包类型(如源地址、目标地址、协议等)。
IP 地址:-s 192.168.1.1(源地址)或 -d 10.0.0.1(目标地址)。
协议:-p tcp。
端口:–dport 22(目标端口)或 –sport 80(源端口)。
动作(Action):
定义数据包被匹配后执行的操作。
常见动作:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包。
REJECT:拒绝数据包并返回响应。
LOG:记录数据包信息到日志中。
便捷的规则书写
多个ip
指定某个网络:iptables -A INPUT -s 192.168.1.1,192.168.1.0/24 -j ACCEPT
指定多个非连续ip:iptables -A INPUT -s 192.168.1.1,192.168.1.2,192.168.1.3 -j ACCEPT
指定多个连续ip:sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.120 -j ACCEPT
多个端口
使用,指定多个端口:-m multiport,iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
使用:指定多个端口:,iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT
规则匹配逻辑
从上到下逐行匹配,第一条匹配成功后立即停止检查后续规则
因此,规则匹配的顺序应从具体到通用,特例优先,全局策略后置。
iptables
启停
systemctl start/stop iptables
查看规则
查看规则iptables -t [table] -L [chain] [options]
常用参数:
| 参数 | 说明 | 举例 |
|---|---|---|
-n |
numeric,显示数字ip和端口 | |
-v |
verbose,冗长的信息 | |
--line-number |
列出规则时在每一行添加数字(这个数字在删除时有帮助) |
添加规则
iptables -t [table] -A [chain] [match] -j [action]
删除规则
iptables -t [table] -D [chain]
table默认为filter
永久保存防火墙配置
保存iptables-save > file
加载iptables-restore < file
自动导入:写一个开机自启脚本,使用 iptables-persistent
ufw
启停
systemctl start/stop/restart ufw
ufw enable/disable/reload
状态查看:
systemctl status ufw
ufw status
查看规则
ufw status [numberd] [verbose]
添加规则
ufw action args
action:allow,reject,deny,limit
简单的args:
端口号/协议port[/protocol]
服务名service,example:samba,ftp,mysql
注意这里的mysql等服务都是默认的端口,如果你改了对应服务的端口,这里不会生效
指定出入方向
ufw allow out 22
值得注意的,如果没有指定方向那么方向默认为in
指定出入ip,协议,端口
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25
from:原ip,to 目的ip
指定网卡
ufw deny on interface proto tcp
一些方便的写法
any所有的ip
删除规则
ufw delete add_thing
add_thing为你添加时输入的内容
永久保存防火墙配置
ufw默认就是永久保存,无需做其他操作
firewalld
启停
systemctl start/stop/restart firewalld
查看规则
firewall-cmd --list-all
添加规则
firewall-cmd --add-xx args
example:
添加http服务放行firewall-cmd --add-service http
添加tcp88端口放行firewall-cmd --add-port 88/tcp
如果想要添加永久规则,需要添加参数
--permanent,例如firewall-cmd --permanent --add-service http,让其生效需要执行firewall-cmd --reload
删除规则
firewall-cmd --remove-xx args
example:
删除服务规则firewall-cmd --remove-service service_name
其他的
应急模式firewall-cmd --panic-on/off
selinux
强制访问控制,为linux提供了细粒度的安全控制。
临时关闭
setenforce 0
永久关闭
编辑/etc/selinux/config
修改SELINUX为disableSELINUX=disabled
实例&&作业
iptables添加规则拦截icmp(iptables)
规则添加前,ping kali

添加规则

规则添加后,ping kali

防火墙禁止https出网(iptables)
未配置的情况

添加防火墙规则

配置后的情况

防火墙禁止访问tcp8000端口(iptables)
在pcx.z.home开启一个8000端口的http服务

访问正常

配置防火墙策略

配置后的情况

防火墙配置禁止某个网卡发送icmp包
配置防火墙策略iptables -I OUTPUT -o interface_name -p icmp -j DROP
验证ping -I interface host
防火墙配置允许连接本地ssh(ufw)
配置前

假装连不上
配置防火墙规则

连接成功

思考&&todo
DONE kitty+zsh补全显示异常问题解决
kali的zsh配置的问题,我们自己配置就不会有这个问题了
参考
man ufw
man iptables