防火墙 - 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
# 四表
一般作用域:
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表
# 新增(-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/01/10, 15:19:35