#5 Linux 网络:开放端口范围
LinuxNetwork Linux 2023-03-03线上环境,有一个服务启动时,四个进程只成功了三个,检查发现端口被占用。
再一看,是被另外三个进程中的一个连接 MongoDB 占用了。
# 查看
cat /proc/sys/net/ipv4/ip_local_port_range
1024 65000
$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65000
PS:查了一下,个人机器(Ubuntu)上配置的是:32768 60999
把下限往上提到 20000,避开服务常用接口:
# 临时配置
echo "20000 65000" > /proc/sys/net/ipv4/ip_local_port_range
sysctl -w net.ipv4.ip_local_port_range="20000 65000"
# 持久配置
vim /etc/sysctl.conf
#4 iptables (2): 基本操作
LinuxNetwork 网络管理 iptables 2021-04-04命令参数
iptables -[ACD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LS] [chain [rulenum]] [options]
iptables -[FZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
链相关
--new -N [chain]链:创建--delete-chain -X [chain]链:删除--rename-chain -E old-chain new-chain链:更名--list -L [chain [rulenum]]列出指定链或所有链中的所有规则(表格形式)--list-rules -S [chain [rulenum]]同上,不过是按照规则定义的格式列出 很好用--flush -F [chain]清空规则--zero -Z [chain [rulenum]]计数器清零(数据包计数器,流量计数器)--policy -P chain target修改策略
规则相关
--append -A chain rule-specification附加规则--check -C chain rule-specification检查规则是否存在--delete -D chain rule-specification删除匹配规则--delete -D chain rulenum删除 指定序号的 规则--insert -I chain [rulenum]插入到指定位置(默认插入到第一个)--replace -R chain rulenum替换 指定序号的 规则
规则说明
常用命令
查看
sudo iptables -S
sudo iptables -t nat -S POSTROUTING
sudo iptables -nL
sudo iptables -nL INPUT
sudo iptables -nL --line-numbers
sudo iptables -Z
sudo iptables -Z INPUT
sudo iptables -Z INPUT 1
# 如果是这么定义的话:
# -A INPUT -m conntrack --ctstate INVALID -j DROP
sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
sudo iptables -D INPUT 3
访问拦截
# 对指定端口放行
sudo iptables -I INPUT -p tcp --dport 1022 -j ACCEPT
# 禁止来自无线网络的流量访问某端口(突发奇想的一个小例子)
sudo iptables -A PREROUTINE -i wlp6s0 --dport 22 -j DROP
NAT
iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1
iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102
iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80
对指定流量打标记
内核可以给这个包加上一个标记(可能存在包的数据结构中,总之,只对本地环境有效),可以实现流量的统计、限制等其他复杂的控制。
标记值最大可以到 2^32
iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
//打标记
iptables -t mangle -A PREROUTING -j MARK --set-mark 33
//匹配标记
iptables -t nat -A PREROUTING -m mark --mark 33 -j ACCEPT
//or-mark
iptables -t mangle -A PREROUTING -j MARK --or-mark 0x400
//掩码匹配
iptables -t nat -A PREROUTING -m mark --mark 0x400/0x400 -j ACCEPT
iptables -t mangle -A INPUT -m state --state NEW -j MARK --set-mark 1
iptables -t mangle -A INPUT -j CONNMARK --save-mark
iptables -t mangle -A INPUT -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -mttl --ttl-eq 64 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -mttl --ttl-eq 123 -j MARK --set-mark 20
iptables -t filter -A FORWARD -m mark--mark 10 -j ACCEPT
iptables -t filter -A FORWARD -m mark--mark 20 -j DROP
iptables -t mangle -A QOS_MARK_FORWARD_eth1 -j CONNMARK --restore-mark --nfmask 0xfffff --ctmask 0xfffff
iptables -t mangle -A QOS_MARK_FORWARD_eth1 -m mark --mark 0x0/0xfffff -j QOS_RULES_FORWARD_eth1
iptables -t mangle -A QOS_RULES_FORWARD_eth1 -j CONNMARK --save-mark --nfmask 0xfffff --ctmask 0xfffff
iptables -t mangle -A POSTROUTING -m iprange --src-range 192.168.0.2-192.168.0.200 -j MARK --or-mark 0x1
-m mark
-m connmark
-j MARK
-j CONNMARK
-j CONNSECMARK
-j SECMARK
--set-mark value设置nfmark值--and-mark valuenfmark与value与运算--or-mark valuenfmark与value或运算
匹配
[!] --mark value[/mask]
iptables -t mangle -A INPUT -m mark --mark 1
限速
思路:hashlimit 模块
屏蔽指定网站
利用 string 模块 (xt_string.ko) 做域名匹配:
sudo iptables -A OUTPUT -m string --string baidu.com --algo bm -j LOG --log-prefix "iptables-test:blocked:baidu.com: "
sudo iptables -A OUTPUT -m string --string baidu.com --algo bm -j DROP
sudo iptables -vnL
curl https://www.baidu.com/
tail -f /var/log/syslog | grep "iptables-test"
sudo iptables -F OUTPUT
sudo iptables -A FORWARD -m string --string baidu.com --algo bm -j LOG --log-prefix "iptables-test:blocked:baidu.com: "
sudo iptables -A FORWARD -m string --string baidu.com --algo bm -j DROP
HTTPS 居然也可以生效,其原理我还不清楚,到底是匹配到了包的哪一部分包含了 baidu.com 呢?
提示:
- 这个规则也可以放到 INPUT 链上。
- 如果加上
-p tcp –dport 80可能更加精确,免得别的什么包里面包含了 baidu.com 被拦截。 - 可以加多个 string 参数。
如果是 HTTP 的话,在我的理解范围之内,可以做到更细致的匹配,比如匹配到路径,甚至 Cookie。
string match options:
--from Offset to start searching from
--to Offset to stop searching
--algo Algorithm
--icase Ignore case (default: 0)
[!] --string string Match a string in a packet
[!] --hex-string string Match a hex string in a packet
algo 的选项:bm, kmp,参考 man iptables-extensions。
参考资料与拓展阅读
- DigitalOcean, https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules
- 8gwifi, Introduction to iptables and iptables top 20 common rules
- CSDN博客, 用iptables对连接打MARK,但应用层为什么无法读到?
- StackOverflow, I set socket MARK and TTL with iptables, but I can't read it from getsockopt?
- StackExchange, iptables --set-mark - Route diferent ports through different interfaces
- https://unix.stackexchange.com/questions/58635/iptables-set-mark-route-diferent-ports-through-different-interfaces
#3 iptables (1): 基础知识
LinuxNetwork 网络管理 iptables 2021-04-03iptables 的历史变更,发展趋势,和其他技术的关联我也曾花了不少时间去了解,可以说还是很不全面,就不献丑了(或者以后再来说说)。
这里就单单讲一下 iptables。
基本思想
在网络数据传输过程中有几个关键点埋上钩子,每个钩子上绑定了一个规则链(CHAIN)。
我们在这些链上注册一些处理规则(RULE),也就是 条件 加 操作。
网络包走到埋点的地方时,内核会逐个规则检查,如果符合条件就会执行预定操作。
此外:
- 这些处理规则按照不同类型,分成了五类,存在五张不同的表中。
- 每个规则链可以设置一个预定的操作(文档中称之为:策略 Policy)。
五个点
PREROUTING路由:内核收到网络包之后,判断该包是否是自己的,应该给哪个程序INPUT用户程序收到包之前(内核判断是自己的包之后,传输到用户程序)OUTPUT程序往外发包FORWARD这个包不是自己的,然后需要中转出去POSTROUTING路由:系统判断该包应该怎么发出
PS:可以自定义新的链,然后再别的链中引用。我所处理的任务都没有到需要创建新链的地步,所以没有接触过。
五张表
应该说是五个功能。
- filter 过滤,即判断这个包。默认
- nat 地址转换
- mangle 数据包修改,日常网络管理应该不会用到
- raw 数据包修改(在内核处理之前)
- security unknown
操作类型
ACCEPT放行DROP拦截REJECT拦截,但是告知对方MARK加标记
NAT
SNAT源地址转换DNAT目的地址转换REDIRECT端口转换
参考资料与拓展阅读
- 微信公众号,码洞,Linux 网络瑞士军刀 iptables 基本原理 —— 高端必备
- 微信公众号,一口Linux,深入理解 netfilter 和 iptables
#2 查看 WiFi 密码
计算机网络 LinuxNetwork WiFi 2019-05-03在 Windows, Linux,MacOS,Android 上查看 WiFi 密码的方法。
#1 OpenStack 相关网络技术
虚拟化 云计算 OpenStack 计算机网络 LinuxNetwork 2018-03-24相关文章:
- 2015/03/04, Linux 网络管理
物理设备
- VLAN 虚拟局域网,设备层面上的网络分区,网络设备提供的功能
网络报文给 VLAN Tag 分配了四个字节,其中 3 个字节用于 VLAN ID,1 个字节用于 VLAN Priority。
作为 VLAN ID 的 12bit(0-4095)中,首位两数作为保留值,也就是说 VLAN 技术支持的最大网络数是 4094。
Linux 网络技术
在 Linux 内核的网络设备管理层,虚拟设备和物理设备是同等地位。
- network namespace 网络隔离,虚拟化的基础
- bridge 网桥,相当于交换机,二层数据交换
- veth 虚拟网口,成对出现,两个虚拟网口之间可以相互连接(可以跨 namespace)
- tap/tun
- tap TAP 设备,虚拟二层网络,处理 TCP/UDP 包,
有自己的 MAC 地址,可以桥接到物理网卡 - tun TUN 设备,虚拟三层网络,处理 IP 包
- iptables 网络管理
确切的说是以 iptables 为代表的一系列网络管理技术
KVM / Neutron
- qvb neutron 网络桥
- qvo neutron 网络虚拟接口
Neutron 网络模式:
- VLAN
- VXLAN 虚拟拓展局域网,在三层 UDP 协议中封装二层数据包,突破 VLAN 的限制
- GRE Gerneral Routing Encapsulation,通用路由封装协议