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
数据报文流量
iptables,netfilter
路由表
路由决策
接收数据报文后先进行路由决策iptables,netfilter

netfilter
hook :钩子函数
1 、2、、3钩子函数位置
iptables,netfilter
另外两个位置 ,刚刚进入路由表决策之前,在出站网卡缓冲区中
未出站前
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
源地址转换
目标地址转换
规则顺序
iptables,netfilter
自定义链只有被调用才能发挥作用,而且如果没有自定义链的任何规则匹配到,应该有返回机制
用户可以删除自定义的空链
默认链无法删除
每个规则都有两个内置的计数器
被匹配的报文个数
被匹配的报文大小之和
使用自定义链可以提高匹配效率

规则:匹配标准,处理动作
匹配标准 :
通用匹配 自身可以实现
-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图示
iptables,netfilter
/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
令牌桶机制
iptables,netfilter