iptables 访问控制配置:
一,四表五链:(按优先级顺序)
- raw:PREROUTING, OUTPUT
- mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
- nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
- filter:INPUT,FORWARD,OUTPUT
二,规则格式:
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
三,可选参数:
1,-t table:(可以不写,默认filter)
raw, mangle, nat, ,filter
例子:查看nat表的所有链上的规则
iptables -t nat -nvL
2,COMMAND:
链管理:
- -N:new, 自定义一条新的规则链;
iptables -N abc
- -X: delete,删除自定义的规则链;
iptables -X abc (不加参数是清空)
- -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
iptables -P INPUT ACCEPT
DROP:丢弃
iptables -P INPUT DROP
REJECT:拒绝
iptables -P INPUT REJECT
- -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
iptables -E aaa abc
规则管理:
- -A:append,追加;
iptables -A INPUT -d 3.3.3.10 -p icmp -j DROP
- -I:insert, 插入,要指明位置,省略时表示第一条;
iptables -I INPUT -d 3.3.3.10 -p icmp -j DROP
- -D:delete,删除;
(1) 指明规则序号;
iptables -D INPUT 1
(2) 指明规则本身;
- -R:replace,替换指定链上的指定规则;
iptables -R INPUT 1 + 需要修改的规则
- -F:flush,清空指定的规则链;
- -Z:zero,置零;
- iptables的每条规则都有两个计数器:
(1) 匹配到的报文的个数;
(2) 匹配到的所有报文的大小之和;
查看规则:
iptables filter -nvL --line-numbers
3,匹配条件
- -s
--source address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围; - -d
--destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围; - -p
--protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or "all"{tcp|udp|icmp} - -i
--in-interfacename:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链; - -o
--out-interfacename:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;
tcp拓展:
--sport +端口号
--dport +端口号
--tcp-flags SYN,ACK,FIN,RST SYN
表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
--syn:用于匹配第一次握手,相当于 --tcp-flags SYN,ACK,FIN,RST SYN
udp拓展:
--sport +端口号
--dport +端口号
icmp拓展:
--icmp-type 8 请求报文
--icmp-type 0 相应报文
4,处理动作:
-j targetname [per-target-options]:
- ACCEPT
- DROP
- REJECT
- RETURN:返回调用链;
- REDIRECT:端口重定向;
- LOG:记录日志;
- MARK:做防火墙标记;
- DNAT:目标地址转换;
- SNAT:源地址转换;
- MASQUERADE:地址伪装;
5,显示拓展:(-m)
multiport:
iptables -A INPUT -s 172.16.100.10 -d 10.1.1.20 -p tcp -m multiport --dports 22,80 -j ACCEPT
iprange:
iptables -A INPUT -d 172.16.100.67 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP
string:
iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp --sport 80 -m string --algo bm --string "gay" -j REJECT
time
connlimit
limit
iptables -I INPUT -d 172.16.100.67 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
state
iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.67 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
注意:
调整连接追踪功能所能够容纳的最大连接数量:
/proc/sys/net/nf_contrack_max 已经追踪到到的并记录下来的连接: /proc/net/nf_conntrack
不同的协议的连接追踪时长:
/proc/sys/net/netfilter/
iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除;当模板满载时,后续的连接可能会超时
解決方法一般有两个:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.ipv4.nf_conntrack_max = 393216 net.ipv4.netfilter.nf_conntrack_max = 393216 (2) 降低 nf_conntrack timeout时间 vi /etc/sysctl.conf net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300 net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
注意:在iptables上做vsftp显示需要加载ftp模块
modprobe nf_conntrack_ftp
lsmod | grep ftp