最近一项目频繁创建多网卡接口SNAT,发现在部分在SNAT规则后并不实时生效,如果持续尝试连接指定连接会一直不生效,停止后过段时间或测试其它连接就正常了,原因是:
Linux的NAT不能及时生效,因为它是基于ip_conntrack的,如果在NAT的iptables规则添加之前,此流的数据包已经绑定了一个ip_conntrack,那么该NAT规则就不会生效,直到此ip_conntrack过期,如果一直有数据在鲁莽地尝试传输,那么就会陷入僵持状态。
http://blog.csdn.net/dog250/article/details/17654157
SNAT不实时生效
发布时间:November 12, 2015 // 分类:Iptables // No Comments
Iptables实现公网IP DNAT/SNAT
发布时间:June 13, 2013 // 分类:Iptables // No Comments
Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象。
以下命令将客户端访问1.1.1.1的HTTP数据DNAT到2.2.2.2,很多人往往只做这一步,然后测试不能正常连接。
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to 2.2.2.2:80
想像一下此时客户端访问1.1.1.1的数据流程:
客户端访问1.1.1.1
1.1.1.1根据Iptables DNA将数据包发往2.2.2.2,此时源IP为客户端IP
2.2.2.2处理后根据源IP直接向客户端返回数据,要知道此时客户端是直接和1.1.1.1连接的
然后呢,客户端不知所云,不能正常连接
最后还要添加一条SNAT规则,将发到2.2.2.2的数据包SNAT,1.1.1.1充当代理服务器的角色。
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to-source 1.1.1.1
别忘记开启内核转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
Iptables下TCP标志tcp-flags匹配模块使用
发布时间:November 12, 2012 // 分类:Iptables // No Comments
Iptables可通过匹配TCP的特定标志而设定更加严谨的防火墙规则,tcp-flags参数使用如下:
-p tcp --tcp-flags
#匹配指定的TCP标记,有两个参数列表,列表内部用逗号为分隔符,两个列表之间用空格分开。
#第一个列表用作参数检查,第二个列表用作参数匹配。
#可用以下标志:
SYN、ACK、FIN、RST 、URG、PSH、ALL、NONE
#ALL是指选定所有的标记,NONE是指未选定任何标记。
--syn
#https://www.haiyun.me
#SYN标志设置为1,其它标志未设置,相当于:
-p tcp --tcp-flags ALL SYN
很多人在使用tcp-flags匹配时遇到以下错误:
iptables v1.4.6: --tcp-flags requires two args.
原因是只定义了参数检查,未设置参数匹配,ROS下使用一组参数就可以了,正确使用tcp-flags应用示例:
防止Xmas扫描:
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
防止TCP Null扫描:
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
拒绝TCP标记为SYN/ACK但连接状态为NEW的数据包,防止ACK欺骗。
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP
Iptables数据包、连接标记模块MARK/CONNMARK使用
发布时间:November 7, 2012 // 分类:Iptables // No Comments
MARK标记用于将特定的数据包打上标签,供Iptables配合TC做QOS流量限制或应用策略路由。
看看和MARK相关的有哪些模块:
ls /usr/lib/iptables/|grep -i mark
libxt_CONNMARK.so
libxt_MARK.so
libxt_connmark.so
libxt_mark.so
其中大写的为标记模块,小写的为匹配模块,它们之间是相辅相成的,分别作用如下:
#https://www.haiyun.me
iptables -j MARK --help
--set-mark #标记数据包
iptables -t mangle -A PREROUTING -p tcp -j MARK --set-mark 1
#所有TCP数据标记1
iptables -m mark --help
--mark value #匹配数据包的MARK标记
iptables -t mangle -A PREROUTING -p tcp -m mark --mark 1 -j CONNMARK --save-mark
#匹配标记1的数据并保存数据包中的MARK到连接中
iptables -j CONNMARK --help
--set-mark #标记连接
--save-mark #保存数据包中的MARK到连接中
--restore-mark #将连接中的MARK设置到同一连接的其它数据包中
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --set-mark 1
iptables -m connmark --help
--mark value #匹配连接的MARK的标记
iptables -t mangle -A PREROUTING -p tcp -m connmark --mark 1 -j CONNMARK --restore-mark
#匹配连接标记1并将连接中的标记设置到数据包中
分类
- Apache (13)
- Nginx (45)
- PHP (86)
- IIS (8)
- Mail (17)
- DNS (16)
- Cacti (14)
- Squid (5)
- Nagios (4)
- Puppet (7)
- CentOS (13)
- Iptables (23)
- RADIUS (3)
- OpenWrt (41)
- DD-WRT (1)
- VMware (9)
- 网站程序 (2)
- 备份存储 (11)
- 常用软件 (20)
- 日记分析 (10)
- Linux基础 (18)
- 欧诺代理 (0)
- Linux服务 (18)
- 系统监控 (4)
- 流量监控 (7)
- 虚拟化 (28)
- 伪静态 (2)
- LVM (3)
- Shell (18)
- 高可用 (2)
- 数据库 (16)
- FreeBSD (3)
- 网络安全 (25)
- Windows (35)
- 网络工具 (22)
- 控制面板 (3)
- 系统调优 (10)
- Cisco (3)
- VPN (5)
- ROS (20)
- Vim (14)
- KMS (4)
- PXE (2)
- Mac (1)
- Git (1)
- PE (1)
- LNS (2)
- Xshell (7)
- Firefox (13)
- Cygwin (4)
- OpenSSL (9)
- Sandboxie (3)
- StrokesPlus (1)
- AutoHotKey (4)
- Total Commander (3)
- WordPress (3)
- iMacros (6)
- Typecho (2)
- Ollydbg (1)
- Photoshop (1)
- 正则 (3)
- Debian (3)
- Python (8)
- NoSQL (6)
- 消息队列 (4)
- JS (7)
- Tmux (3)
- GO (7)
- HHVM (2)
- 算法 (1)
- Docker (2)
- PT (15)
- N1 (16)
- K2P (6)
- LUKS (4)
最新文章
- linux用tc给软件应用或ip做qos限制下载上传速度
- linux/ubuntu交叉静态编译mips tmux和dropbear/openssl/openssh/bash
- 使用squashfs-tools和binwalk修改路由/光猫固件rootfs文件
- 此内容被密码保护
- openwrt/immortalwrt编译内核模块并修改版本号
- 联通贝尔光猫G-140W-UG修改为桥接/管理员密码并开启telnet
- linux/openwrt清空iptables连接跟踪状态表conntrack
- debian11或pve编译安装最新版qbittorrent-nox
- x86运行arm64 docker
- 编译纯净版k2p padavan支持802.11 kvr固件
最近回复
- jiangker: good, very helpful to me
- fengfeng: N1 armbian 能有编译下内核吗。。我要开启can 不懂怎么操作
- 1: 方法一ngtcp2要改下:./configure PKG_CONFIG_PATH=/usr/l...
- 海运: 关闭服务器
- 海风: override.battery.charge.low以及override.battery.r...
- koldjf: 不能过滤
- 杰迪武士: 此文甚好甚强巨,依照此文在树莓派2 + Rasbian上部署成功 感谢博主美文共赏
- 海运: ups不知有没选项可设置此参数,不过你可以在另外一台电脑上安装nut客户端自动关机。
- kgami: 想请教一下,设置了的电脑自动关机之后,几秒后UPS怎么也跟着关机了,导致另外一台电脑没关机就断...
- 海运: 写的很详细了啊,/etc/nut/hosts.conf用以nut-cgi连接nut服务器参数,...