iptables链接追踪state/recent/NAT(三)

2023年 7月 16日 48.6k 0

iptables概念和参数(一)

iptables基本规则演示(二)

四表:filter, nat, mangle, raw (低-->高)
五链:PREROUTING, INPUT, FOWARD, OUTPUT, POSTROUTING

链参数:添加 -N,删除 -X ,清空 -F,定义 -P ,重命名 -E,清空 -Z
规则参数:附加 -A, 插入 -I, 删除 -D, 替换 -R

查看-L -n -x -v

7,state扩展:链接追踪
state扩展:
启用连接追踪模板记录连接,并根据连接匹配连接状态的扩展;
启用连接追踪功能之前:简单包过滤防火墙;
启用连接追踪功能:带状态检测的包过滤防火墙;

专用选项:
--state STATE

调整连接追踪功能所能容纳的连接的最大数目:
/proc/sys/net/nf_conntrack_max

当前追踪的所有连接:
/proc/net/nf_conntrack

不同协议或连接类型追踪时的时长属性:
/proc/sys/net/netfilter/

插入在input第一条目标地址172.16.100.11,协议为TCP,放行两个链接 multiport,--dport 两个端口22,80,
state在做状态扩展,如果状态是NEW,允许,如果是ESTABLISHED也允许(链接建立第一次为NEW,其他都是ESTABLISHED)

iptables -I INPUT 1 -d 172.16.100.11 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT

 

放行来自源地址出站所有请求响应,只检查状态state 是ESTABLISHED -j ACCEPT
iptables -I OUTPUT 1 -s 172.16.100.11 -m state ESTABLISHED -j ACCEPT

放行ping请求
iptable -A input -d 172.16.100.11 -p icmp --icmp-type 8 -m state NEW,ESTABLISHED -j AACPT
注意:
接追踪功能所能容纳的连接的最大数目是:223740
/proc/sys/net/nf_conntrack_max
可以echo修改,也可以修改文件修改!

而某些大型互联网的负载均衡调度器能优化400W个链接,在某些场合中是不能开启的。
lsmod可查看 ,卸载
nf_conntrack

安全放行80端口,172.16.0.1为yum仓库地址
iptable -A OUTPUT -d 172.16.0.1 -p tcp --dport 80 -m state --state NEW -j ACCEPT
我们也可以这样写:
添加一条规则,为第一条,不管源是谁,目标是172.16.100.11.无论是那种协议,我们只检查状态,只要状态是ESTABLISHED,全放行
iptables -I INTPUT 1 -d 172.16.100.11 -m state ESTABLISHED -j ACCEPT
修改原来的第一条,为2,不管源是谁,目前是172.16.100.11,multiport放行22,80,状态为NEW,和multiport都放行
iptables -R INPUT 2 -d 172.16.100.11 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
TARGET:
如何放行被动模式下的ftp服务:
(1) 装载模块:
# modprobe nf_conntrack_ftp

(2) 放行请求报文
放行入站请求端口为21的请求报文;
放行所有状态为ESTABLISHED和RELATED状态的入站报文;

(3) 放行出站响应报文
放行所有状态为ESTABLISHED的出站报文;

对FTP而言,需要放行请求状态,还需求启动模块
iptables -R input 1 -d 172.16.100.11 -m multiport --dports
80,22,21 -m state --state NEW -j ACCEPT
iptables -R INPUT 1 -d 172.16.100.11 -m state ESTABLISHED,RELATED -j ACCEPT

装载FTP模块:modeprobe nf_conntrack_ftp
装载完毕,而后便可以追踪模块了
,现在便可以正常使用FTP了
如何保存及重载规则:
保存:
(1) service iptables save
调用内置命令save来保存
/etc/sysconfig/iptables文件;
(2) iptables-save > /PATH/TO/SOMEFILE
输出重定向保存,如果输出则无法使用service调用了
重载:
(1) service iptables reload

(2) iptables-restore < /PATH/FROM/SOMEFILE

也可以cat查看这些规则:
cat /etc/sysconfig/iptables
如果你使用vi来手动修改,难免会出现语法错误难以检查!
-j: jump,跳转目标
内置目标:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
自定义链:

NAT:Network Address Translation

仅从请求报文判断,地址转换:
源地址转换:SNAT
目标地址转换:DNAT
端口转换:PNAT

NAT Server: 能根据需要实现所谓的SNAT、DNAT或PNAT;
并非是用户空间运行的进程完成转换功能,靠的是内核中地址转换规则;

SNAT: CIP --> SIP: CIP --> SNAT(PIP) --> SIP
CIP: 本地客户端地址
DNAT:RemoteIP --> PIP: RemoteIP --> DNAT(SIP) --> SIP
RemoteIP:远程客户端地址;
PNAT:端口转换

私有的客户端访问互联网的方法:
(1) SNAT
(2) Proxy

SNAT:主要用于实现让内网客户端访问外部主机时使用;
注意:要定义在POSTROUTING链;也可以在OUTPUT上使用;

定义方法:
iptables -t nat -A POSTROUTING -s 内网网络或主机地址 -j SNAT --to-source NAT服务器上的某外网地址

另一个TARGET:
MASQUERADE:地址伪装;
能自行判断该转为哪个源地址;

iptables -t nat -A POSTROUTING -s 内网网络或主机地址 -j MASQUERADE

DNAT:主要用于发布内部服务器,让内网中的服务器在外网中可以被访问到;
注意:要定义在PREROUTING链;

iptables -t nat -A PREROUTING -d NAT服务器的某外网地址 -p 某协议 --dport 某端口 -j DNAT --to-destination 内网某服务器地址[:PORT]
示例:
地址转换
iptables -t添加到PREROUTING ,当目标地址是172.16.100.11的时候,协议是tcp,端口是80,做DNAT转换,to-destination为192.168.10.7:8080端口
iptables -t nat -A PREROUTING -d 172.16.100.11 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.7:8080
FULLNAT: 全地址转换
在请求报文到时:既修改源地址,又修改目标地址
ifconfig eth0 172.16.0.1 up
ifconfig eth0 172.16.100.11 up
ifconfig eth1 192.16.10.6/24 up
查看
iptable -t nat -L -n
所有的源地址转换做在POSTROUTING ,但凡来自192.168.10.0的网络,所有地址均做snat,SNAT 新的扩展 -to-source转换172.16.100.11
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.11
假如192.168.10.7是web服务器,做web服务转发
iptables -t NAT -A PRTROUTING -d 172.16.100.11 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.7
开启转发:
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

*
抓eth0网卡的icmp包:tcpdump -i eth0 -nn icmp

ifconfig eth0 192.168.10.7/24 up
可以查看日志,查看NAT的效果!

--------------------------------------
recent扩展的用法
利用iptables的recent模块来抵御DOS攻击:
ssh: 远程连接,

1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

2.利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。

下面对最后两句做一个说明:

1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH
--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用

3.iptables的记录:/proc/net/xt_recent/SSH

防doss的规则适用于裸奔于互联网上的机器,如果是web服务器,不建议使用

-----------------------------
layer7扩展实现基于应用层协议的访问控制,可以限制协议,例如:QQ,p2p等应用层协议的控制。如果你要使用可能需要编译和安装。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论