iptables

iptables 是一个基于内核空间 netfilter 的用户空间工具,用于配置 Linux 内核的防火墙规则。

钩子函数

img

PREROUTING: 在进入 IP 路由之前触发,就意味着只要接收到的数据包,无论是否真的发往本机,也都会触发这个钩子。它一般是用于目标网络地址转换(Destination NAT,DNAT)。

INPUT: 报文经过 IP 路由后,如果确定是发往本机的,将会触发这个钩子,它一般用于加工发往本地进程的数据包。

FORWARD: 报文经过 IP 路由后,如果确定不是发往本机的,将会触发这个钩子,它一般用于处理转发到其他机器的数据包。

OUTPUT: 从本机程序发出的数据包,在经过 IP 路由前,将会触发这个钩子,它一般用于加工本地进程的输出数据包。

POSTROUTIN: 从本机网卡出去的数据包,无论是本机的程序所发出的,还是由本机转发给其他机器的,都会触发这个钩子,它一般是用于源网络地址转换(Source NAT,SNAT)

规则表

raw 表: 用于去除数据包上的连接追踪机制(Connection Tracking)。

mangle 表: 用于修改数据包的报文头信息,比如服务类型(Type Of Service,ToS)、生存周期(Time to Live,TTL)。

nat 表: 用于修改数据包的源或者目的地址等信息,典型的应用是网络地址转换(Network Address Translation)。

filter 表: 用于对数据包进行过滤,控制到达某条链上的数据包是继续放行、直接丢弃或拒绝(ACCEPT、DROP、REJECT),典型的应用是防火墙。

security 表: 用于在数据包上应用SELinux,这张表并不常用。

img

命令格式

iptables -t 表 命令 规则链 规则

iptables命令 -L 代表查看 -A 代表插入到尾部, -D 删除规则 -F 清空规则

  • DROP:直接将数据包丢弃。
  • REJECT:给客户端返回 Connection Refused 或 Destination Unreachable 报文。
  • RETURN:跳出当前链,该链里后续的规则不再执行。
  • ACCEPT:同意数据包通过,继续执行后续的规则。
  • JUMP:跳转到其他用户自定义的链继续执行。
  • REDIRECT:在本机做端口映射。
  • MASQUERADE:地址伪装,自动用修改源或目标的 IP 地址来做 NAT。
# snat
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
# dnat
iptables -t nat -A PREROUTING -p tcp -d 80 -j DNAT --to-destination 容器ip:port
#  过滤
iptables -t filter -A INPUT -p tcp -s 192.168.10.0/24 -j DROP
# 查表
iptables --table filter --list --line-numbers
# 删除规则
iptables -t filter -D INPUT 1

ipset

ipset 把众多ip地址段单独汇集为一个集合,生成唯一的hash值

#!/bin/bash
ipset create asan hash:net -exist
# ipset list asan
ipset flush asan

[-f "in-aggregated.zone"] && rm in-aggregated.zone
wget https://www.ipdeny.com/ipblocks/data/aggregated/in-aggregated.zone

if [ $? -eq 0 ]
then
    echo "************download*****************"
    for address in `cat in-aggregated.zone`
    do
        ipset add asan $address
    done
else
    echo "*******Failed to download************"
fi

iptables --table filter --append INPUT --match set --match-set asan src --jump DROP


ipset save > /etc/rules.ipset
iptables-save > /etc/rules.iptables
ipset restore < /etc/rules.ipset  -exist
iptables-restore < /etc/rules.iptables -n
posted @ 2024-02-13 15:02  叒狗  阅读(26)  评论(0编辑  收藏  举报