netfilter防火墙
文章平均质量分 53
redwingz
这个作者很懒,什么都没留下…
展开
-
conntrack删除链表
在删除conntrack时,首先设置IPS_DYING_BIT标志位,如果此位已经设置,表明conntrack正在被删除。将会话的原始方向的tuple结构由每处理器结构的dying链表中删除。将conntrack由全局的nf_conntrack_hash链表中删除,之后,添加到dying链表中。最终,在函数destroy_conntrack中,将conntrack由dying链表中删除。要删除的conntrack的原始方向的tuple添加到当前处理器对应的dying链表上。原创 2022-10-09 23:00:00 · 774 阅读 · 0 评论 -
conntrack未确认链表
pcpu_list为每处理器结构,即每个处理器核心有单独的unconfirmed链表,将新创建的conntrack的原始方向的tuple添加到当前的处理器unconfirmed链表上。在报文离开netfilter系统的时候,进行确认处理,将对应的会话由unconfirmed链表移除。将会话的tuple结构由每处理器结构的unconfirmed链表中删除。新创建的会话添加到unconfirmed链表。原创 2022-10-09 18:41:33 · 200 阅读 · 0 评论 -
conntrack最大数量
在加载nf_conntrack模块的时候,可以通过参数hashsize控制conntrack的最大数量。如下,指定参数hashsize为1,系统计算出的conntrack最大数量为4096。处理函数中,模块参数hashsize只能在init_net命名空间设置。由于模块加载时nf_conntrack_hash为空,直接将hashsize的值赋予nf_conntrack_htable_size(1)。原创 2022-09-04 21:02:48 · 959 阅读 · 0 评论 -
系统当前conntrack数量
内核注册了PROC文件nf_conntrack_count,可查询系统当前连接跟踪的数量。如下当前系统conntrack数量。conntrack系统初始化时将当前命名空间中的连接跟踪数量初始化为0。在每次分配连接跟踪结构时,递增命名空间中连接跟踪计算,如果分配失败,将计数递减回来。如果当前系统中连接跟踪数量超过最大数量,检查是否可提前删除一些连接跟踪(early_drop)。当释放连接跟踪结构时,递减命名空间中conntrack计数。原创 2022-09-04 20:45:01 · 1359 阅读 · 0 评论 -
连接跟踪超时与提早回收
连接跟踪回收使用work完成,如下函数进行初始化,运行时间间隔设置为1秒钟(HZ)。回收函数gc_worker每次最多扫描所有hash桶总数量的GC_MAX_BUCKETS_DIV分之一(即1/128),使用变量last_bucket记录上一次扫描结束时的哈希桶索引,如果此值已大于hash桶的总数量,复位为0,从新开始。如果early_drop未开启,不执行回收。或者,early_drop开启,但是连接跟踪数量小于总数的95%,也不执行回收。...原创 2022-08-28 20:25:23 · 862 阅读 · 0 评论 -
hashlimit速率控制
iptables扩展匹配hashlimit在hashlimit-mode指定为空时,等同于limit匹配。如下hashlimit限制每秒不超过50个报文。根据hashlimit-name创建如下的PROC文件,由于没有指定hashlimit-mode,源IP、目的IP和源端口、目的端口字段都为零:同等的功能由limit匹配实现,如下,限制每秒不超过50个报文。报文限制使用hashlimit-mode参数指定srcip,依据源IP地址,将每个IP的速率限制在每分钟5个报文,哈希表项的超时时长为30秒钟原创 2022-07-03 22:05:04 · 665 阅读 · 0 评论 -
iptables目标TPROXY
TPROXY目标帮助信息如下。如下配置,将目的端口80的报文设置标记1,并且送到本机监听在30080的套接口。配置如下的IP路由策略,将标记为1的报文,送到本机回环设备lo处理,本机接收:应用层程序,需要设置套接口IP层选项IP_TRANSPARENT(SOL_IP, IP_TRANSPARENT),以接收代理报文。函数xt_register_targets注册目标结构tproxy_tg_reg。配置检查函数如下,对于IPv4协议,启用报文重组功能,透明代理仅支持TCP和UDP协议。目标处理函数如原创 2022-06-26 21:08:33 · 2046 阅读 · 0 评论 -
iptables目标TEE
TEE目标帮助信息如下。如下测试拓扑:在主机192.168.1.111上配置如下的策略,将与192.168.1.105交互的icmp报文重定向到主机192.168.1.114。在主机192.168.1.105执行ping操作。在主机192.168.1.114执行tcpdump,可以看到主机1.105和1.111的icmp交互报文。TEE目标使用到如下的模块:TEE目标初始化函数tee_tg_init如下,其注册了命名空间结构,以及TEE目标结构tee_tg_reg。命名空间初始化时,初始化空原创 2022-06-12 22:39:16 · 1300 阅读 · 1 评论 -
iptables匹配nfacct
nfacct匹配帮助信息如下。配置如下策略。以上配置命令新增了如下的内核模块:nfacct匹配函数xt_register_matches注册匹配结构nfacct_mt_reg。配置检查函数如下,根据配置的nfacct-name查找,如果不存在返回错误,所以需要使用nfacct命令先创建nfacct。匹配判断函数如下,首先根据报文信息更新nfacct的统计值;其次检测是否超限。函数nfnl_acct_update递增报文数量,并且增加报文字节统计。如下命令,指定nfacct的字节或者报文数量限原创 2022-06-12 22:37:00 · 339 阅读 · 0 评论 -
iptables匹配string
string匹配帮助信息如下。其中模式匹配算法可指定bm(Boyer-Moore)或者kmp(Knuth-Pratt-Morris)。选项icase表示在匹配时忽略大小写。# iptables -m string -hstring match options:--from Offset to start searching from--to Offset to stop searching--algo原创 2022-05-15 22:02:18 · 3277 阅读 · 1 评论 -
iptables匹配state
state匹配帮助信息如下。# iptables -m state -hstate match options: [!] --state [INVALID|ESTABLISHED|NEW|RELATED|UNTRACKED][,...] State(s) to match如下配置,允许连接跟踪状态为建立或者相关的流量,以及目的端口为23的新建连接。# iptables -A INPUT -m state --state ESTAB原创 2022-05-14 21:23:23 · 423 阅读 · 0 评论 -
通用速率估算器
速率估算器的使用参见:iptables匹配rateest。函数gen_new_estimator创建新的速率估算器,其时间间隔必须为:[-2, 3]之间的整数。int gen_new_estimator(struct gnet_stats_basic_packed *bstats, struct gnet_stats_basic_cpu __percpu *cpu_bstats, struct net_rate_estimator __rcu **原创 2022-05-08 23:04:08 · 401 阅读 · 0 评论 -
iptables匹配statistic
statistic匹配帮助信息如下。# iptables -m statistic -hstatistic match options: --mode mode Match mode (random, nth) random mode:[!] --probability p Probability nth mode:[!] --every n Match every nth packet原创 2022-05-08 23:02:00 · 1190 阅读 · 1 评论 -
netlink队列
iptables策略配置NFQUEUE参见: iptables目标NFQUEUE 。如果函数__nf_queue返回值为-RSRCH,表明应用层没有接收报文的进程存在,如果NF_QUEUE目标在配置时,指定了queue-bypass参数,放行此报文,否则释放报文。verdict的高16位存储的为队列号(NF_VERDICT_QBITS = 16)。int nf_queue(struct sk_buff *skb, struct nf_hook_state *state, unsigne原创 2022-05-01 22:41:06 · 1270 阅读 · 0 评论 -
iptables目标NFQUEUE
NFQUEUE目标帮助信息如下。# iptables -j NFQUEUE -hNFQUEUE target options --queue-num value Send packet to QUEUE number <value>. Valid queue numbers are 0-65535 --queue-balance first:last Balance flows between原创 2022-05-01 22:37:20 · 1820 阅读 · 0 评论 -
iptables匹配rateest
rateest匹配帮助信息如下。# iptables -m rateest -hrateest match options: --rateest1 name Rate estimator name --rateest2 name Rate estimator name --rateest-delta Compare difference(s) to given rate(s) --rateest-bps1原创 2022-04-24 21:36:29 · 563 阅读 · 1 评论 -
iptables目标RATEEST
RATEEST目标帮助信息如下。# iptables -j RATEEST -hRATEEST target options: --rateest-name name Rate estimator name --rateest-interval sec Rate measurement interval in seconds --rateest-ewmalog value Rate measurement averaging time cons原创 2022-04-24 21:35:41 · 695 阅读 · 0 评论 -
iptables目标CHECKSUM
CHECKSUM目标帮助信息如下。# iptables -j CHECKSUM -hCHECKSUM target options --checksum-fill Fill in packet checksum.如下配置策略,对目标端口68的UDP报文,计算其校验和。# iptables -A OUTPUT -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill## sudo iptabl原创 2022-04-24 21:34:28 · 765 阅读 · 0 评论 -
iptables匹配physdev
physdev匹配帮助信息如下。# iptables -m physdev -hphysdev match options: [!] --physdev-in inputname[+] bridge port name ([+] for wildcard) [!] --physdev-out outputname[+] bridge port name ([+] for wildcard) [!] --physdev-is-in原创 2022-04-24 21:33:26 · 1973 阅读 · 0 评论 -
iptables匹配devgroup
devgroup匹配帮助信息如下。# iptables -m devgroup -hdevgroup match options:[!] --src-group value[/mask] Match device group of incoming device[!] --dst-group value[/mask] Match device group of outgoing device首先,将接口ens39设置到组mygroup中。# cat /etc/iproute2/gr原创 2022-04-17 22:25:05 · 408 阅读 · 0 评论 -
iptables匹配multiport
multiport匹配帮助信息如下。multiport有三个选项。其中,–source-port(简写–sports)用于指定源端口,多个源端口使用逗号分隔,当指定源端口范围时,使用分号表示区间(port:port)。选项–destination-ports(简写为–dports)用于指定目的端口。选项–ports可匹配源或者目的端口。multiport仅支持带有端口号的协议,如tcp,udp,udplite,dccp和sctp。# iptables -m multiport -hmultipor原创 2022-04-17 22:24:09 · 4617 阅读 · 0 评论 -
iptables匹配iprange
iprange匹配帮助信息如下。iprange match options:[!] --src-range ip[-ip] Match source IP in the specified range[!] --dst-range ip[-ip] Match destination IP in the specified range配置如下策略,丢弃源地址在区间:[192.168.1.90 - 192.168.1.110]中的报文。# iptables -A INPUT -m ipr原创 2022-04-17 22:22:48 · 1990 阅读 · 0 评论 -
iptables匹配quota
quota匹配帮助信息如下。# iptables -m quota -hquota match options:[!] --quota quota quota (bytes)如下,当主机192.168.1.111发送的报文总量超过1024000字节之后,阻断其报文。# iptables -t filter -I INPUT -p tcp -s 192.168.1.105 -m quota --quota 1024000 -j ACCEPT# iptables -t原创 2022-04-17 19:04:26 · 2232 阅读 · 0 评论 -
ip6tables目标hoplimit
HL目标帮助信息如下,可对IPv6报文的hoplimit进行设置、减少或者增加。# ip6tables --jump HL -hHL target options --hl-set value Set HL to <value 0-255> --hl-dec value Decrement HL by <value 1-255> --hl-inc value Increment原创 2022-04-10 20:47:29 · 1012 阅读 · 0 评论 -
iptables目标TTL
TTL目标帮助信息如下,可对报文的ttl进行设置、减少或者增加。# iptables --jump TTL -hTTL target options --ttl-set value Set TTL to <value 0-255> --ttl-dec value Decrement TTL by <value 1-255> --ttl-inc value Increment TTL b原创 2022-04-10 20:46:32 · 1088 阅读 · 0 评论 -
ip6tables匹配hoplimit
hoplimit匹配帮助信息如下,可判断相等,大于和小于三种关系。# ip6tables --match hl -hhl match options:[!] --hl-eq value Match hop limit value --hl-lt value Match HL < value --hl-gt value Match HL > value如下在主机3ffe::2上配置策略,丢弃IPv6头部hoplimit值等于2的报文。# ip6tables -t f原创 2022-04-10 20:45:26 · 601 阅读 · 0 评论 -
iptables匹配ttl
TTL匹配帮助信息如下,可判断相等,大于和小于三种关系。# iptables --match ttl -httl match options:[!] --ttl-eq value Match time to live value --ttl-lt value Match TTL < value --ttl-gt value Match TTL > value如下在主机192.168.1.112上配置策略,丢弃IP头部ttl值小于3的报文。原创 2022-04-10 20:44:25 · 493 阅读 · 0 评论 -
iptables匹配pkttype
pkttype匹配帮助信息如下,匹配链路层报文类型。# iptables --match pkttype -hpkttype match options:[!] --pkt-type packettype match packet typeValid packet types: unicast to us broadcast to all multicast原创 2022-04-09 22:34:38 · 975 阅读 · 0 评论 -
iptables匹配cpu
cpu匹配帮助信息如下,匹配处理报文的CPU核。# iptables -m cpu -hcpu match options:[!] --cpu number Match CPU number如下配置,将处理器0和1处理的TCP目的端口为80的报文分别重定向到8080和8081。# iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-port 8080 # iptables -t na原创 2022-04-09 22:33:02 · 863 阅读 · 0 评论 -
iptables使用limit控制新建连接速率
如下limit匹配的帮助信息。# iptables -m limit -hlimit match options:--limit avg max average match rate: default 3/hour [Packets per second unless followed by /sec /minute /hour /原创 2022-04-04 21:58:46 · 2015 阅读 · 0 评论 -
netfilter连接跟踪统计
连接跟踪统计模块初始化函数nf_conncount_modinit如下,首先初始化256(CONNCOUNT_SLOTS)个自旋锁,保护对应的256个槽位,每个槽位对应一个红黑树,每个树节点为结构(nf_conncount_rb),对应于键值;而树节点结构中的链表成员,包含所有匹配键值的连接跟踪(nf_conncount_tuple),以及数量统计。之后,函数分配两个内核缓存,用于加速以上两个结构体的分配。static int __init nf_conncount_modinit(void){原创 2022-04-03 21:10:02 · 1113 阅读 · 0 评论 -
连接跟踪流量统计
连接跟踪的流量统计由扩展acct_extend实现,模块初始化函数nf_conntrack_acct_init注册连接跟踪扩展。static const struct nf_ct_ext_type acct_extend = { .len = sizeof(struct nf_conn_acct), .align = __alignof__(struct nf_conn_acct), .id = NF_CT_EXT_ACCT,};int nf_conntrack_acc原创 2022-03-27 21:42:52 · 1200 阅读 · 0 评论 -
iptables匹配功能length
用于匹配报文特定长度,或者范围,这里的报文长度指的是4层数据的长度,如TCP/UDP/ICMP等。以下仅允许数据包小于100字节的ping请求数据进入。# iptables -I INPUT -p icmp --icmp-type 8 -m length --length 100: -j DROP## iptables -L -n -v Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in原创 2022-03-26 19:29:56 · 4668 阅读 · 0 评论 -
iptables匹配功能connbytes
connbytes用于匹配一个连接中的字节数量,报文数量或者平均报文长度值。# iptables -A OUTPUT -m connbytes --connbytes 100: --connbytes-dir both --connbytes-mode bytes# iptables -A OUTPUT -m connbytes --connbytes 300:11000 --connbytes-dir both --connbytes-mode bytes## iptables -L -n -原创 2022-03-25 22:15:00 · 2130 阅读 · 2 评论 -
iptables匹配connlimit限制并发连接数量
以下规则将每个IP的最大并发连接数量控制在5个,使用connlimit-above或者connlimit-upto都可实现。# iptables -I INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 5 -j DROP # # iptables -L -n -vChain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in原创 2022-03-19 22:00:00 · 4520 阅读 · 0 评论 -
tcpdump与nft规则抓取报文
nft命令增加IP协议类型的表pcap-test,由于默认类型为IP,可以不指定类型,其它支持的类型有:ip6/arp/bridge/inet/netdev。之后,增加两个链localin-test和localout-test,类型为filter,挂载点分别为input和output。# nft add table ip pcap-test# nft add chain pcap-test localin-test { type filter hook input priority 0\; }# nf原创 2022-03-18 22:15:00 · 1009 阅读 · 1 评论 -
arptables实现ARP报文IPMAC绑定
iptables实现的IPMAC绑定对ARP报文无效,以下使用arptables规则控制ARP报文的IPMAC绑定。在主机192.168.1.127上配置以下规则:# arptables -A INPUT -s 192.168.1.201 --source-mac ! 00:0C:29:38:40:6B -j DROP## arptables -L -vChain INPUT (policy ACCEPT 0 packets, 0 bytes)-j DROP -i any -o any -s 19原创 2022-03-13 23:30:00 · 1310 阅读 · 0 评论 -
iptables实现IPMAC绑定
主机192.168.1.201的MAC地址如下:$ ip address2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:38:40:6b brd ff:ff:ff:ff:ff:ff inet 192.168.1.201/24 brd 192.168.1.255 scope global eth0原创 2022-03-12 22:40:35 · 919 阅读 · 0 评论 -
ebtables配置IPMAC绑定关系
主机192.168.1.201的MAC地址如下:$ ip address2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:38:40:6b brd ff:ff:ff:ff:ff:ff inet 192.168.1.201/24 brd 192.168.1.255 scope global eth0原创 2022-03-06 21:17:04 · 1282 阅读 · 0 评论 -
ebtables规则arpreply
创建网桥br0,将物理接口ens35加入到br0。动态获得地址192.168.1.130,注意br0的MAC地址为00:0c:29:e6:3f:76。# ip link add br0 type bridge# ip link set ens35 master br0# # dhclient br0# # ip addr5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group de原创 2022-03-05 21:23:30 · 1800 阅读 · 0 评论