iptables常见套路


iptables常见套路

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

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

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

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

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

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

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

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
【内核参数调整】
vi/etc/sysctl。参看

# 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。参看配置生效

# 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。参看配置生效

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


# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
下面看一个关于”状态跟踪”检测的故障分析:
(故障分析]
iptables开启状态跟踪后,导致一部分流量被拒绝。
(现象]
线上内核日志:/var/log/消息打印: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。参看
optionsip_conntrackhashsize=1048576 # 2的20次方
或者再命令行执行modprobeip_conntrackhashsize=1048576也可以
设置桶的数量。提高性能,可以减少内核遍历时间。

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

iptables常见套路