iptables链接追踪state/recent/NAT(三)
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) 装载模块: 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等应用层协议的控制。如果你要使用可能需要编译和安装。