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发挥出大的性能,给它多分配些内存空间,以防止流量太大,导致请求被拒绝。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。