Uylin
发布于 2023-08-31 / 40 阅读 / 0 评论 / 0 点赞

iptables

iptables

简介

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter

netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间

iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架

防火墙会从以上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。

防火墙策略规则的设置有两种:一种是“通”(放行),一种是“堵”(阻止)。当防火墙的默认策略为拒绝时,就要设置允许规则,否则谁都进不来;如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用。

表与链

"四表"是指iptables的功能——filter、nat、mangle、raw

filter, 控制数据包是否允许进出及转发(INPUT、OUTPUT、FORWARD),可以控制的链路有input, forward, output

nat, 控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting

mangle,修改数据包中的原数据,可以控制的链路有prerouting, input, forward, output, postrouting

raw,控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output

"五链"是指内核中控制网络的NetFilter定义的五个规则链,分别为

PREROUTING, 路由前

INPUT, 数据包流入口

FORWARD, 转发管卡

OUTPUT, 数据包出口

POSTROUTING, 路由后

堵通策略是指对数据包所做的操作,一般有两种操作——“通(ACCEPT)”、“堵(DROP)”,还有一种操作很常见REJECT.

谈谈REJECT和DROP之间的区别,Ming写了一封信,向Rose示爱。Rose如果不愿意接受,她可以不回应Ming,这个时候Ming不确定Rose是否接到了信;Rose也可以同样写一封信,在信中明确地拒绝Ming。前一种操作就如同执行了DROP操作,而后一种操作就如同REJECT操作。

语法

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

通用

 -t:对指定的表进行操作,table必须是raw,nat,filter,mangle中的一个。默认是filter表。
 -p:指定要匹配的数据包协议类型;
 -s, --source address[/mask][,...]:把指定的一个或者一组地址作为源地址,按此规则进行过滤。当后面没有mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
 -d, --destination address[/mask][,...]:地址格式同上,但这里指定地址为目的地址,按此进行过滤
 -i, --in-interface name:指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
 -o, --out-interface name:指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
 -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
 -j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。 target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。 
 -h:显示帮助信息;

链管理

-N, --new-chain chain:新建一个自定义的规则链;
-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
-F, --flush [chain]:清空指定的规则链上的规则;
-E, --rename-chain old-chain new-chain:重命名链;
-Z, --zero [chain [rulenum]]:置零计数器;
-P, --policy chain target, 设置链路的默认策略

规则管理

-A, --append chain rule-specification:追加新规则于指定链的尾部
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则
-D, --delete chain rulenum:根据规则编号删除规则

查看规则

-L, --list [chain]:列出规则
-v, --verbose:详细信息
-vv, -vvv 更加详细的信息
-n, --numeric:数字格式显示主机地址和端口号
-x, --exact:显示计数器的精确值
–line-numbers:列出规则时,显示其在链上的相应的编号
-S, --list-rules [chain]:显示指定链的所有规则

示例

iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -I INPUT -p icmp -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.1.2 -p tcp --dport 3576 -j ACCEPT
iptables -I INPUT -s 192.168.1.0/16 -p tcp --dport 3576 -j ACCEPT
iptables -I INPUT -s 192.168.1.2 -p tcp --dport 8000:8005 -j ACCEPT

国内IP

#!/bin/bash
ipset create china hash:net hashsize 10000 maxelem 1000000

curl -o delegated-apnic-latest http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}' | cat > ipv4.txt
cat delegated-apnic-latest | awk -F '|' '/HK/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}' | cat > ipv4-hk.txt

for i in `cat ipv4.txt`
do
ipset add china $i
done

for i in `cat ipv4-hk.txt`
do
ipset add china $i
done

rm -rf ipv4-hk.txt
rm -rf ipv4.txt