Linux入门攻坚——36、Linux防火墙-iptables-2

iptables的显示扩展的使用:

显式扩展:必须显式指明使用的扩展模块(rpm -ql iptables | grep "\.so$")

CentOS 6:man iptables

CentOS 7:man iptables-extensions

1、multiport扩展:多端口匹配

以离散方式定义多端口匹配,最多指定15个端口;

!\] --source-ports,--sports port\[,port\|,port:port\]...:指明多个源端口; \[!\] --destination-ports,--dports port\[,port\|,port:port\]...:指明多个离散的目标端口 \[!\] --ports port\[,port\|,port:port\]...:源和目的端口 iptables -I INPUT -s 192.168.0.0/16 -d 192.168.147.128 -p tcp -m multiport --dports 22,80 -j ACCEPT iptables -I OUTPUT -d 192.168.0.0/16 -s 192.168.147.128 -p tcp -m multiport --sports 22,80 -j ACCEPT 2、iprange扩展:ip地址范围匹配 指明连续的(但一般是不能扩展为整个网络)ip地址范围时使用; \[!\] --src-range from\[-to\]:指明连续的源ip地址范围; \[!\] --dst-range from\[-to\]:指明连续的目标ip地址范围; iptables -I INPUT -d 192.168.147.128 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 192.168.147.20-192.168.147.200 -j ACCEPT iptables -I OUTPUT -s 192.168.147.128 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 192.168.147.20-192.168.147.200 -j ACCEPT 3、string扩展:报文数据流中的字符串匹配 检查报文中出现的字符串; --algo {bm\|kmp}:字符串比对算法 \[!\] --string pattern iptables -I OUTPUT -m string --algo bm --string 'xxxx' -j REJECT 4、time扩展:基于时间的匹配,要注意日期时间格式 根据报文到达的时间与指定的日期时间范围进行匹配; --datestart YYYY\[-MM\[-DD\[Thh\[:mm\[:ss\]\]\]\]

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]

!\] --monthdays day\[,day...

!\] --weekdays day\[,day...

iptables -I INPUT -d 192.168.147.128 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT

5、connlimit扩展:连接数量限制匹配

根据每客户端IP(也可以是地址块)做并发连接数数量匹配;

--connlimit-above n 连接数量大于n,一般-j是REJECT或DROP

--connlimit-upto n 连接数量小于等于n,一般-j是ACCEPT

--connlimit-mask prefix_length
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT

6、limit扩展:

基于收发报文的速率做检查;使用令牌桶过滤器。

--limit rate[/second|/minute|/hour|/day]
--limit-burst number

iptables -A INPUT -d 192.168.147.128 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT
iptables -A OUTPUT -s 192.168.147.128 -p icmp --icmp-type 0 -j ACCEPT

7、state扩展:状态匹配

根据连接追踪机制检查连接的状态;

调整连接追踪功能所能够容纳的最大连接数量:/proc/sys/net/nf_conntrack_max

已经追踪到并记录下的连接:/proc/net/nf_conntrack

不同协议或连接类型追踪的时长:/proc/sys/net/netfilter/

可追踪的连接状态:

NEW:新发出的请求;连接追踪模版中不存在此连接相关的信息条目,因此,将其识别为第一次发出的请求;

ESTABLISHED:NEW状态之后,连接追踪模版中为其建立的条目失效之前期间内所进行的通信的状态;

RELATED:相关的连接;如ftp协议中的命令连接与数据连接之间的关系;

INVALIED:无法识别的连接;

!\] --state state iptables -I INPUT -d 192.168.147.128 -p tcp --dport 22 -m state --state NEW ESTABLISHED -j ACCEPT iptables -I OUTPUT -s 192.168.147.128 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 对于出站报文,只要是ESTABLISHED,都放行,所以可以使用如下规则: iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT 对于进站报文,只要是ESTABLISHED,都放行 iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT 如何开放被动模式下的FTP服务? (1)装载ftp追踪时的专用的模块:modprobe nf_conntrack_ftp (2)放行请求报文: 命令连接(21号端口):NEW,ESTABLISHED 数据连接:RELATED,ESTABLISHED (3)放行响应报文:ESTABLISHED 模块位置: ![](https://i-blog.csdnimg.cn/direct/bbdeca0167444a1e81f14edc7871801f.png) 查看模块信息: ![](https://i-blog.csdnimg.cn/direct/b937222bbed54c73a1cec9b22797a68f.png) 手动装载模块命令:modprobe nf_conntrack_ftp 安装vsftpd后启动服务: ![](https://i-blog.csdnimg.cn/direct/bfcfa0b981604b978352d2822520ee11.png) 清空规则,设置默认策略: ![](https://i-blog.csdnimg.cn/direct/c4d0c1cf70904d9db52ee28913ebb5d2.png) 测试访问ftp: ![](https://i-blog.csdnimg.cn/direct/4d83a09912834185bf8e51994a600a21.png) 添加对ssh和web的规则: ![](https://i-blog.csdnimg.cn/direct/b1ff2a48d0e448dc84e9a16288b1111f.png) ![](https://i-blog.csdnimg.cn/direct/ef0062a1c99d4b3d842ee4ce9db32a02.png) ![](https://i-blog.csdnimg.cn/direct/ebbf4c260d0f46589780a47b1c9d1717.png) 此时ftp无法访问。 设置规则放行ftp: 只需要修改INPUT第2条规则,将21端口添加进入就可以了,这是命令连接: iptables -R INPUT 2 -d 192.168.147.128 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT 对于数据连接,只要是RELATED的也放行就可以,所以INPUT修改第1条规则,添加RELATED状态放行: iptables -R INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT ![](https://i-blog.csdnimg.cn/direct/b7bc90ed434e457f9c15b05b4731439a.png) 至此,ftp放行成功。 单独添加规则: 放行请求报文: iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT 放行响应报文: iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT 如何保存及重载规则: 保存已有规则:iptables-save \> /PATH/TO/FILE iptables-save \> /root/iptables.1 重载已保存规则:iptables-restore \< /PATH/FROM/FILE iptables-restore \< /root/iptables.1 对CentOS 6: service iptables save 相当于 iptables-save \> /etc/sysconfig/iptables service iptables restore 相当于 iptables-restore \< /etc/sysconfig/iptables 对CentOS 7: 引入了新的iptables前端管理服务工具:firewalld Firewalld-cmd Firewalld-config 需要开机自动装载模块,需要在/etc/sysconfig/iptables-config中进行配置: ![](https://i-blog.csdnimg.cn/direct/79c123aa879f4296ad4b8d171162d134.png) **网络防火墙**: 做网络防火墙,需要主机有两块及以上网卡,两个网卡接在不同的网络中。 ![](https://i-blog.csdnimg.cn/direct/02daa689bd3a48adaa32b3f9b12e3d90.png) 在7.9上,需要打开ipv4的转发功能: ![](https://i-blog.csdnimg.cn/direct/3892e8ade86d4feeac25688c9abf0ced.png) 设置转发功能命令:sysctl -w net.ipv4.ip_forward=1 在6.9-F2上,添加路由:route add -net 192.168.61.0/24 gw 192.168.147.128 在7.9-F1上,添加路由:route add -net 192.168.147.0 netmask 255.255.255.0 gw 192.168.61.128 dev ens33 此时,6.9-F2与7.9-F1可以相互PING通,如果将7.9上的转发功能关闭,即: sysctl -w net.ipv4.ip_forward=0 则PING不通。 6.9-F2上有WEB服务器,在7.9-F1上: ![](https://i-blog.csdnimg.cn/direct/f277ef35665f43a78b7506166be613bd.png) 现在将7.9上的防火墙的FORWARD默认策略改为DROP: iptables -P FORWARD DROP 此时,F1和F2之间的web和ping都不通了。然后加规则,放行WEB服务: iptables -A FORWARD -d 192.168.147.129 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -s 192.168.147.129 -p tcp --sport 80 -j ACCEPT ![](https://i-blog.csdnimg.cn/direct/29df713583874ecaa89d8916813add51.png) 此时,WEB通了,PING还是不通,实现单独放行WEB的目的。 编写规则实现放行WEB和SSH的规则: iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT iptables -A FORWARD -d 192.168.147.129 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT 如果F2上有ftp服务器,配置转发规则实现F1访问F2的ftp: 1、装载模块;2、放行命令连接;3、放行数据连接;4、放行响应报文 iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -R FORWARD 2 -d 192.168.147.129 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT 此时,F1就可以访问F2上的ftp服务了。

相关推荐
Wnq100728 分钟前
DEEPSEEK创业项目推荐:
运维·计算机视觉·智能硬件·ai创业·deepseek
weixin_4284984911 分钟前
Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化
linux·运维·性能优化
盛满暮色 风止何安1 小时前
VLAN的高级特性
运维·服务器·开发语言·网络·网络协议·网络安全·php
lemon3106242 小时前
dockerfile制作镜像
linux·运维·服务器·学习
易保山2 小时前
MIT6.S081 - Lab5 Lazy(延迟分配)
linux·操作系统·c
AI享网无代码创作2 小时前
WP Mail 邮件发送:WordPress Mail SMTP设置
运维·服务器·网络
想躺在地上晒成地瓜干3 小时前
树莓派超全系列文档--(14)无需交互使用raspi-config工具其一
linux·树莓派·raspberrypi·树莓派教程
Shier833_Ww4 小时前
目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库
linux·yolo·ubuntu
唐青枫4 小时前
Linux 历史命令操作教程
linux
愚润求学5 小时前
Linux基础指令(一)
linux·服务器·语法