千家信息网

iptables常见套路

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,iptables常见套路【iptablesfilter表常见套路】(注:以下的"[INPUT|FORWARD]"表示INPUT或者FORWARD)#(1)提高防火墙效率:已有连接直接放过(强制要求要有
千家信息网最后更新 2024年11月25日iptables常见套路


iptables常见套路

【iptablesfilter表常见套路】
(注:以下的"[INPUT|FORWARD]"表示INPUT或者FORWARD)
#(1)提高防火墙效率:已有连接直接放过(强制要求要有,而且必须放在最前面)
iptables-A[INPUT|FORWARD]-ptcp-mstate--stateESTABLISHED,RELATED-jACCEPT

#(2)防***:NEW状态的新连接并且不带有syn位的tcp包,均认为是不合法的tcp请求,直接丢弃(建议要有)
#此条防***策略可有可无,因为安全是相对的,但是建议加上这条策略。
iptables-A[INPUT|FORWARD]-ptcp!--syn-mstate--stateNEW-jDROP

#(3)访问控制:对访问防火墙本机或流经内网的数据只允许访问指定的端口(强制要求要有)
iptables-A[INPUT|FORWARD]-ptcp-mmultiport--dport22,80,443-jACCEPT

#(4)最后,设置默认策略
iptables-PINPUTDROP
iptables-PFORWARDDROP
iptables-POUTPUTACCEPT#注意OUTPUT这时是ACCEPT,即所有发出去的包全部放过,不做封禁。

###################################################################
【nat表常见套路】
#snat:源地址转换,内网访问外网时
iptables-tnat-APOSTROUTING-o外网网卡-s内网网段-jSNAT--to外网网卡ip
#或者使用MASQUEAGE让netfilter自己根据出口ip选源ip
iptables-tnat-APOSTROUTING-o外网网卡-s内网网段-jMASQUERADE

#dnat:目标地址转换,外网访问内网服务器时
iptables-tnat-APERROUTING-i外网网卡-d外网网卡ip-ptcp--dport80-jDNAT--to内网服务器ip:80

###################################################################
【iptables策略保存及恢复】
Iptables-save>/etc/sysconfig/iptables
Iptables-restore

###################################################################
【内核参数调整】
vi/etc/sysctl.conf

#1,目的是为了增加TCP处理性能
net.ipv4.ip_forward=1
net.ipv4.ip_default_ttl=128
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_broadcasts
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syn_retries=3
net.ipv4.tcp_synack_retries=3
net.ipv4.tcp_fin_timeout=60
net.ipv4.tcp_max_syn_backlog=3200

sysctl-p使刚刚修改的sysctl.conf配置生效

#2,目的是为了增加"状态跟踪"的内存缓冲区,进而增强防火墙处理性能。
(2.1)vi/etc/sysctl.conf
net.ipv4.ip_conntrack_max=655350
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1800#1800秒=30分钟
sysctl-p使刚刚修改的sysctl.conf配置生效

(2.2)vi/etc/modprobe.conf
optionsip_conntrackhashsize=1048576#2的20次方
或者再命令行执行modprobeip_conntrackhashsize=1048576也可以,


###################################################################
下面看一个关于"状态跟踪"检测的故障分析:
[故障分析]
iptables开启状态跟踪后,导致一部分流量被拒绝。
[现象]
线上内核日志:/var/log/messages打印:ip_conntrack:tablefull,droppingpacket.
[原因]
由于iptables/netfilter使用了状态跟踪,这样会使用更多的内存,这条日志表示内存已经超过使用限制,
服务器开始丢弃多余的数据包,
[解决]
需要调大内存使用限制的参数,如下:

1,vi/etc/sysctl.conf
net.ipv4.ip_conntrack_max=655350
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1800#1800秒=30分钟
(连接跟踪表超时时间,通过测试这个参数的意义不大,和跟踪表自动清除的时间没有太大关系,但还是先减小,默认值是7天)

2,vi/etc/modprobe.conf
optionsip_conntrackhashsize=1048576#2的20次方
或者再命令行执行modprobeip_conntrackhashsize=1048576也可以
设置桶的数量。提高性能,可以减少内核遍历时间。

[结论]
这几个设置理由很简单,因为线上服务的流量可能很大,超出预期。
为了让iptalbes/netiflter发挥出最大的性能,给它多分配些内存空间,以防止流量太大,导致请求被拒绝。

0