防火墙 - iptables
  # 概念
# 五链

PREROUTING(预路由):所有网卡进来的数据包都经过,可用于目标地址转换(DNAT)INPUT(进站):目标 IP 是本机 IP 的数据包经过FORWARD(转发):目标 IP 不是本机 IP 的数据包经过OUTPUT(出站):本机程序出去数据包经过POSTOUTING(后路由):所有从网卡出去数据包经过,可用于源地址转换(SNAT)
# INPUT(进站)
# 限制 enp99s0(网卡) tcp 7890(端口)
iptables -A INPUT -i enp99s0 -p tcp --dport 7890 -j DROP
# FORWARD(转发)
# 四表
一般作用域:
| filter | nat | mangle | raw | |
|---|---|---|---|---|
| PREROUTING | ✅ | ✅ | ✅ | |
| INPUT | ✅ | ✅ | ||
| FORWARD | ✅ | ✅ | ||
| OUTPUT | ✅ | ✅ | ✅ | ✅ | 
| POSTROUTING | ✅ | ✅ | 
常用动作:
ACCEPT:允许数据包通过。DROP:直接丢弃数据包,不给任何回应信息。REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上。DNAT:目标地址转换。REDIRECT:在本机做端口映射。LOG:在 /var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
匹配顺序:
raw –> mangle –> nat –> filter , raw 最高
# raw
# filter(过滤)
用作过滤数据包,可将数据丢弃、拒绝……
# 查看filter表规则
iptables -t filter -L
iptables -L # 等价于,默认为filter表
iptables -L -n -v # 详细信息
# 新增(-I)(INPUT)链丢弃(DROP)源自(-s)(123.117.179.97)的数据包规则
iptables -t filter -I INPUT -s 123.117.179.97 -j DROP
# 删除(-D) - 按编号
iptables -t filter -L -n -v --line-numbers
iptables -t filter -D INPUT 1 # 删除filter表的INPUT链的第1条
# nat(地址转换)
# mangle(修改报文)
# 常见简写
--append  -A chain            Append to chain
--check   -C chain            Check for the existence of a rule
--delete  -D chain            Delete matching rule from chain
--delete  -D chain rulenum		Delete rule rulenum (1 = first) from chain
--insert  -I chain [rulenum]	Insert in chain as rulenum (default 1=first)
--replace -R chain rulenum		Replace rule rulenum (1 = first) in chain
--list    -L [chain [rulenum]]	List the rules in a chain or all chains
Options:
    --ipv4      -4              Nothing (line is ignored by ip6tables-restore)
    --ipv6      -6              Error (line is ignored by iptables-restore)
[!] --proto     -p proto        protocol: by number or name, eg. `tcp'
[!] --source    -s address[/mask][...]		source specification
[!] --destination -d address[/mask][...]	destination specification
--jump -j target		target for rule (may load target extension)
--goto      -g chain	jump to chain with no return
--match       -m match	extended match (may load extension)
--numeric     -n              numeric output of addresses and ports
--table       -t table        table to manipulate (default: `filter')
--verbose     -v              verbose mode
# 场景
# 端口转发(中转机)
- 开启系统的转发功能:
- 编辑 
vi /etc/sysctl.conf - 修改为 
net.ipv4.ip_forward=1 sysctl -p,正常打印net.ipv4.ip_forward=1
 - 编辑 
 
# 范围端口转发
#   将PREROUTING时目标端口为5000-5100的tcp数据包修改其目标地址为192.168.1.200
iptables -t nat -A PREROUTING -p tcp --dport 5000:5100 -j DNAT --to-destination 192.168.1.200
#   将POSTROUTING时目标ip为
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.200 --dport 5000:5100 -j MASQUERADE
# 参考
上次更新: 2025/04/18, 19:09:23