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

相关推荐
运维老司机19 分钟前
Jenkins修改LOGO
运维·自动化·jenkins
D-海漠35 分钟前
基础自动化系统的特点
运维·自动化
我言秋日胜春朝★44 分钟前
【Linux】进程地址空间
linux·运维·服务器
C-cat.1 小时前
Linux|环境变量
linux·运维·服务器
yunfanleo1 小时前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
糖豆豆今天也要努力鸭2 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎2 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师2 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char2 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾2 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc