7.防火墙的高级使用方法


connlimit模块

限制每个ip地址同时连接到server端的数量,抵御DDoS和CC攻击

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
INPUT方向的tcp协议关于80端口限制连接为每个ip两个,多的话就REJECT

--connlimit-above 单独限制每个ip的连接数量

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT
某个网段(24位子网掩码)允许tcp80端口20个连接数,网段共用20个连接

--connlimit-mask 不能单独使用,限制某类ip网段内一定数量ip连接数

limit模块

当数据报文到达一定速率,就限制流入数据包的数量,即限速

--limit-burst 令牌桶,单位时间最大数据量,每个进入的数据包都会获得一个令牌
--limit 令牌桶中生成新令牌频率second/minute/hour/day

iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
iptables -t filter -A INPUT -p icmp -j REJECT

十分钟刷新一次令牌桶,多余的流量REJECT

udp模块

限制udp端口

iptables -t filter -I INPUT -p udp -m udp --dport 137:150 -j ACCEPT
仅支持137-150端口的udp请求

icmp模块

ICMP(Internet Control Message Protocol),互联网控制报文协议,ping命令

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT
拒绝icmp中type为8的code为0类型的报文(禁ping)

iptables自定义链

iptables -N IWEB 新建链,名为IWEB

iptables -nvL 看到新链

iptables -I IWEB -s 192.168.1.32 -j REJECT 添加iptables的IWEB链的REJECT

iptables -I INPUT -p tcp -j IWEB
把IWEB添加到INPUT中(引用),用于使用多个策略加到一个INPUT

iptabels -E IWEB WEB 修改名字

iptables -D INPUT 1 清除INPUT中的引用
iptables -F WEB 清空规则
iptables -X WEB 删除(被引用,有规则,都没法删)

网络防火墙

FORWARD

区别:之前是限制报文发送接受,这个是过滤并转发,过滤用到INPUT和OUTPUT,而转发是用到FORWARD

iptables -nvL FORWARD 查看forward链

iptables -A FORWARD -j REJECT 添加默认拒绝

iptables -I FORWARD -s 1.1.1.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
添加转发规则,允许转发1.1.1.0网段的流量

SNAT

假设:内网所有ip在10.1.1.0/24网段,外网ip是172.8.7.1

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 172.8.7.1
将发送请求的内网网段改为公网ip,即多个内网地址可以通过一个公网ip进行访问

DNAT

iptables -t nat -I PREROUTING -d 172.8.7.1 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.2:80
访问172.8.7.1:80就转发到内网的10.1.1.2:80

配置完DNAT必须配置SNAT

MASQUERADE

iptables -t nat -I POSTROUTING -s 10.1.1.0/24 -o ens33 -j MASQUERADE
把内网的流量转发到某个网卡的公网ip上,相当于动态的SNAT,保证公网ip再怎么变,所对应的网卡也不会变(-o后面为网卡名)

REDIRECT

本地进行端口映射(端口与端口之间的互相重定向)

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
当别的电脑访问我80端口的时候,会重定向到8080端口

REDIRECT只能定义到PREROUTING或者OUTPUT链中

firewalld和iptables

centOS7以下使用iptables,centOS7以上为firewalld,iptables和firewalld并存,默认使用firewalld管理netfilter,但是底层调用为iptables命令

ubuntu使用ufw,iptables的轻量化工具

firewall-cmd --get-default-zone
查看当前使用的区域

firewall-cmd --get-zone-of-interface=ens33
查看ens33网卡所在的区域

firewall-cmd --list-all
列出所有防火墙的条目

firewall-cmd --add-service=http --permanent
添加http放行永久生效

firewall-cmd --add-port=80/tcp
放行80端口tcp流量

selinux

安全子系统,安全加强版linux,不需要学习

在/etc/selinux/config,SELINUX=enforing 默认开启,改为disabled即可