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

相关推荐
蓝莓星冰乐16 分钟前
Linux入门(2)
linux·运维·服务器
吉吉6135 分钟前
Nginx:我自己的网站
运维·nginx
重生之我是数学王子1 小时前
网络编程 UDP编程 Linux环境 C语言实现
linux·c语言·开发语言·网络·网络协议·udp
搬砖的小码农_Sky1 小时前
如何在Linux中比较两个文件的差异?
linux
wanhengwangluo1 小时前
弹性裸金属服务器和传统裸金属服务器有什么区别?
运维·服务器
Syclus2 小时前
成功解决WSL2上的Ubuntu22.04执行sudo apt-get update指令报错问题
linux·运维·服务器
EasyCVR3 小时前
国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案
运维·科技·ffmpeg·音视频·1024程序员节·监控视频接入
小林熬夜学编程3 小时前
【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
linux·服务器·c语言·开发语言·c++
恒创科技HK3 小时前
ssh和ssl的区别在哪些方面?
运维·ssh·ssl