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

模块位置:

查看模块信息:

手动装载模块命令:modprobe nf_conntrack_ftp

安装vsftpd后启动服务:

清空规则,设置默认策略:

测试访问ftp:

添加对ssh和web的规则:


此时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

至此,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中进行配置:

网络防火墙

做网络防火墙,需要主机有两块及以上网卡,两个网卡接在不同的网络中。

在7.9上,需要打开ipv4的转发功能:

设置转发功能命令: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上:

现在将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

此时,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服务了。

相关推荐
YRr YRr41 分钟前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.43 分钟前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker
zhou周大哥1 小时前
linux 安装 ffmpeg 视频转换
linux·运维·服务器
不想起昵称9291 小时前
Linux SHELL脚本中的变量与运算
linux
the丶only2 小时前
单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号
linux·运维·服务器·docker·gitlab
ccubee2 小时前
docker 安装 ftp
运维·docker·容器
枫叶红花3 小时前
【Linux系统编程】:信号(2)——信号的产生
linux·运维·服务器
yaosheng_VALVE3 小时前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
_微风轻起3 小时前
linux下网络编程socket&select&epoll的底层实现原理
linux·网络