day7_kls

课程内容

防火墙

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

image.png

添加规则

iptables.gif

规则添加后,ping kali

image.png

防火墙禁止https出网(iptables)

未配置的情况

image.png

添加防火墙规则

image.png

配置后的情况

image.png

防火墙禁止访问tcp8000端口(iptables)

pcx.z.home开启一个8000端口的http服务

image.png

访问正常

image.png

配置防火墙策略

image.png

配置后的情况

image.png

防火墙配置禁止某个网卡发送icmp包

配置防火墙策略iptables -I OUTPUT -o interface_name -p icmp -j DROP

验证ping -I interface host

防火墙配置允许连接本地ssh(ufw)

配置前

image.png

假装连不上

配置防火墙规则

image.png

连接成功

image.png

思考&&todo

DONE kitty+zsh补全显示异常问题解决

kali的zsh配置的问题,我们自己配置就不会有这个问题了

参考

man ufw

man iptables

SELinux ArchWiki