Iptables
# Iptables
# 常见几种类型防火墙?
包过滤防火墙
:包过滤是 IP 层实现,包过滤根据数据包的源 IP、目的 IP、协议类型 (TCP/UDP/ICMP)、源端口、目的端口等包头信息及数据包传输方向灯信息来判断是否允许数据包 通过。应用层防火墙
:也称为应用层代理防火墙,基于应用层协议的信息流检测,可以拦截某应用程序的 所有封包,提取包内容进行分析。有效防止 SQL 注入或者 XSS(跨站脚本攻击)之类的恶意代码。状态检测防火墙
:结合包过滤和应用层防火墙优点,基于连接状态检测机制,将属于同一连接的所 有包作为一个整体的数据流看待,构成连接状态表(通信信息,应用程序信息等),通过规则表与 状态表共同配合,对表中的各个连接状态判断。
# 简介
iptables 是 Linux 下的配置防火墙的工具
,用于配置 Linux 内核集成的 IP 信息包过滤系统,使增 删改查信息包过滤表中的规则更加简单。 iptables 分为四表五链,表是链的容器,链是规则的容器,规则指定动作。
# 四表
filter | 用于包过滤 |
---|---|
nat | 网络地址转发 |
mangle | 对特定数据包修改 |
raw | 不做数据包链接跟踪 |
# 五链
INPUT | 本机数据包入口 |
---|---|
OUTPUT | 本机数据包出口 |
FORWARD | 经过本机转发的数据包 |
PREROUTING | 防火墙之前,修改目的地址(DNAT) |
POSTROUTING | 防火墙之后,修改源地址(SNAT) |
# 表中的链
# 命令格式
命令格式:iptables [-t table] 命令 [chain] 匹配条件 动作
命令 描述
-A,append
追加一条规则
-I,insert
插入一条规则,默认链头,后跟编号,指定第几条
-D,delete
删除一条规则
-F,flush
清空规则
-L,list
列出规则
-P,policy
设置链缺省规则
-m,module
模块,比如 state、multiport
-X
删除指定表中用户自定义的规则链(delete-chain)
-Z
将所有表的所有链的字节和数据包计数器清零
# 匹配条件
# 常用的规则配置方法
# 查看Iptables的列表
$ iptables --list
# 清空表规则
$ iptables -F # 清空表规则,默认 filter 表
$ iptables -t nat -F # 清空 nat 表
# 允许端口访问
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 TCP 的 22 端口访问
$ iptables -I INPUT -p udp --dport 53 -j ACCEPT # 允许 UDP 的 53 端口访问,插入在第一条
$ iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT # 允许端口范围访问
$ iptables -D INPUT -p tcp --dport 22:25 -j ACCEPT # 删除这条规则
# 允许范围
$ iptables -A INPUT -p tcp -m multiport --dports 22,80,8080 -j ACCEPT # 允许多个TCP端口访问
$ iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许 192.168.1.0 段 IP 访问
$ iptables -A INPUT -s 192.168.1.10 -j DROP # 对 1.10 数据包丢弃
$ iptables -A INPUT -i eth0 -p icmp -j DROP # eth0 网卡 ICMP 数据包丢弃,也就是禁 ping
# 允许来自 lo 接口,如果没有这条规则,将不能通过 127.0.0.1 访问本地服务
$ iptables -A INPUT -i lo -j ACCEPT
# 限制并发连接数,超过 30 个拒绝
$ iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j REJECT
$ iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 其他
# iptables 服务器作为网关时,内网访问公网
$ iptables –t nat -A POSTROUTING -s [内网 IP 或网段] -j SNAT --to [公网 IP]
# 访问 iptables 公网 IP 端口,转发到内网服务器端口
$ iptables –t nat -A PREROUTING -d [对外 IP] -p tcp --dport [对外端口] -j DNAT --to [内网 IP:内网端口]
# 本地 80 端口转发到本地 8080 端口
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
# 允许已建立及该链接相关联的数据包通过
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ASDL 拨号上网
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o pppo -j MASQUERADE
# 设置 INPUT 链缺省操作丢弃所有数据包,只要不符合规则的数据包都丢弃。注意要在最后设置,以免把自己关在外面!
$ iptables -P INPUT DROP
上次更新: 2023/11/28, 22:03:59