Linux防火墙学习笔记10

iptables的拓展匹配:

icmp模块的使用方法:

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

说明:回应

我能ping通别人,别人ping不通我。

iprange模块的作用:

iptables -t filter -I INPUT -m iprange --src-range 192.168.2.20-192.168.2.100 -j REJECT

说明:拒绝这个网段的IP地址进行访问。

配置一段IP地址能够访问或者拒绝,不让所有的IP地址能够访问到你的服务器,因为局域网内发起攻击是很容易的。

Linux防火墙学习笔记10_第1张图片

我们使用的是REJECT动作,那么我们通过 ssh端口可以看到Connection refused的连接拒绝的返回信息。如果是DROP,就直接丢弃,没有任何返回信息。

multiport模块的作用:

iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT

配置端口的时候,不建议一个个去开端口。实际生产环境中,不建议开这么多端口,能不开放端口就不开放端口,只要开放端口,就会带来风险。

邮件服务器专门添加25端口和110端口,另外再加上22端口。

我开端口,让别人来访问。就要使用filter表,使用INPUT链。--dports: 目的是我的端口。

写端口加协议。22/tcp    -p tcp --dport 22

Linux防火墙学习笔记10_第2张图片

 

state模块的作用:

-m state

NEW  新生态

ESTABLISHED  连接态

RELATED    衍生态:已经跟别人建立了连接,那么衍生的连接都能通过。

INVALID     无效态

iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

使用状态防火墙规则,放行本机ftp服务(被动模式)

iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 20,21 -j ACCEPT
iptables -t filter -A INPUT -j REJECT
modprobe nf_conntrack_ftp

vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"

小结:

该内核模块的作用是在连接数据端口的时候,将第一次握手的数据包状态由原来的NEW识别成RELATED。

-m tos   //ip协议头部 type of service 服务类型

iptables -F

tcpdump -i eth0 -nn port 22 -vvv  # 抓取远程从主机访问本机ssh数据包,观察TOS值


tcpdump -i eth0 -nn port 22 -vvv  # 抓取远程从本机rsync或scp复制文件,观察TOS值


小结:都是通过22/tcp, 但可以通过IP报文中的TOS来区分应用。


ssh: tos 0x0 0x10
scp: tos 0x0 0x8
rsync: tos 0x0 0x8


iptables -m tos -h
iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j REJECT
iptables -t filter -A INPUT -j REJECT

说明:ssh都不让用了。只能使用scp和rsync应用。我们入侵Linux,登录,提权。

-m tcp

按TCP标记匹配:

Flags are:SYN  ACK  FIN  RST  URG  PSH  ALL  NONE

iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT

iptables -t filter -A INPUT -p tcp --syn --dport 80 -j ACCEPT

说明:

--tcp-flags SYN, ACK, FIN, RST SYN    检查四个标记位SYN,ACK,FIN,RST 但是只有SYN标记位才匹配。我只同意SYN。

则允许三次握手中的第一次握手,等价于--syn。

能够保证我们网站的安全性。

-m limit

iptables -F

实验:从客户端ping本机,观察序列号。

iptables -t filter -A INPUT -p tcp --syn --dport 80 -m limit --limit 20/minute -j ACCEPT

iptables -t filter -A INPUT -j REJECT

说明:

1)访问网站,第一次握手建立连接的,每分钟20次。间接拦截DDos攻击。

2)使用kali系统,可以模拟一分钟20次的连接。

进入本机INPUT链的ICMP,如果匹配第一条则放行,不匹配的将被第二条拒绝,默认前5个不限制。

16/second

16/minute

16/hour

16/day

iptables -t filter -A INPUT -p tcp --syn --dport 80 -m limit --limit 50/second -j ACCEPT
iptables -t filter -A INPUT -j REJECT

limit是用来限制用户访问的。

-m connlimit 限制同一个IP最大连接数:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit ! --connlimit-above 2 -j ACCEPT
//仅允许每个客户端有两个SSH连接

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit !--connlimit-above 100 -j ACCEPT
//仅允许每个客户端有100个requests(请求报文)
iptables -A INPUT -j REJECT

 

-m time模块:

iptables -A INPUT -m time --timestart 12:00 --timestop 13:00 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -m time --timestart 12:00 --timestop 13:00 -j ACCEPT
iptables -A INPUT -j REJECT

--timestart:开始时间

--timestop: 结束时间

说明在任何协议都支持time模块,都可以增加这个时间的限制功能。--syn发起连接的内容。

-m comment 模块:说明备注的意思。

iptables -A INPUT -s 192.168.17.109 -m comment --comment "cloud class" -j REJECT

规则配置多了,容易忘掉,加这个备注还是有作用的。

-m mark模块:

iptables -t filter -A INPUT -m mark --mark 2 -j REJECT

mark是用来做标记的。目前我们没有使用mangle表。

你可能感兴趣的:(iptables,linux)