2021-05-23

ip6tables-simple-stateful-firewall

 
1. Disable IPv6
2. 参照IPv4生成IPv6配置文件
	2.1 对比表
	2.2 行描述
	2.3 补充raw表
3. 保存规则并启用服务

摘录自: https://wiki.archlinux.org/title/Simple_stateful_firewall#IPv6

1. Disable IPv6

如果不使用IPv6,则可以考虑将其禁用,否则请按照以下步骤启用IPv6防火墙规则。
https://wiki.archlinux.org/title/IPv6#Disable_IPv6
https://wiki.archlinux.org/title/Disabling_IPv6

2. 参照IPv4生成IPv6配置文件

复制此示例中使用的IPv4规则作为基础,并将所有IP从IPv4格式更改为IPv6格式:
$ sudo cp /etc/iptables/iptables.rules /etc/iptables/ip6tables.rules

2.1 对比表

L4 $ cat /etc/iptables/iptables.rules 描述 L6 $ cat /etc/iptables/ip6tables.rules

*filter

*filter

:INPUT DROP [0:0] 丢弃所有入站
:INPUT DROP [0:0]

:FORWARD DROP [0:0] 丢弃所有转发
:FORWARD DROP [0:0]

:OUTPUT ACCEPT [0:0] 允许本地出站, 信任局域网
:OUTPUT ACCEPT [0:0]

:TCP - [0:0] TCP端口的自定义链
:TCP - [0:0]

:UDP - [0:0] UDP端口的自定义链
:UDP - [0:0]
1 -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 允许已连接及相关通讯 1 -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
2 -A INPUT -i lo -j ACCEPT 允许本地环回 2 -A INPUT -i lo -j ACCEPT
3 -A INPUT -m conntrack --ctstate INVALID -j DROP 丢掉失效包... 3 -A INPUT -m conntrack --ctstate INVALID -j DROP
4 -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT 仅允许ping; || 允许ICMPv6流量 4 -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT


|| 允许DHCPv6 5 -A INPUT -p udp -m udp --sport 547 --dport 546 -j ACCEPT
5 -A INPUT -p udp -m conntrack --ctstate NEW -j UDP 仅允许新的UDP请求. 6 -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
6 -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP 仅允许新的TCP请求. 7 -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
7 -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable 驳回udp: icmp不可达 || ICMPv6码 8 -A INPUT -p udp -j REJECT --reject-with icmp6-adm-prohibited
8 -A INPUT -p tcp -j REJECT --reject-with tcp-reset 驳回tcp 9 -A INPUT -p tcp -j REJECT --reject-with tcp-reset
9 -A INPUT -j REJECT --reject-with icmp-proto-unreachable 驳回:icmp不可达 || ICMPv6码 10 -A INPUT -j REJECT --reject-with icmp6-adm-prohibited


|| … 11 -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT

COMMIT

COMMIT
相同的行(IPv4 = IPv6)为绿色; 不同的行用橙色描述. 下面是不同的行的描述。

2.2 行描述

- IPv6第(8, 10)行, 对应IPv4版本的第(7, 9)行
ICMP协议已在IPv6中进行了更新,取代了与IPv4一起使用的ICMP协议。拒绝错误返回代码--reject-with icmp-port-unreachable和--reject-with icmp-proto-unreachable必须转换到的ICMPv6码。
RFC 4443中列出了可用的ICMPv6错误代码,该代码指定应使用被防火墙规则阻止的连接尝试--reject-with icmp6-adm-prohibited。这样做基本上可以通知远程系统该连接已被防火墙而不是侦听服务拒绝。
如果最好不要明确告知防火墙过滤器的存在,则也可以在没有以下消息的情况下拒绝该数据包:
 -A INPUT -j REJECT
上面的代码将拒绝,默认返回错误为--reject-with icmp6-port-unreachable。但是,您应该注意,识别防火墙是端口扫描应用程序的基本功能,并且大多数人都会识别它。

- IPv6第(11)行, 确保将协议和扩展名更改为适用于关于所有新的传入ICMP回显请求(ping)的规则的IPv6:
$ sudo ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT

- IPv6第(4)行, Netfilter conntrack似乎没有跟踪ICMPv6邻居发现协议(ARP的IPv6等效协议),因此我们需要允许ICMPv6流量,而不管所有直接连接的子网的状态如何。在放置在--ctstate INVALID之后,但在任何其他DROP或REJECT目标之前,应插入以下内容,以及每个直接连接的子网的对应行:
$ sudo ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT

- IPv6第(5)行
, 如果要启用DHCPv6,则需要接受UDP端口546上的传入连接:
$ sudo ip6tables -A INPUT -p udp --sport 547 --dport 546 -j ACCEPT

2.3 补充raw表

由于没有针对IPv6的内核反向路径过滤器,因此您可能需要在ip6tables中启用以下内容:
$ sudo ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
$ sudo ip6tables -t raw -A PREROUTING -j DROP

3. 保存规则并启用服务

现在,规则集已完成,应将其保存到文件中,以便可以在每次引导时加载它们。
$ sudo ip6tables-save -f /etc/iptables/ip6tables.rules
$ sudo ip6tables -nvL --line-numbers

最后别忘了启用[enable]并启动[start] iptables.service和ip6tables.service。检查服务的状态[status],以确保正确加载了规则。
$ sudo systemctl status ip6tables.service

2021-05-21

iptables-simple-stateful-firewall

 
1. 补充一些基本概念
	1.1 OSI开放系统互联7层模型
	1.2 IPv4地址
2. iptables
	2.1 iptables 语法
	2.2 filter表对规则链的操作
	2.3 filter表对规则的操作
	2.4 filter表的基本匹配操作
3. 其他filter表匹配操作
	3.1 tcp filter表匹配操作
	3.2 udp filter表匹配操作
	3.3 icmp filter表匹配操作
4. filter 表目标扩展
5. filter 表匹配扩展
	5.1 multiport
	5.2 limit
	5.3 state
	5.4 mac
	5.5 owner
	5.6 mark
	5.7 tos
	5.8 addrtype
	5.9 iprange
	5.a length
	5.b. conntrack
6 简单防火墙
	6.1 准备
	6.2 一台机器的防火墙
	6.3 临时许可某端口


1. 补充一些基本概念

1.1 OSI开放系统互联7层模型

  • 7 应用层 软件:界面
  • 6 表示层 软件:加密/解密
  • 5 会话层 软件:
  • 4 传输层 系统:端口 TCP/UDP
  • 3 网络层 硬件:路由器 IP/ICMP
  • 2 链路层 硬件:网卡 MAC
  • 1 物理层 硬件:网线

一些名词

  • 面向连接协议: TCP
  • 无连接协议: UDP, IP
  • ICMP: 控制报文协议 (Internet Control Message Protocol) 主要用于ping
  • UDP: 用于DNS查询, SNMP(简单网络管理协议), RADIUS(远程用户拨号认证系统)等
  • MAC(48bit): Media Access Control 介质访问控制
  • ARP: 地址解析协议 Address Resolution Protocol 用于关联一个物理设备网卡和IP, $ cat /proc/net/arp

1.2 IPv4地址

IPv4 共32位: 4 * 8 bit; 总共约40亿, 减去私有地址和D,E类, 只有约30亿. 
但由于NAT技术, 使得私有地址可以反复无限制的使用, 使得IP总数成为无限... 
但是增加的网络复杂程度.出错率.损失了网速.
IPv6 共128位: 8组冒号分隔的十六进制表示. 数量足够大, 目前的技术还用不完.
IPv4 还在向 IPv6 过渡... 

IPv4的5类地址, 私有地址及其他地址: 

cl IP-Begin IP-End 默认子网演码 子网数量 单网容量 总容量 备注
A 0.0.0.0 127.255.255.255 255.0.0.0 126 16387064 2064770064 互联网使用
B 128.0.0.0 191.255.255.255 255.255.0.0 14994 64516 967352904
C 192.0.0.0 223.255.255.255 255.255.255.0 7874 254 1999996
D 224.0.0.0 239.255.255.255
15

组播
E 240.0.0.0 255.255.255.255
15

实验
cl 私有-起 私有-止 默认子网演码 子网数量 单网容量 总容量 备注
A 10.0.0.0 10.255.255.255 255.0.0.0 1 16387064 16387064 跨国公司
B 172.16.0.0 172.31.255.255 255.255.0.0 16 64516 1032256 大型公司
C 192.168.0.0 192.168.255.255 255.255.255.0 1 254 254 小公司,家庭
cl IP-Begin IP-End 默认子网演码 子网数量 单网容量 总容量 备注
A 100.64.0.0 100.127.255.255 运营商级NAT 63 64516 4064508
B 169.254.0.0 169.254.255.255 链路本地网络地址


DHCP异常
C 192.0.2.0 192.0.2.255 测试网络地址



特殊地址还有:0; 127; 255

  • 0:网络地址 IPv4[0.0.0.0]; IPv6[::/0]
  • 127:回环地址 IPv4[127.0.0.1]; IPv6[::1]
  • 255:广播地址 IPv4[~255]; IPv6不使用广播, 使用组播.

2. iptables

Netfilter 防火墙; iptables 防火墙管理程序. Linux3.13, 新的过滤机制被加入: nftables.
Netfilter(iptables)使用了3个内置的过滤器链: input, output, forward.
Netfilter防火墙有3个独立的表: (filter:默认基础表, nat:NAT转换, mangle:对数据包特殊处理); 其他表: (raw, security).
https://wiki.archlinux.org/title/Iptables
https://www.netfilter.org/projects/iptables/index.html
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html
https://en.wikipedia.org/wiki/Iptables
2种处理不需要的包的方式
  • REJECT 驳回 Rejecting 数据包被丢弃, 返回ICMP错误消息; 
  • DROP 丢弃 Denying 静静的丢掉数据包... 

2.1 iptables 语法

iptables <option> <chain> <matching criteria> <target>

  • option 选项, 1个或多个: -A 追加
  • chain 规则链, : input, output, forward, 其他自定义...
  • match 匹配标准集, 应用条件: 端口等...
  • target 目标或处置disposition: drop 丢弃; accept 接受

2.2 filter表对规则链的操作

  • -N <chain>  创建一个用户自定义的规则链
  • -F <chain>  清空此规则链中的规则, 如果没有指定规则链, 则清空所有规则链中的规则
  • -X <chain>  删除用户自定义规则链, 如果没有指定规则链, 则删除所有用户自定义规则链
  • -P <chain> <policy>  为内建规则链(INPUT, OUTPUT, FORWARD)设置默认策略: ACCETP or DROP
  • -L <chain>  列出此规则链中的规则, 如果没有指定规则链, 则列出所有规则链中的规则
  • -Lnv <chain>  同上, n显示IP及端口号而不是名称, v显示数据包和字节数.
  • -L --line-numbers 显示规则在规则链中的行号
  • -S <chain>  以iptables save格式显示
  • -Z <chain>  重置与每个规则链相关的数据包和字节计数器. 
  • -h | <some command> -h  列出相关命令和选项
  • -E <old chain>  重命名用户自定义规则链

2.3 filter表对规则的操作

  • -A <chain> <rule specification>  将一条规则添加到规则链的末尾
  • -I <chain> [<rule number>]  将一条规则插入到规则行号前. 若不指定行号, 则插入为第一条规则
  • -R <chain> <rule number>  替换规则链中的该行号的规则
  • -D <chain> <rule number>  删除规则链中的该行号的规则
  • -C <chain> <rule specification>  检查规则链中是否有某条规则匹配<rule specification>

2.4 filter表的基本匹配操作

  • -i <interface>  在INPUT, FORWARD或用户自定义规则链中, 对传入数据包指定规则将应用到的接口名. 如果没有指定接口名, 规则默认应用与所有接口.
  • -o <interface>  在OUTPUT, FORWARD或用户自定义规则链中, 对传出数据包指定规则将应用到的接口名. 如果没有指定接口名, 规则默认应用与所有接口.
  • -p [<protocol>]  制定规则应用到的IP协议, 内建协议有TCP, UDP, ICMP等. 协议值可以是名称或数值: $ cat /etc/protocols
  • -s [!] <address>[</mask>]  指定IP报头中的主机或网络源地址
  • -d [!] <address>[</mask>]  指定IP报头中的主机或网络目的地址
  • -j <target>  jump 如果数据包匹配规则, 则设置此数据包的处置策略, 默认目标包括内建的策略, 扩展策略, 或用户自定义规则链
  • -g <chain>  goto 指明此过程应该在指定的规则链中继续, 但不必发挥处理.(类似-j选项)
  • -m <match>  使用扩展来测试是否匹配
  • [!] -f  指定数据包的第二个和其余的分片. 否定的版本指定了非分片的数据包.
  • -c <packets> <bytes>  初始化数据包和字节计数器

规则目标是可选的: 如果数据包匹配了没有目标处置的某条规则, 则数据包计数器会被更新, 但规则链的遍历则会继续进行.

3. 其他filter表匹配操作

3.1 tcp filter表匹配操作

$ iptables -p tcp -h
tcp match options:
[!] --tcp-flags mask comp match when TCP flags & mask == comp 对屏蔽列表位进行测试, 其中下列位必须设置为1, 才能够实现匹配
(Flags: SYN ACK FIN RST URG PSH ALL NONE)
[!] --syn match when only SYN flag set  在初始连接请求中, 必须设置SYN标志.
(equivalent to --tcp-flags SYN,RST,ACK,FIN SYN)
[!] --source-port port[:port]   指明源端口
 --sport ... match source port(s)
[!] --destination-port port[:port]  指明目的端口
 --dport ... match destination port(s)
[!] --tcp-option number        match if TCP option set  tcp唯一的合法选项是发送方能接受的数据包的最大值

3.2 udp filter表匹配操作

$ iptables -p udp -h
udp match options:
[!] --source-port port[:port]
 --sport ... match source port(s)
[!] --destination-port port[:port]
 --dport ... match destination port(s)

3.3 icmp filter表匹配操作

$ iptables -p icmp -h
icmp match options:
[!] --icmp-type typename match icmp type  指定ICMP名称, ICMP类型被用于代替源端口号
[!] --icmp-type type[/code] (or numeric type or type/code) 或类型号.
Valid ICMP Types:
...

4. filter 表目标扩展

iptables -j <TARGET> -h

  • $ iptables -j LOG -h  日志记录
  • $ iptables -j REJECT -h  驳回
  • $ iptables -j ULOG -h  扩展日志记录

5. filter 表匹配扩展

$ iptables -m icmp -h
$ iptables -m tcp -h
$ iptables -m udp -h

5.1 multiport

$ iptables -m multiport -h
multiport match options:
[!] --source-ports port[,port:port,port...]
 --sports ... match source port(s)  指定源端口
[!] --destination-ports port[,port:port,port...]
 --dports ... match destination port(s)  指定目的端口
[!] --ports port[,port:port,port] match both source and destination port(s)  源端口和目的端口相同, 并和列表中的端口匹配

5.2 limit

$ iptables -m limit -h
limit match options:
--limit avg max average match rate: default 3/hour  在指定时间内匹配数据包的最大值
                                [Packets per second unless followed by /sec /minute /hour /day postfixes]
--limit-burst number number to match in a burst, default 5  在应用限制前匹配的初始数据包的最大值

5.3 state

$ iptables -m state -h
state match options:
 [!] --state [INVALID|ESTABLISHED|NEW|RELATED|UNTRACKED][,...] State(s) to match 如果连接状态在列表中, 则进行匹配

5.4 mac

$ iptables -m mac -h
mac match options:
[!] --mac-source XX:XX:XX:XX:XX:XX Match source MAC address  匹配二层MAC地址, 在传入以太帧中以xx...xx(6组8进制)形式指定

5.5 owner

$ iptables -m owner -h
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists
    --suppl-groups                   Also match supplementary groups set with --gid-owner

5.6 mark

$ iptables -m mark -h
mark match options:
[!] --mark value[/mask]    Match nfmark value with optional mask

5.7 tos

$ iptables -m tos -h
tos match options:
[!] --tos value[/mask]    Match Type of Service/Priority field value
[!] --tos symbol          Match TOS field (IPv4 only) by symbol
                          Accepted symbolic names for value are:
                          (0x10) 16 Minimize-Delay
                          (0x08)  8 Maximize-Throughput
                          (0x04)  4 Maximize-Reliability
                          (0x02)  2 Minimize-Cost
                          (0x00)  0 Normal-Service

5.8 addrtype

$ iptables -m addrtype -h
Address type match options:
 [!] --src-type type[,...]      Match source address type
 [!] --dst-type type[,...]      Match destination address type
     --limit-iface-in           Match only on the packet's incoming device
     --limit-iface-out          Match only on the packet's outgoing device
Valid types:           
                                UNSPEC
                                UNICAST
                                LOCAL 本地地址
                                BROADCAST 广播地址
                                ANYCAST 任意数据包
                                MULTICAST 组播地址
                                BLACKHOLE 黑洞地址
                                UNREACHABLE 不可达地址
                                PROHIBIT 禁止地址
                                THROW
                                NAT
                                XRESOLVE

5.9 iprange

$ iptables -m iprange -h
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

5.a length

$ iptables -m length -h
length match options:
[!] --length length[:length]    Match packet length against value or range of values (inclusive)

5.b conntrack

$ iptables -m conntrack -h
conntrack match options:
[!] --ctstate {INVALID|ESTABLISHED|NEW|RELATED|UNTRACKED|SNAT|DNAT}[,...] State(s) to match 匹配状态
[!] --ctproto proto            Protocol to match; by number or name, e.g. "tcp"
[!] --ctorigsrc address[/mask]
[!] --ctorigdst address[/mask]
[!] --ctreplsrc address[/mask]
[!] --ctrepldst address[/mask] Original/Reply source/destination address
[!] --ctorigsrcport port
[!] --ctorigdstport port
[!] --ctreplsrcport port
[!] --ctrepldstport port TCP/UDP/SCTP orig./reply source/destination port
[!] --ctstatus {NONE|EXPECTED|SEEN_REPLY|ASSURED|CONFIRMED}[,...] Status(es) to match
[!] --ctexpire time[:time]     Match remaining lifetime in seconds against value or range of values (inclusive)
    --ctdir {ORIGINAL|REPLY}   Flow direction of packet

6. 简单防火墙

$ ll /etc/iptables/
lrwxrwxrwx  1 root root   36 2021-01-21 05:31 empty.rules -> ../../usr/share/iptables/empty.rules
-rw-r--r--  1 root root  105 2021-01-21 05:31 ip6tables.rules
-rw-r--r--  1 root root  728 2021-05-20 22:59 iptables.rules
lrwxrwxrwx  1 root root   46 2021-01-21 05:31 simple_firewall.rules -> ../../usr/share/iptables/simple_firewall.rules
$ cat /usr/share/iptables/simple_firewall.rules 
这里的simple_firewall.rules就是系统自带的可用于普通用户电脑的简单防火墙. 
最简单的使用方式就是用这个文件覆盖iptables.rules, 然后重新运行iptable服务即可. 

下面是摘录自arch页面用于单台计算机的防火墙的内容, 或许比上面那个最简单的稍微好一点点. 更重要的是, 每个步骤都有说明.
https://wiki.archlinux.org/title/Simple_stateful_firewall

6.1 准备

本文假定当前没有设置iptables规则. 要检查当前规则集并验证当前没有规则, 请运行以下命令:
$ sudo iptables-save
or
$ sudo iptables -nvL --line-numbers
如果有规则, 则可以通过加载默认规则集来重置规则:
$ sudo iptables-restore < /etc/iptables/empty.rules

6.2 一台机器的防火墙

注意: 由于iptables以线性顺序处理规则(从上到下), 因此建议将频繁访问的规则放在链的开头附近. 
当然, 有一个限制, 具体取决于要实现的逻辑. 而且, 规则具有相关的运行时成本, 因此不应仅基于对字节/数据包计数器的经验观察来对规则进行重新排序. 
创建必要的链: 对于此基本设置, 我们将创建两个用户定义的链, 这些链将用于打开防火墙中的端口. 
$ sudo iptables -N TCP
$ sudo iptables -N UDP

转发链: 
$ sudo iptables -P FORWARD DROP

输出链: 在这个简单的示例中, 我们将OUTPUT链的默认策略设置为ACCEPT, 以允许所有出站流量. 这不太安全, 但是与许多系统高度兼容. 
$ sudo iptables -P OUTPUT ACCEPT

输入链: 与以前的链类似, 我们将INPUT链的默认策略设置为DROP, 以防某些情况导致我们的规则滑脱. 丢弃所有流量并指定允许的内容是制造安全防火墙的最佳方法. 这里暂不考虑ssh等服务.
$ sudo iptables -P INPUT DROP

如果任何网络接口接收到的每个数据包都发往本机, 则它将首先通过INPUT链. 在此链中, 我们确保仅接受所需的数据包.
添加到INPUT链的第一个规则将允许属于已建立连接的流量, 或与这些连接相关的新有效流量.
例如ICMP错误或回显答复(主机被ping后返回的数据包). ICMP代表Internet控制消息协议. 一些ICMP消息非常重要, 有助于管理拥塞和MTU, 并且被以下规则接受: 
$ sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

连接状态ESTABLISHED表示, 另一个规则先前允许进行初始(--ctstate NEW)连接尝试, 或者该连接已经处于活动状态(例如, 活动的远程SSH连接).
第二条规则将接受来自“环回”(lo)接口的所有流量, 这对于许多应用程序和服务都是必需的. 
$ sudo iptables -A INPUT -i lo -j ACCEPT

第三条规则将丢弃状态匹配为“INVALID”的所有流量.
流量可以分为四个“状态”state: (NEW 新的, ESTABLISHED 已建立的, RELATED 相关的 或 INVALID无效的), 这就是使它成为“有状态”防火墙而不是不太安全的“无状态”防火墙的原因.
使用“nf_conntrack_ *”内核模块跟踪状态, 这些模块在添加规则时由内核自动加载.
$ sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

下一条规则将接受所有新的传入ICMP回显请求, 也称为ping. 只有第一个数据包将被视为新数据包, 其他数据包将由RELATED, ESTABLISHED规则处理. 由于计算机不是路由器, 因此不需要允许其他状态为NEW的ICMP通信.
$ sudo iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

现在, 我们将TCP和UDP链附加到INPUT链, 以处理所有新的传入连接. 一旦连接被TCP或UDP链接受, 则由RELATED/ESTABLISHED通信规则处理. TCP和UDP链将接受新的传入连接, 或者有礼貌地拒绝它们. 新的TCP连接必须以SYN数据包开始.
注意: NEW(不是SYN)是INVALID状态未涵盖的唯一无效TCP标志. 这是因为它们很少是恶意数据包, 不应仅被丢弃. 取而代之的是, 它们将由下一条规则简单地通过TCP RESET拒绝.
$ sudo iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
$ sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP

如果未打开端口, 我们将拒绝带有TCP RESET数据包的TCP连接和带有ICMP端口不可达消息的UDP流. 这模仿了默认的Linux行为(符合RFC), 并允许发送方快速关闭连接并进行清理.
$ sudo iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
$ sudo iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

对于其他协议, 我们向INPUT链添加最终规则, 以拒绝icmp协议不可达消息的所有剩余传入流量. 这模仿了Linux的默认行为.
$ sudo iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable

生成的iptables.rules文件, 首先查看: 
$ sudo iptables -nvL --line-numbers
$ sudo iptables -S

该文件可以通过以下方式生成和保存: 
$ sudo iptables-save -f /etc/iptables/iptables.rules

6.3 临时许可某端口

若在局域网内有与其他局域网分享文件的需要, 可以使用时手动添加相应的端口, 这些临时开放的规则不必保存到文件.
要在Web服务器的端口8000上接受传入的TCP连接, 请执行以下操作:
$ sudo iptables -A TCP -p tcp --dport 8000 -j ACCEPT

若不再需要了可进行删除操作: 若不删除, 这个没有保存到配置文件的, 重启后也不会存在.
$ sudo iptables -nvL --line-numbers
$ sudo iptables -D <rule number>

最后别忘了重启服务
$ sudo systemctl status iptables.service
$ sudo systemctl restart iptables.service
$ sudo systemctl enable iptables.service

2021-05-18

Two-PC-direct-connection

1. 双机直连
2. 网线
3. 查看网卡
	3.1 lspci命令, 查看板载及PCI网卡
	3.2 lsusb命令, 查看USB网卡
	3.3 dmesg,lsmod, 查看硬件加载信息
4. 手动设置IP地址
5. 开启简单网络服务
6. 其他

1. 双机直连

Q: 当前有2台电脑都是Windows与Linux双系统, 有时会需要互相之间传递文件.

硬件: 通过一条网线直连, 不依赖额外的路由器.
系统: 因为2台都是双系统, 所以有如下3种情况随时发生...

  • (Linux to Linux)
  • (Windows to Windows)
  • (Linux to Windows) or (Windows to Linux)

IP设置: 这里看到同一台电脑, 双系统的IP设置为相同, 被访问时, 都是相同的地址.

  • 电脑A(Windows & Linux): 192.168.1.1/24
  • 电脑B(Windows & Linux): 192.168.1.3/24

软件: python https://www.python.org/downloads/

Linux下通常都会安装; windows下只需下载解压缩版本, 不必安装, 解压即可, 将目录添加到电脑属性的路径中.

2. 网线

8P8C,常被误称为RJ45,是以太网使用双绞线连接时常用的一种连接器插头。
8P8C(8 position 8 contact)的意思是8个位置(Position,指8个凹槽)、8个触点(Contact,指8个金属接点)。

  • 在T568A中,与之相连的8根线分别定义为:白绿、绿;白橙、蓝;白蓝、橙;白棕、棕。
  • 在T568B中,与之相连的8根线分别定义为:白橙、橙;白绿、蓝;白蓝、绿;白棕、棕。

连线信号

在百兆以太网(Fast Ethernet、10/100M Ethernet)中,仅使用1、2、3、6这四根线,以差分信号传输方式减少电磁干扰,其中1、2为TX(发送)(拧在一起),3、6为RX(接收)拧在一起。
因此平行线就是两端同为EIA-568-A或者EIA-568-B,而跳线就是一端使用EIA-568-A,另一端使用EIA-568-B的连接方法。
在千兆以太网(Gigabit Ethernet、1000M Ethernet)或者以太网供电(PoE, Power over Ethernet)中,全部的四对差分对都被使用。

3. 查看网卡

Windows系统下都是图形操作, 这里只记录Linux系统的命令行方式. 

3.1 lspci命令, 查看板载及PCI网卡

$ lspci -v
$ lspci -k
00:19.0 Ethernet controller: Intel Corporation 82562GT 10/100 Network Connection (rev 03)
Subsystem: Hewlett-Packard Company Device 30d8
Kernel driver in use: e1000e
Kernel modules: e1000e
10:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
Subsystem: Hewlett-Packard Company Device 135d
Kernel driver in use: iwl3945
Kernel modules: iwl3945

3.2 lsusb命令, 查看USB网卡

$ lsusb
Bus 002 Device 016: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter

$ lsusb
Bus 002 Device 018: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter

$ lsusb.py
  2-1               0bda:8179 00 1IF  [USB 2.00,   480 Mbps, 500mA] (Realtek 802.11n NIC 00E04C0001)

$ lsusb.py
  2-1               148f:3070 00 1IF  [USB 2.00,   480 Mbps, 450mA] (Ralink 802.11 n WLAN)

3.3 dmesg,lsmod, 查看硬件加载信息

$ sudo dmesg |grep iwl3945
$ sudo dmesg |grep e1000e
[    6.980802] e1000e: Intel(R) PRO/1000 Network Driver
[    6.980808] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    6.981191] e1000e 0000:00:19.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    7.285699] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) 00:1a:4b:60:a3:a6
[    7.285717] e1000e 0000:00:19.0 eth0: Intel(R) PRO/10/100 Network Connection
[    7.285746] e1000e 0000:00:19.0 eth0: MAC: 6, PHY: 7, PBA No: FFFFFF-0FF
[    7.626080] e1000e 0000:00:19.0 enp0s25: renamed from eth0

$ sudo dmesg |grep -C 5 8179
[  678.524400] usb 2-1: new high-speed USB device number 16 using ehci-pci
[  678.675318] usb 2-1: New USB device found, idVendor=0bda, idProduct=8179, bcdDevice= 0.00
[  678.675329] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  678.675333] usb 2-1: Product: 802.11n NIC|
[  678.675336] usb 2-1: Manufacturer: Realtek
[  678.675339] usb 2-1: SerialNumber: 00E04C0001
[  678.726735] lib80211: common routines for IEEE802.11 drivers
[  678.726741] lib80211_crypt: registered algorithm 'NULL'
[  678.776406] r8188eu: module is from the staging directory, the quality is unknown, you have been warned.
[  678.783575] Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_A_CUT_1T1R_RomVer(0)
[  678.824238] usbcore: registered new interface driver r8188eu

$ sudo dmesg |grep -C 5 3070
[  716.127755] usb 2-1: new high-speed USB device number 18 using ehci-pci
[  716.301386] usb 2-1: New USB device found, idVendor=148f, idProduct=3070, bcdDevice= 1.01
[  716.301395] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  716.301399] usb 2-1: Product: 802.11 n WLAN
[  716.301401] usb 2-1: Manufacturer: Ralink
[  716.524433] usb 2-1: reset high-speed USB device number 18 using ehci-pci
[  716.680507] ieee80211 phy1: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected
[  716.709018] ieee80211 phy1: rt2x00_set_rf: Info - RF chipset 0005 detected
[  716.709300] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[  716.710382] usbcore: registered new interface driver rt2800usb

$ lsmod

Module                  Size  Used by
rt2800usb              28672  0
rt2x00usb              28672  1 rt2800usb
rt2800lib             139264  1 rt2800usb
rt2x00lib              90112  3 rt2800usb,rt2x00usb,rt2800lib
r8188eu               483328  0
lib80211               16384  1 r8188eu
iwl3945               122880  0
iwlegacy              147456  1 iwl3945
mac80211             1163264  5 iwl3945,iwlegacy,rt2x00lib,rt2x00usb,rt2800lib
cfg80211             1036288  5 iwl3945,iwlegacy,rt2x00lib,mac80211,r8188eu
e1000e                303104  0

4. 手动设置IP地址

列出网络设备
$ ip link

打开网卡
$ sudo ip link set enp0s25 up

手动设置IP地址
$ sudo ip address add 192.168.1.3/24 dev enp0s25

查看路由
$ ip route show
192.168.1.0/24 dev enp0s25 proto kernel scope link src 192.168.1.3 linkdown 

添加路由
$ sudo ip route add default via 192.168.1.1 dev enp0s25
$ ip route show
default via 192.168.1.1 dev enp0s25 linkdown
192.168.1.0/24 dev enp0s25 proto kernel scope link src 192.168.1.3 linkdown 

查看IP地址
$ ip address show

如果有安装相关的桌面版软件, 则可以如同Windows下一样, 图形化属性对话框内设置.
network-manager-applet, networkmanager...

5. 开启简单网络服务

进入需要分享的文件目录,开启简单网络服务(Windows与Linux下操作相似)
$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

按照上面IP设置为: 192.168.1.3, 开启简单网络服务默认端口为8000, 则同一网段其他主机可通过如下地址访问该文件目录: http://192.168.1.3:8000

这种分享文件的方式简单,安全,适应如下多种环境。
(Linux to Linux); (Windows to Windows); (Linux to Windows)

注: Window服务器的server服务, 默认是打开的, 且所有盘符都默认开启隐藏共享, 只要有权限的账户, 在局域网内任何一台机器都可以无限制的访问所有目录. 故建议将server服务关闭. 或者手动删除隐藏共享. 

更多更专业也更复杂的网络服务

6. 其他

如何设置一个本地测试服务器?
https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/set_up_a_local_testing_server

编辑 Web 服务器配置文件
https://www.ibm.com/docs/zh/was/9.0.5?topic=in-editing-web-server-configuration-files

https://wiki.archlinux.org/title/Network_configuration#IP_address_aliasing
将 IP 地址从接口中删除:
$ sudo ip address del address/prefix_len dev interface

删除所有符合条件的地址,例如某个特定接口的地址:
$ sudo ip address flush dev interface

要手动设置别名,可以使用 iproute2 执行:
$ sudo ip addr add 192.168.2.101/24 dev eth0 label eth0:1

删除别名:
$ sudo ip addr del 192.168.2.101/24 dev eth0:1

无线网卡命令有iw, iwd的iwctl, rfkill等
$ rfkill --output-all
ID TYPE DEVICE  TYPE-DESC         SOFT    HARD
 0 wlan hp-wifi Wireless LAN unblocked blocked
 1 wlan phy0    Wireless LAN unblocked blocked
$ rfkill --output-all
ID TYPE DEVICE  TYPE-DESC         SOFT      HARD
 0 wlan hp-wifi Wireless LAN unblocked unblocked
 1 wlan phy0    Wireless LAN unblocked unblocked


2021-04-25

The-text-Compatibility-of-Linux-and-Windows

The-text-Compatibility-of-Linux-and-Windows

1. 字符编码问题: Linux系统与windows系统的默认编码不同。 	1.1 Linux系统下查看文件编码命令file 	1.2 文件字符编码转换 		1.2.1 文件内容的字符编码转换: iconv 		1.2.2 文件名称的字符编码转换: convmv 	1.3 操作系统的字符集问题 2. 换行格式问题 	2.1 现象 	2.2 原因 	2.3 举例 	2.4 转换 	2.5 换行历史 3. 混用供参考 

 

在同时使用Windows与Linux双系统时,会遇到2种系统下文本文件互相不太兼容的问题。
主要是字符编码(文件内容及文件名)问题; 还有文件内容的换行格式问题。
注: 使用chrome可以查看几乎所有编码格式的文本文件, 只是不能编辑。

1. 字符编码问题: Linux系统与windows系统的默认编码不同。

  • Windows系统的字符编码默认是GBK(gb2312),
  • 而Linux系统的字符编码默认是UTF-8。

如果在双系统的其中一个系统下能正常现实中文,而在另外一个系统下则显示为乱码,通常是文件的编码有问题。

1.1 Linux系统下查看文件编码命令file


新版本的Unix命令File做字符编码的检测.(cygwin与mac都有此命令)

$ file linux.txt
linux.txt: Unicode text, UTF-8 text
这个文件的字符编码是UTF-8,在Linux系统下查看应该没有问题。

$ file win.txt
win.txt: ISO-8859 text, with CRLF line terminators
这个文件的字符编码ISO-8859, 不是UTF-8, 在Linux系统下使用gedit, geany, notepadqq等查看显示为乱码;但使用pluma可正常查看.

1.2 文件字符编码转换

1.2.1 文件内容的字符编码转换: iconv

Linux系统下命令: (iconv), 程序与编程API,用于字符编码转换
$ iconv -f GB2312 -t UTF-8 win-old.txt -o lin-new.txt
$ file lin-new.txt
lin-new.txt: Unicode text, UTF-8 text, with CRLF line terminators

另外: windows系统下: 直接使用记事本另存为即可, 使用记事本打开文件->另存为,编码方式选择UTF-8

1.2.2 文件名称的字符编码转换: convmv

将文件名从一种编码转换为另一种。
convmv -f 源编码 -t 新编码 [选项] 文件名
常用参数:
-r 递归处理子文件夹
–notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格

1.3 操作系统的字符集问题

另外,文件出现编码错误的原因还可能是当前操作系统的字符集有问题. 可参考此文处理: Locale
https://www.cnblogs.com/sztom/p/12174045.html

2. 换行格式问题

2.1 现象

在Linux环境下使用图形界面的文本编辑器或许看不出差异, 但若在Terminal终端下查看Windows格式(即CRLF回车换行)的文本文件,每行行尾都会多出个^M; 普通文本或许影响不大, 但若是脚本文件, 使用时就会报错了.
在Windows环境下查看Linux格式(即LF换行)的文本文件, 就非常不方便了, 只有长长的一行了(相当于没有了所有的换行).

2.2 原因

  • 在Linux中,文本文件换行用"\n": [换行LF (Line feed, U+000A) 0x0a (10)]
  • 而Windows用"\r\n"表示回车换行: [回车CR (Carriage Return, U+000D) 0x0d (13); 换行LF (Line feed, U+000A) 0x0a (10)]

2.3 举例

还是拿上面用过的文件举例,已经转换为UTF-8, 使用文本编辑器查看是没有问题了,
$ file lin-new.txt
lin-new.txt: Unicode text, UTF-8 text, with CRLF line terminators
这里看到行尾是CRLF, 即回车换行, 还是Windows的格式, 所以vi等命令行下查看时, 将多出来的的回车识别为(^M)

2.4 转换

如下2个命令将文本在 DOS 和 Unix 格式之间转换。
dos2unix : CRLF --> LF
unix2dos : LF --> CRLF

$ file lin-new.txt
lin-new.txt: Unicode text, UTF-8 text, with CRLF line terminators
$ dos2unix lin-new.txt
dos2unix: converting file lin-new.txt to Unix format...
$ file lin-new.txt
lin-new.txt: Unicode text, UTF-8 text

注: 还有更多相关命令: tr, od, awk, seg, vim, enca...

  • type: 可查看命令类型
  • file: 查看文件编码及格式
  • stat: 查看文件状态

2.5 换行历史

回车"(Carriage Return)和"换行"(Line Feed)这两个概念的来历和区别。
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。这就是"换行"和"回车"的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有"<换行>",即"\n";Windows系统里面,每行结尾是"<回车><换行>",即"\r\n";Mac系统里,每行结尾是"<回车>",即"\r";。一个直接后果是,Unix/Mac系统下的文件在 Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

3. 混用供参考

普通文件: 字符编码都使用UTF-8(Linux默认模式); 换行保持CTLF(Windows模式)。这样2种系统下都可以正常查看并编辑。
脚本文件: 字符编码都使用UTF-8(Linux默认模式); 若是bat的windows脚本使用CTLF(Windows模式); 若是sh的Linux脚本则使用LF(Linux模式)。
注: 脚本文件尽量使用全英文的就不会有编码问题了。

https://www.cnblogs.com/sztom/p/12154470.html#210
Unicode \ 3.2 字符转换工具
https://zh.wikipedia.org/wiki/字符编码#字符转换工具
https://en.wikipedia.org/wiki/Character_encoding#Character_encoding_translation

Locale
https://www.cnblogs.com/sztom/p/12174045.html

==========
下文有提供更多种转换方式: 如何将文本文件在 Unix 和 DOS(Windows)格式之间转换
作者: Magesh Maruthamuthu 译者: LCTT geekpi | 2020-08-27
https://linux.cn/article-12558-1.html


2021-02-03

Yeast

 
1. 膨松剂类型
2. 化学膨松剂
2.1 泡打粉(明矾)
2.2 baking soda 小苏打 NaHCO3 碳酸氢钠
2.3 soda 苏打 Na2CO3 碳酸钠 碱面
2.4 小苏打与苏打
2.5 在小苏打 NaHCO3 出现之前的碳酸氢铵 NH4HCO3
3. 生物膨松剂:酵母
3.1 普通面包过程
3.2 免揉面包
4. See More

1. 膨松剂类型

https://en.wikipedia.org/wiki/Leavening_agent
https://zh.wikipedia.org/wiki/膨松剂
  • 生物膨松剂: 酵母是最常见的,除此之外,实际上啤酒、酸奶等也可以应用。
  • 化学膨松剂: 泡打粉、碳酸氢钠、碳酸氢铵等。
  • 机械作用: 在某些液体上使用打蛋器,尤其是奶油或蛋清,还可以通过机械作用产生泡沫。这是用于制作海绵蛋糕的方法,其中通过剧烈搅打产生的蛋蛋白基质几乎提供了最终产品的所有结构。

2. 化学膨松剂

2.1 泡打粉(明矾)

发酵粉: 复配膨松剂(英语:Baking Powder),又称泡打粉,发酵粉,发泡粉,是一种以碳酸氢钠等化合物为主要成分的化学膨松剂,主要作用机制是通过碳酸氢钠与酸性物质的酸碱反应来制造二氧化碳。
https://en.wikipedia.org/wiki/Baking_powder
https://zh.wikipedia.org/wiki/發粉
在市面上,发酵粉产品有多种不同的配方,大多数产品为了营销目的和实际的功效在内添加明矾。明矾摄入量过多会对人体造成伤害,主要症状为呕吐、腹泻。同时发酵粉中也含有铝元素,摄入量过多会抑制人体记忆能力和免疫功能,阻碍神经传导。根据世界卫生组织等国际组织的规定,面制食品的铝含量必须低于100mg/kg。
替代酸--发酵粉主要是与酸混合的小苏打。原则上,许多厨房酸可与小苏打混合使用,以模拟商用发酵粉。醋(稀乙酸),尤其是白醋,在烘烤中也是常见的酸化剂。
明矾: KAl(SO4)2·12H2O 十二水合硫酸铝钾
https://en.wikipedia.org/wiki/Potassium_alum
https://zh.wikipedia.org/wiki/明矾
https://en.wikipedia.org/wiki/Alum
https://en.wikipedia.org/wiki/Aluminium
https://zh.wikipedia.org/wiki/铝
https://en.wikipedia.org/wiki/Potassium
https://zh.wikipedia.org/wiki/钾

钠明矾: NaAl(SO4)2·12H2O
https://en.wikipedia.org/wiki/Sodium_alum
https://zh.wikipedia.org/wiki/硫酸铝钠
https://en.wikipedia.org/wiki/Sodium
https://zh.wikipedia.org/wiki/钠

硫酸铝铵: NH4Al(SO4)2·12H2O
https://en.wikipedia.org/wiki/Ammonium_alum
https://zh.wikipedia.org/wiki/硫酸铝铵
https://en.wikipedia.org/wiki/Ammonium
https://zh.wikipedia.org/wiki/铵

2.2 baking soda 小苏打 NaHCO3 碳酸氢钠

小苏打: NaHCO3 碳酸氢钠(sodium bicarbonate、IUPAC名: sodium hydrogen carbonate、baking soda)是一种无机化合物,化学式为NaHCO3,俗称小苏打、苏打粉、重曹、焙用碱等,白色细小晶体,在水中的溶解度小于碳酸钠,呈弱碱性。
https://en.wikipedia.org/wiki/Sodium_bicarbonate
https://zh.wikipedia.org/wiki/碳酸氢钠
50℃以上开始逐渐分解生成碳酸钠、二氧化碳和水,270℃时完全分解。碳酸氢钠是强碱与弱酸经中和作用后生成的酸式盐,溶于水时呈现弱碱性。
2 NaHCO3 → Na2CO3 + H2O + CO2↑
常利用此特性作为食品制作过程中的膨松剂。

制法: 碳酸氢钠最常见的制备方法是将二氧化碳通入碳酸钠溶液中,结晶得到:
Na2CO3 + CO2 + H2O → 2 NaHCO3

2 NaCl + 2 H2O + 2 CO2 -通电→ 2 NaHCO3 + Cl2↑ + H2↑
在此反应中,饱和食盐水由于通入过量二氧化碳而电解生成碳酸氢钠和氯气、氢气。
应用:
  • 碳酸氢钠与油脂直接混合时会产生皂化,肥皂味太强烈会影响西点的香味和品质。
  • 碳酸氢钠经常被用作中和剂,例如平衡巧克力的酸性。同时也可使巧克力的颜色加深,使它看起来更黑亮。
  • 如在西点中加入过量碳酸氢钠,除了会破坏品质、导致碱味过重,也会令食用者出现心悸、嘴唇发麻、短暂失去味觉等征状。
  • 小苏打可分为药用、食用、工业用,随着种类不同在购买地点上也不同。其中,工业用的小苏打粉的纯度较低,杂质较多,相对的食用的小苏打粉纯度较高。
  • 小苏打粉应用于家庭清洁,可以去污、除臭。因油腻、污渍或难闻气味,大多属于酸性物质(H+,如脂肪酸),当弱碱性的氢氧根OH- 与酸性物质相遇,便会产生中和作用。涂抹脏污静待数分钟,之后再轻轻擦拭即可。(不可与醋混和使用)

2.3 soda 苏打 Na2CO3 碳酸钠 碱面

苏打: Na2CO3 碳酸钠(英语:sodium carbonate),俗名苏打(soda)、纯碱(soda ash 、soda crystals)、洗涤碱(washing soda),生活中亦常称“碱”。
https://en.wikipedia.org/wiki/Sodium_carbonate
https://zh.wikipedia.org/wiki/碳酸钠
碳酸钠是一种食品添加剂(E500),用作酸度调节剂,防结块剂,起泡剂和稳定剂。
碳酸钠腐蚀铝炊具,器皿和铝箔。

2.4 小苏打与苏打

中文名	英文名   	Yeast化学式	化学名	食品用途 	例如:	冷水	热水	白醋
小苏打	baking soda	NaHCO3	碳酸氢钠	作为发泡剂	松饼油条	无反应	热解反应	中和反应,大量气泡
苏打	soda    	Na2CO3	碳酸钠	中和酸的味道	馒头等	无反应	无反应	不如小苏打气泡多
这两个物质有很相似,但是有一些不同。最主要的区别有两点:
1. 两个同为碱性物质都可以和酸发应,并且释放气体。但是小苏打(baking soda)和酸会产生更多的气体。小苏打在食谱中通常是作为发泡剂之一, 遇热,遇酸二次发泡。而碱面(sodium carbonate/dietary alkali)很少作为主要的发泡剂,常常用来中和酸性口味。
2. 小苏打受热会分解产生气体,而碱面受热不会。所以做面条的时候,为了不降低它的筋性,通常会放碱面。即便是用小苏打,也会先拿热水把它化开,让它热解后转化Yeast为碱面溶液之后再来和面。

利用小苏打的热解反应制作碱面:
小苏打热解反应:遇热会分解生成碳酸钠,水,二氧化碳
小苏打放入预热好的烤箱,95度烤半小时,冷却后取出,避免冷却过程中和空气中的水接触。

2.5 在小苏打 NaHCO3 出现之前的碳酸氢铵 NH4HCO3

碳酸氢铵: NH4HCO3 在小苏打 NaHCO3 出现之前,碳酸氢铵在食品工业中作为膨松剂。
https://en.wikipedia.org/wiki/Ammonium_bicarbonate
https://zh.wikipedia.org/wiki/碳酸氢铵

3. 生物膨松剂:酵母

拼音:中国大陆:jiàomǔ、台湾:xiàomǔ;
酵母: 是真核生物域真菌界之下的一个非分类学术语,泛指能发酵糖类的各种单细胞微生物。
https://en.wikipedia.org/wiki/Yeast
https://zh.wikipedia.org/wiki/酵母
在酿酒过程中,乙醇被保留下来;在烤面包或蒸馒头的过程中,CO2将面团发起,而酒精则挥发。
发面过程中同时存在的两个变化过程:
1. 淀粉酶分解淀粉产生糖。
2. 在无氧的环境下酵母生长繁殖,消耗糖,产生二氧化碳和酒精。
糖为什么会帮助发酵。因为酵母消耗糖来生长繁殖,而在发酵初期,淀粉酶分解淀粉的速度跟不上,产生的糖有限。
低温发酵会增加面粉的香甜。低温下,酵母停止生长繁殖,不再消耗糖。而淀粉酶还再继续分解淀粉产生糖。所以面团里的糖越来越多,你可以品尝到它的甜味。

3.1 普通面包过程

1. 和面:盐,糖,酵母在水中化开,倒入面粉,搅拌混合。
2. 醒面:约20分钟,让面筋自然形成。
3. 揉面:加入油脂,揉面。
4. 分味发酵:约90分钟,面团体积增长至2倍大。
5. 排气揉面:揉面,将气体排出,造型。
6. 形态发酵:约45分钟。
7. 烘烤:加入预热的烤箱烘烤。

3.2 免揉面包

https://en.wikipedia.org/wiki/No-knead_bread
免揉面包是一种面包烘烤的方法,它使用很长的发酵(上升)时间而不是揉捏形成使面包具有质地的面筋。它的特点是酵母含量低,面团很湿。一些食谱通过在荷兰烤箱或其他有盖容器中烘烤面包来改善面包皮的质量。
配料	克	百分比
面粉	400	100%
盐	8	2%
酵母粉	1	0.25%
水	300	75%
1. 和面:盐,酵母在水中化开,倒入面粉,搅拌混合。
4. 长时发酵:覆盖发酵12到18个小时,直到大小翻倍并覆盖气泡。
5. 排气揉面:折叠几下,成型。
6. 二次发酵:一两个小时。
7. 烘烤:然后将其放入450°F(232°C)预热的烤箱。将面包在有盖的锅中烘烤30分钟,然后除去盖子,再烘烤15至30分钟,直到外壳变成深褐色,然后从锅中取出并冷却一小时。
该方法使用较长的时间而不是揉捏来使面团的面筋分子彼此对齐,从而产生牢固的弹性网络,从而产生长而粘的股线。由于面团的湿润,自动对齐是可能的,这使分子更易移动。
小结:使用更多的水和盐,加上更长的发酵时间。不需要糖也不加入油脂。

4. See More

调味品清单:
https://en.wikipedia.org/wiki/List_of_condiments
食品添加剂:
https://en.wikipedia.org/wiki/Food_additive
https://en.wikipedia.org/wiki/List_of_food_additives
https://zh.wikipedia.org/wiki/食品添加剂
类别:家用化学品:
https://en.wikipedia.org/wiki/Category:Household_chemicals

Flour

1. 面粉
	1.1 面粉中使用的谷物(草果)的部分:
	1.2 三种类型的面粉:
	1.3 面筋
	1.4 面粉的主要成分
2. 面团
	2.1 万能面团
	2.2 放盐糖和油的作用
3. 厨房设备建议(要求)的面水比

1. 面粉

https://en.wikipedia.org/wiki/Wheat_flour
https://zh.wikipedia.org/wiki/麵粉
https://en.wikipedia.org/wiki/Flour

1.1 面粉中使用的谷物(草果)的部分:

  • Endosperm 胚乳(83%): 蛋白质/淀粉部分; https://en.wikipedia.org/wiki/Endosperm ; https://zh.wikipedia.org/wiki/胚乳
  • Cereal_germ 胚芽(3%): 蛋白质/脂肪/富含维生素的部分; https://en.wikipedia.org/wiki/Cereal_germ
  • Bran 麸皮(14%): 纤维部分. https://en.wikipedia.org/wiki/Bran

1.2 三种类型的面粉:

  • 白面粉仅由胚乳制成。
  • 棕粉包括谷物的某些胚芽和麸皮,而全谷物或全麦粉则是由整个谷物制成的,包括麸皮,胚乳和胚芽。
  • 胚芽粉由胚乳和胚芽制成,不包括麸皮。

1.3 面筋

面筋(麸质),是指使生面团具有筋力的物质。实际上筋力高低主要取决于面粉中的蛋白质含量的高低。

麸质: 又称麸质蛋白、麦胶、面筋、面筋蛋白、谷胶蛋白,存在于多种谷物中,是大麦、小麦、燕麦、黑麦等谷物中最普遍的蛋白质。

https://en.wikipedia.org/wiki/Gluten
https://zh.wikipedia.org/wiki/麸质

面粉可以分为特高筋面粉、高筋面粉、中筋面粉、低筋面粉及无筋面粉。五种面粉的分别在于其黏度的不同。

  • 特高筋面粉: 蛋白质含量为13.5%以上。
  • 高筋面粉: 蛋白质含量约12.5 ~ 13.5%,蛋白质含量高,因此筋度强,多用来做面包等。
  • 中筋面粉: 蛋白质含量为9.5 ~ 12.0%,中筋粉多用在中式点心制作上:如包子、馒头,饺子皮等。而大部分中式点心都是以中筋粉来制作的。
  • 低筋面粉: 蛋白质含量在8.5%以下,因此筋性亦弱,多用来做蛋糕的松软糕点。
    • 如果找不到低筋面粉,可选那些颜色较为白的普通面粉, 因为漂白过的面粉或混入20%玉米粉的面粉筋性会相对较低。或者向面粉中加入还原剂(食品添加剂,如山梨酸、抗坏血酸),作用机理是使得面粉中蛋白质分子的二硫键断裂,形成硫氢键,从而降低了面粉筋力。或者添加蛋白酶,作用机理是切断面粉中蛋白质的肽链,从而降低面粉筋力。
  • 无筋面粉(澄面): 是一种完全不含蛋白质的面粉,可以制作虾饺的皮、银针粉等。
  • 自发粉:是白面粉,与化学膨松剂预混合出售。它是亨利·琼斯发明的。自发面粉通常由以下比例组成: 100克面粉; 3克发酵粉; (1g或更小)盐.

1.4 面粉的主要成分

面粉的主要成分有淀粉、蛋白质、脂肪、水、矿物质以及少量的维生素和酶类。

  • 淀粉约占75%。制作面包时,淀粉在酸和酶的作用下,水解成糊精、高糖、麦芽糖和葡萄糖,参与麦拉德反应和焦糖化反应,赋予面包的色泽和风味,同时也为酵母提供食物。
  • 小麦中的蛋白质含量约为8%-16%,包括四种:麦谷蛋白、麦胶蛋白、麦球蛋白以及麦清蛋白。其中麦胶蛋白和麦谷蛋白两种合计占蛋白质总量的80%左右,是形成面筋的主要成分。
  • 小麦中的酶主要有淀粉酶、蛋白酶、脂肪酶和氧化酶。淀粉酶主要包括α-淀粉酶和β-淀粉酶,通常面粉中β-淀粉酶足够,而α-淀粉酶含量不足,需要额外添加。

2. 面团

https://www.youtube.com/watch?v=Vj9lM6iBo1U&ab_channel=小高姐的MagicIngredients 

  • 死面面团: 面粉和水,无酵母,不会发酵膨松的面团。通常作为面条,饺子皮等。
  • 发面面团: 面粉, 水, 酵母, 会发酵膨松的面团。通常制作包子皮,馒头,面包等。
  • 烫面面团: 面粉, 开水, 通常不会单独使用。(功能是使得面团可以吸收更多水份)
  • 半发面: 例如羊肉泡沫的饼(1分发面面团,9分死面面团)
  • 半烫面: 发面+烫面, 汤种面包。烫面+死面,烙饼。

2.1 万能面团

https://www.youtube.com/watch?v=LHEcT58pZis&ab_channel=小高姐的MagicIngredients
https://www.youtube.com/watch?v=5zPqwH8AqXI&ab_channel=小高姐的MagicIngredients

成分		(g)	烘焙%	
Flour	面粉	400		
Water	水	240	60.0%	
Yeast	酵母	4	1.0%	
Salt	盐	2	0.5%	可选
Sugar	糖	15	4.0%	可选
Oil or fat	油	15	4.0%	可选

2.2 放盐糖和油的作用

放盐,有利于面筋的形成.
和面不要急于揉面,醒面20分钟后,面筋就形成了。

可能会被忽略的放油时机

  • 面筋形成前放油,可以阻断面筋形成;[油炸麻叶]: 先放油,用油把面粉颗粒包裹起来,35g油,到后面加入水的时候,面筋就不能顺利形成了。最后炸出来就会酥脆。
  • 面筋形成之后放油,油包裹在面筋的周围,使制作出来的面食更加柔软。[土司面包]: 先加水,20分钟的融合时间,然后再加入油,25g油,这个油可以让面包柔软,但是不会影响它的面筋结构,烤出来就是拉丝的状态。

在烤的食谱中,油可以多加。煮的食谱中不加。

放糖,有助于发酵.发面过程中同时存在的两个变化过程: 

  1. 淀粉酶分解淀粉产生糖。
  2. 在无氧的环境下酵母生长繁殖,消耗糖,产生二氧化碳和酒精。

  • 糖为什么会帮助发酵。因为酵母消耗糖来生长繁殖,而在发酵初期,淀粉酶分解淀粉的速度跟不上,产生的糖有限。
  • 低温发酵会增加面粉的香甜。低温下,酵母停止生长繁殖,不再消耗糖。而淀粉酶还再继续分解淀粉产生糖。所以面团里的糖越来越多,你可以品尝到它的甜味。

3. 厨房设备建议(要求)的面水比

设备名称 	面团类型	面粉g	水g	水%	备注	设备型号	¥
厨师机(揉面机)	万能面团	500	300	60%		ACA ASM-DC830	¥1,300
全自动面包机	面条面团	300	150	50%	盐6g	Midea MM-ESC1510	¥300
全自动面包机	发面面团	350	200	57%	盐6g;酵母3g;糖36g;油24g;		
全自动面包机	面包面团	350	220	63%	盐6g;酵母3g;糖24g;油24g;		
全自动面条机	面条	500	190	38%		Midea MJ-NS1802C	¥400
手摇压面机	面条	300	100	33%		Shule QM430-2	¥220
煎饼机(手持)	面糊	200	400	200%			¥80

Bevel-gears

导航 (返回顶部) 1. 锥齿轮 1.1 切面图示 1.2 优缺点 1.3 锥齿轮的几何形状 1.4 Teeth 齿 2. 锥齿轮分类 2.1 直齿线 Straight tooth lines 2.2 螺旋齿线 Spiral tooth lines 2.3 Z...