防火墙的模块
1.multiport
解释:连续匹配多个端口
案例1:要求192.168.15.0/24网段的所有IP只能够访问22,80,443端口,其他的取决。
iptables -t filter -A INPUT -p TCP --dport 22 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
或: iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
案例2:要求192.168.15.0/24网段的所有IP只能够访问70-90端口,其他拒绝
iptables -t filter -A INPUT -p tcp -m multiport --dports 10000:30000 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dports 10:30 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
2.iprange模块
解释:连续匹配多个ip
•参数:
--src-range from[-to]: 源地址范围
--dst-range from[-to] 目标地址范围•
案例1:要求只有192.168.15.7到192.168.15.66能够通过22端口登录,其他的拒绝
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.7 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.66 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.15.7-192.168.15.66 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
3.string模块
解释:按照内容进行匹配
参数:
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 匹配的查询算法
案例1:要求访问的内容中包含HelloWorld的内容不允许访问,其他的可以。
iptables -t filter -A OUTPUT -p tcp -m string --string "hello" --algo kmp -j DROP
4. time模块(UTC)
解释:根据时间来控制访问(UTC)
参数:
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[:ss] # 结束时间
--monthdays day[,day...] # 指定一个月的某一天
--weekdays day[,day...] # 指定周 还是 周天
案例1:要求上午的 08:00 到 上午的 10:22 不允许访问,其他时间可以。
iptables -t filter -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:22 -j DROP
5.icmp模块
解释:控制icmp协议
参数:
--icmp-type {type[/code]|typename}
echo-request (8) 请求(我可以ping别人,别人休想ping我)
echo-reply (0) 回应(别人可以ping我,我休想ping别人)
案例1:禁止别人ping我,但我可以ping别人
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j DROP
6.connlimit模块
# 控制并发数•
参数:
--connlimit-upto n # 如果现有连接数小于或等于 n 则 匹配
--connlimit-above n # 如果现有连接数大于n 则匹配
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
案例1:要求登录192.168.15.5的窗口最多有两个
iptables -t filter -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7.limit模块
# 针对 报文速率 进行限制。 秒、分钟、小时、天。
--limit rate[/second|/minute|/hour|/day] # 报文数量
--limit-burst number # 报文数量(默认:5)
网速 * 1000 / 1500 = 数据包数量
2.允许10个数据报文快速通过,超过的数据报文 1/m
iptables -t filter -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -t filter -A INPUT -p icmp -j DROP
3.限速:限制传输的带宽不可以超过500k(500 * 1000 / 1500 = 333 包)
案例1:要求每秒只能够传输500k大小数据
iptables -t filter -A INPUT -p tcp -m limit --limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
8.防火墙案例
1.对所有的地址开放本机的tcp(80、22、8080-9090)端口的访问
iptables -t filter -A INPUT -p tcp -m multiport --dports 80,22,8080:9090 -j ACCEPT
2.允许对所有的地址开放本机的基于ICMP协议的数据包访问
iptables -t filter -A INPUT -p icmp -j ACCEPT
3.其他未被允许的端口禁止访问
iptables -t filter -A INPUT -p tcp -j DROP