Linux 防火墙
iptables
介绍
是 Linux 老版本(CentOS)防火墙
Netfilter的管理工具。概念
表
filter:过滤
nat:网络地址转换,路由器上会用
mangle:修改数据包
raw:指定不被连接跟踪的数据包
链
input 链:入方向网络
output 链:出方向网络
forward 链:转发
prerouting:在路由之前操作数据
postrouting: 在路由之后操作数据
规则
accept:允许
drop:丢弃
reject:拒绝
使用
iptables -L -n --line-numbers #查看 filter 表所有的链的所有的规则

添加规则——(入方向)
命令
iptables -I 或 -A INPUT -s 192.168.85.128 -p icmp -j DROP #丢弃来自 192.168.85.128 的 ping #-I 在最头部添加一个规则 #-A 在尾部添加一个规则 #-S 源地址,想要禁止的 IP #-p 协议,ping 的协议是 icmp #-j 动作,DROP/REJECT iptables -D INPUT 1 #删除 INPUT 入方向的第一条规则 iptables -I INPUT -s 192.168.85.128 -p icmp -j REJECT #-j 动作设置为:REJECT,会有明确的拒绝连接回复

拦截出方向
iptables -I OUTPUT -p icmp -j DROP #拦截出方向,也可以禁止 ping,但是不规范 iptables -D OUTPUT 1 #删除规则
iptables -I INPUT -s 192.168.85.128 -j DR0P #完全禁止来自 192.168.85.128 的任何流量 iptables -I INPUT -s 192.168.85.128 -p tcp --dport 22 -j REJECT #--dport 目的端口iptables -I INPUT -s 192.168.85.128 -p tcp -m multiport --dport 20,21 -j REJECT #拦截来自 192.168.85.128 的 ftp 流量 iptables -I INPUT -s 192.168.85.1/24 -p tcp --dport 22 -j REJECT #拦截 192.168.85.1 - 192.168.85.254 的流量 iptables -I INPUT -m iprange --src-range 192.168.85.100-192.168.85.150 -p tcp --dport 22 -j REJECT #拦截 192.168.85.100 - 192.168.85.150 的流量测试通信
测试
22端口iptables -I INPUT -s 192.168.85.128 -p tcp --dport 22 -j REJECT #关 22 端口 ssh root@IP地址
测试
8000端口iptables -I INPUT -s 192.168.85.128 -p tcp --dport 8000 -j REJECT #关 8000 端口 python-m http.server #开启 8000 端口 wget http://IP地址:8000 #测试
删除规则
iptables -F #删除所有的 iptables 规则
添加规则——(出方向)
[!NOTE]
应用场景:禁止出网(特定的协议)
禁用
pingiptables -I INPUT -p icmp -j REJECT #入方向 或 iptables -I OUTPUT -p icmp -j DROP #出方向禁止访问
http网站(http不出网)iptables -I OUTPUT -p tcp --dport 80 -j DROP禁止访问
https网站(https不出网 /tls不出网)iptables -I OUTPUT -p tcp --dport 443 -j DROP
iptables -I OUTPUT -p tcp --dport 8000 -j DROP
kali 访问 CentOS
请求是入方向,不满足防火墙规则,不拦截。
响应是出方向,但是目的端口是随机的,不满足防火墙规则,不拦截。
CentOS 访问 ubuntu
请求是出方向,目的端口是 8000 端口,满足防火墙规则,拦截。
aliyun server 访问 CentOS
请求是入方向,不满足防火墙规则,不拦截。
但有物理限制,故无法访问,与防火墙无关。
ufw
介绍
基于
iptables,每条 ufw 命令对应一条或多条 iptables 命令。
命令
apt install ufw #安装 ufw 防火墙
systemctl start ufw #该命令无法使防火墙开启,还需要以下命令才可以
ufw status #查看防火墙状态
---inactive #关闭状态
---active #开启状态
ufw enable #开启防火墙
ufw disable #关闭防火墙

配置——(入方向)
[!WARNING]
ufw 默认禁止所有入方向的流量。
允许入方向流量
ufw allow 8000/tcp #允许任何机器访问自己的 8000 端口查看规则
ufw status #查看规则 ufw status numbered #查看规则并显示标号
删除规则
ufw delete allow 8000/tcp ufw delete 标号 #查看标号后,即可用标号删除规则快捷添加端口方式
ufw allow http ===等价=== ufw allow 80/tcp ufw allow ssh ===等价=== ufw allow 21/tcp只允许某 IP 连接固定端口
ufw allow from 192.168.85.101 to any port 8000 proto tcp #只允许 192.168.85.101 连接自己的 8000 端口
配置——(出方向)
[!WARNING]
ufw 默认允许所有出方向的流量。
拒绝出方向流量
ufw deny out 22/tcp ufw deny out ssh #拒绝 22 端口出方向流量 #即禁止了到其他主机 22 端口的 TCP 流量ufw deny out to 192.168.85.101 port 8000 proto tcp #拒绝通往 192.168.85.101 的 8000 端口
firewalld
介绍
CentOS 7 之后的防火墙,不是 iptables。
命令
查看默认规则
firewall-cmd --list-all firewall-cmd --list-ports[!IMPORTANT]
firewalld默认禁止所有的入方向流量,但保留了一些周知端口。
配置——(入方向)
允许入方向的某个端口
firewall-cmd --add-port=8000/tcp #允许入方向的 8000 端口删除规则
firewall-cmd --remove-port=8000/tcp应急模式(禁止所有的入、出流量)
firewall-cmd --panic-on #开启应急模式 firewall-cmd --panic-off #关闭应急模式禁用 ping
firewall-cmd --add-icmp-block-inversion #禁用 ping firewall-cmd --remove-icmp-block-inversion #启用 ping
selinux
介绍
selinux不是网络防火墙。
命令
临时关闭 selinux
setenforce 0永久关闭 selinux
编辑
/etc/selinux/config,重启。SELINUX=disabled #设置为禁止 selinux reboot #重启
评论区