以下操作基于debian 11.6系统完成
主要涉及iptables基本配置,以及解决配置Iptables后不能上网和不能获得ipv6地址的问题
1. 基本操作
# 以下命令,ipv4的配置使用iptables操作,ipv6的配置使用ip6tables操作
# 查看iptables服务状态
systemctl status iptables.service
# 开机自启动
systemctl enable iptables.service
# 重启iptables服务
systemctl restart iptables
# 查看已经生效的防火墙规则
# --line-numbers用来显示规则的序号
iptables -L --line-numbers
# 保存配置
# 保存
sudo bash -c 'iptables-save > /etc/iptables/rules.v4'
sudo bash -c 'ip6tables-save > /etc/iptables/rules.v6'
# 恢复
sudo bash -c 'iptables-restore < /etc/iptables/rules.v4'
sudo bash -c 'ip6tables-restore < /etc/iptables/rules.v6'
2. 匹配规则
如图,流量进站后,iptables会根据这个列表从上往下进行匹配,如果中间有匹配成功的规则,则会执行这个规则的策略。
因此,通过在规则列表最后插入一条默认拒绝的规则,则可以实现白名单模式。
3. 插入规则
# 添加进站规则
# 允许ip为(10.178.xx.xxip段)和端口号(所有用all)为22的流量进站
iptables -I INPUT -s 10.178.0.0/16 -p tcp --dport 22 -j ACCEPT
# 禁止所有进站
iptables -A INPUT -j DROP
说明:
- -I:代表将规则插入到规则列表第一行,-A:代表将规则插入到规则列表最后一行
- -s:来源地址
- INPUT:代表进站规则,也可以改成OUTPUT控制出站规则
- -p:指定协议,可以是tcp、udp或者all
- -dport:目标端口
- -j:执行策略,ACCEPT代表接收,DROP代表抛弃,即拒绝
4. 删除规则
# 最后的数字是规则的序号
sudo iptables -D INPUT 2
5. 允许已建立的或相关连的通行
如果没有这条配置,可能会导致无法上网
sudo iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
6. 获取ipv6地址
针对ipv6。如果使用白名单模式,需要增加以下配置,否则可能会导致无法获得ipv6地址
sudo ip6tables -I INPUT 2 -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
sudo ip6tables -I INPUT 2 -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
sudo ip6tables -I INPUT 2 -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
sudo ip6tables -I INPUT 2 -p icmpv6 --icmpv6-type redirect -m hl --hl-eq 255 -j ACCEPT