Linux:网络防火墙 netfilter :Frame iptables :数据报文过滤,NAT,mangle等规则生成的工具; 网络:IP报文首部, TCP报文首部 防火墙 :位于计算机网络边缘或者internet出口,对于进出的报文进行检查通过规则,标准,一套组件 可以是硬件或者软件 ,规则(匹配标准,处理方法) Framework :默认规则 ,开放: 堵 / 关闭: 通 对于服务器默认关闭 规则 :匹配标准 数据报文特征 IP :源IP,目标IP TCP :SPORT ,DPORT , SYN=1 UDP :SPORT ,DPORT ICMP:icmp-type 数据报文过滤 linux2.0 ipfw/firewall linux2.2 ipchain/firewall linux2.4 iptables/netfilter TCP/IP模块,TCP/IP栈 /proc/sys/net/ipv4/ip_forward 数据报文流量 路由表 路由决策 接收数据报文后先进行路由决策

netfilter hook :钩子函数 1 、2、、3钩子函数位置 另外两个位置 ,刚刚进入路由表决策之前,在出站网卡缓冲区中 未出站前 prerouting input output forward postrouting 规则链 prerouting input output forward postrouting filter (过滤):表 INPUT OUTPUT FORWARD nat(地址) :表 prerouting postrouting mangle (拆开、修改、封装):表 在prerouting input output forward postrouting都可以放mangle()规则 raw() PREROUTING OUTPUT

NAT 源地址转换 目标地址转换 规则顺序 自定义链只有被调用才能发挥作用,而且如果没有自定义链的任何规则匹配到,应该有返回机制 用户可以删除自定义的空链 默认链无法删除 每个规则都有两个内置的计数器 被匹配的报文个数 被匹配的报文大小之和 使用自定义链可以提高匹配效率

规则:匹配标准,处理动作 匹配标准 : 通用匹配 自身可以实现 -s ,--src 指定源地址 -d ,--dst 指定目标地址 -p {tcp |udp |icmp} :指定协议 -i INTERFACE :指定数据报文流入的接口 可用于定义的链:PREROUTING,INPUT, FORWARD -o INTERFACE :指定数据报文流出的接口 可用于标准定义的链:POSTROUTING,OUTPUT, FORWARD 扩展匹配 借助于模块 隐含扩展 :不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp |udp |icmp} --sport PORT :源端口 -dport PORT :目标端口 --tcp-flags mask comp :只检查mask指定的标志位,是逗号分隔的标志位列表,comp 表示此列表出现标志位必须为1 ,comp没有出现,mask中出现标志位必须为0 --tcp-flags SYN,FIN,ACK ,RST SYN = --syn -p icmp --icmp-type 0:echo-reply 8:echo-request -p udp --sport --dport

显式扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能, 使用额外的匹配机制 -m EXTESTION --spe-opt state :状态扩展 结合ip_conntrack追踪会话的状态 NEW :新连接请求 ESTABLISHED :已建立的连接 INVALID :非法连接 RELATED :相关联的 离散多端口匹配扩展
multiport --source-ports --destination-ports --ports iprange --src-range ip-ip --dst-range ip-ip connlimit 连接数限制 !--connlint-above n 连接数上限 limit --limit RATE --limit-burst 上限 string --algo {bm | kmp } 算法 --string pattern iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理方法 -j TARGET ACCEPT DROP REJECT netfilter :Framework ,TCP/IP, 内核中 命令: 管理规则 -A :附加一条规则,添加在链的尾部 -I CHAIN [num] :插入一条规则,插入为对应CHAIN上的第num条; -D CHAIN [num] :删除指定链中第num条规则; -R CHAIN [num] :替换指定的规则; 管理链 -F [CHAIN] :flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链 -P CHAIN :设定指定链的默认策略; -N :自定义一个新的空链 -X :删除一个自定义的空链 -Z :置零指定链中所有规则的计数器; -E :重命名自定义的链 查看类 : -L :显示指定表中的规则; -n :以数字格式显示主机地址和端口号 -v :显示链及规则详细信息; -x :显示计数器的精确值; --line-numbers :显示规则号码 动作(target ):-j ACCEPT 放行 DROP 丢弃 REJECT 拒绝 DNAT 目标地址转换 SNAT 源地址转换 REDIRECT 端口重定向 MASQUEARDE 地址伪装 LOG 日志 --log-prefix "STRING" MARK 打标识

iptables不是服务,但有服务脚本,服务脚本的主要作用在于生效管理保存的规则,装载及移除iptables/netfilter相关的内核模块 iptables_nat,iptables_filter ,iptables_mangle, iptables_raw ,ip_nat ,ip_conntrack

ip_conntrack IP追踪 /proc/net/ip_conntrack 根据IP报文实现的追踪

ICMP图示 /etc/sysconfig/iptables 配置文件 保存规则 service iptables save iptables -save >/etc/sysconfig/iptables.20190626 iptables -restore < /etc/sysconfig/iptables.20190626 iptables -F 清空规则 更改最大连接数 sysctl -w net.ipv4.ip_conntrack_max=65536 cat /proc/sys/net/ipv4/ip_conntrack_max 查看最大连接数 /proc/sys/net/ipv4/netfilter/ /etc/sysctl.conf 几乎所有都支持条件取反 :使用 !

流量控制 tc 令牌桶机制