网络防火墙
防火墙简单例子
*实验环境:192.168.198.6A机器,192.168.198.135B机器
*A机器操作:检查ip是否干净
若ip不干净,如下
解决方法
ifconfig virbro down禁用此网卡
brctl delbr virbr0删除网桥
systemctl disable libvirtd.service开机禁用服务
systemctl mask libvirtd.service注销服务
reboot重启查看
查看是否干净:iptables -vnL
例一:简单ping改变INPUT *B机器操作:ping 192.168.198.6[ping成功,等待几秒关闭] *A机器操作:iptables -vnL查看发现INPUT数量变多
例二:禁止某机器访问,无回应
*A机器操作:iptables -t filter -A INPUT -s 192.168.198.135 -j DROP[禁止ip为192.168.198.135的机器访问]
*B机器操作:ping 192.168.198.6[ping不同]
*A机器操作:iptables -vnL查看[DROP是抛弃的意思,对方发送请求我不搭理,不回应]
tcpdump -i eth0 -nn host 192.168.198.135[执行此命令,一见明了]
例三:清空指定的规则链
*A机器操作:iptables -vnL查看[iptables -vnL=iptables -t filete -vnL]
iptables -F:清除链接
例四:拒绝某机器访问,有来有回,有回应
*A机器操作:iptables -t filter -A INPUT -s 192.168.198.135 -j REJECT[拒绝ip为192.168.198.135访问]
iptables -vnL查看
*B机器操作:ping 192.168.198.6
*A机器操作:tcpdump -i eth0 -nn host 192.168.198.135[有来有回]
例五:拒绝多种机器访问,会影响效率
例六:拒绝某网段的访问,慎用
*A机器操作:iptables -t filter -A INPUT -s 192.168.198.0/24 -j REJECT[拒绝网段为192.168.198.0访问]
此时发现自己无法操作,因为自己也在这一网段之中,在机房还好可以在本机操作,要是远程操作就出事了,看清楚在操作
打开主机操作:iptables -F清除
或者在执行拒绝网段操作前,执行iptables -F | at now+5 minutes操作,意思是五分钟后执行清空操作
例七:删除某一规则,要指明规则类型和编号
*A机器操作:iptables -vnL --line-numbers查看
删除1号链接iptables -D INPUT 1
iptables -vnL --line-numbers查看[删除1之后,2会自动往上走变成1]
例八:插入,要指明插入至的规则编号,默认为第一条
*A机器操作:iptables -vnL --line-numbers查看
插入一条新规则:iptables -I INPUT -s 172.16.0.1/16 -j REJECT[默认不写编号,认为为第一条]
iptables -vnL --line-numbers查看
再次插入一条新规则:iptables -I INPUT 1 -s 192.168.37.7 -j REJECT[指定了编号,该规则就在第一条,若指定为2,规则为2原第二条规则后推为3,以此类推]
iptables -vnL --line-numbers查看
例九:替换规则
*A机器操作:iptables -vnL --line-numbers[查看现有规则]
iptables -R INPUT 1 -s 192.168.198.135 -j REJECT[替换该规则,要指明类型和编号]
再次查看iptables -vnL --line-numbers[替换成功]
例十:清空计时器,iptables的每条规则都有两个计数器[(1) 匹配到的报文的个数(2) 匹配到的所有报文的大小之和]
*A机器操作:查看iptables -vnL --line-numbers
iptables -Z INPUT[清除]
查看iptables -vnL --line-numbers
例十一:同时指定多条规则
*A机器操作:查看iptables -vnL --line-numbers
iptables -I INPUT -s 192.168.37.7,192.168.37.8 -j ACCEPT[这我默认写法没加编号,也可以加编号]
查看iptables -vnL --line-numbers
例十二:允许某机器只可访问本机协议,指定协议
*A机器操作:查看iptables -vnL --line-numbers[干净]
演示为http服务,指定网页 echo welcome to xdk > /var/www/html/index.html,systemctl start httpd[启动服务]
iptables -A INPUT -s 192.168.198.1,127.0.0.1 -j ACCEPT[设置本机和windows访问]
iptables -A INPUT -j REJECT[设置全部不可访问]
查看iptables -vnL --line-numbers[只允许192.168.198.1,127.0.0.1访问]
*B机器操作:curl 192.168.198.6[不可访问]
*A机器操作:iptables -I INPUT 3 -s 192.168.198.135 -p tcp --dport 80 -j ACCEPT[设置192.168.198.135访问,-p设置协议 --dport端口80,只允许访问http服务,并且放在第三位]
查看iptables -vnL --line-numbers
*B机器操作:curl 192.168.198.6
例十三:允许某机器访问,但不允许syn访问[syn用于匹配第一次握手]
*A机器操作:iptables -I INPUT 4 -s 192.168.198.72 -j ACCEPT[允许192.168.198.72访问,并把它放在0.0.0.0/0之前,否则无法生效]
iptables -I INPUT 5 -s 192.168.198.72 -p tcp --syn -j REJECT[添加192.168.198.72机器不允许访问syn]
查看iptables -vnL --line-numbers
*B机器操作:curl 192.168.198.6[SYN被禁止无法访问]
ping 192.168.198.6[因为all在tcp上,所以可以ping通]
例十四: icmp命令使用
*A机器操作:查看iptables -vnL --line-numbers[设置如下]
ping 192.168.198.72[不通]
*B机器操作:tcpdump -i eth0 -nn host 192.168.198.6[查看是ping通的,原因就是A机器第三条规则不让任何机器访问]
*A机器操作:iptables -I INPUT 3 -s 192.168.198.72 -p icmp --icmp-type 0 -j ACCEPT[192.168.198.72设置icmp,0/0:echo-reply:icmp应答,8/0:echo-request:icmp请求]
ping 192.168.198.72[成功]
查看iptables -vnL --line-numbers
例十五: 显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块
*A机器操作:查看iptables -vnL --line-numbers
iptables -I INPUT 3 -m time --timestart 1:00 --timestop 10:00 -j ACCEPT[没写来源默认为任何机器,时间为9-18,为啥写1-10因为差距8个小时要减去]
查看iptables -vnL --line-numbers
*B机器操作:curl 192.168.198.6[时间不在该阶段就不让访问]
例十六:connlimit扩展, 根据每客户端IP做并发连接数数量匹配
*A机器操作:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT[设置tcp协议端口80服务,链接大于50次的机器禁止访问]
查看iptables -vnL --line-numbers
例十七:基于收发报文的速率做匹配
*A机器操作:iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 10 -j ACCEPT[--icmp-type 8请求,20/minute为每分钟20次,--limit-burst 10 极限突发数]
iptables -A INPUT -j REJECT[设置此命令,不然不会终止会一直访问下去,我们只要测试一分钟]
查看iptables -vnL --line-numbers
*B机器操作:ping 192.168.198.6
例十八: state扩展 根据”连接追踪机制“去检查连接的状态,较耗资源
*A机器操作:查看iptables -vnL --line-numbers
*B机器操作:ssh 192.168.198.6
*A机器操作:iptables -A INPUT -j REJECT[禁止任何机器访问,此时B机器已经死掉了,不让操作]
iptables -I INPUT 3 -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT[允许访问,22端口为ssh服务,state模板,ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之 前期间内所进行的通信状态,RELATED:新发起的但与已有连接相关联的连接]
查看iptables -vnL --line-numbers
*B机器操作:关闭重新连接ssh 192.168.198.6[成功,换做其他机器是禁止访问的]
例十九:查询操作
*A机器操作:已经追踪到的并记录下来的连接信息库 /proc/net/nf_conntrack
调整连接追踪功能所能够容纳的最大连接数量 /proc/sys/net/nf_conntrack_max
永久生效:vim /etc/sysctl.conf加入参数,生效命令sysctl -p