一、设置centos主机防火墙。开放: 服务器的:web服务、vsftpd 文件服务、ssh远程连接服务、ping 请求。 1、开放sshd服务 开放流入本地主机,22端口的数据报文。
开放从本地主机22端口流出的数据报文
修改默认策略为:DROP。 目的禁止所有报文通过本机的TCP/IP协议栈,再开放指定端口的服务。
如:
Chain INPUT (policy DROP 554 packets, 53329 bytes) ----> 已经阻止到数据包了 pkts bytes target prot opt in out source destination 1162 60532 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:22 匹配到数据包 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 681 96248 ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 tcp spt:22 2、开放本机提供的web服务: 开放访问本机的80,443服务。 开放流入本地主机,80端口的数据报文
开放从本地主机80端口流出的数据报文
开放流入本地主机,443端口的数据报文
开放从本地主机443端口流出的数据报文
3、本机可以接受ping 开放应用层协议为icmp数据报文流入本机
开放应用层协议为icmp数据报文流出本机
4、开放被动模式FTP服务 开放命令连接的21端口 装载模块:这是连接追踪ftp服务器的数据连接的模块。
查看是否装载成功
nf_conntrack_ftp 10475 0 nf_conntrack 65428 3 nf_conntrack_ftp,nf_conntrack_ipv4,xt_ 开放应用层协议为tcp,目标端口为21的数据报文流入本机
使用iptables的状态追踪功能,追踪ftp服务器的数据传输端口,意思是说:只要是找开的数据传输连接传输的数据报文与某个已经建立连接有关连,就允许开数据包通过。
数据流出
二、测试:主机防火墙开放的服务是否成功: 、PING 测试:本机PING其它主机
PING 192.168.60.1 (192.168.60.1) 56(84) bytes of data. 64 bytes from 192.168.60.1: icmp_seq=1 ttl=64 time=1.81 ms --- 192.168.60.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 2ms rtt min/avg/max/mdev = 1.812/1.812/1.812/0.000 ms 在windows下ping 192.168.60.99主机 D:\>ping 192.168.60.99 正在 Ping 192.168.60.99 具有 32 字节的数据: 来自 192.168.60.99 的回复: 字节=32 时间=2ms TTL=64 来自 192.168.60.99 的回复: 字节=32 时间<1ms TTL=64 192.168.60.99 的 Ping 统计信息: 数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 2ms,平均 = 1ms 2、测试80服务 [root@nfs ~]# curl -eI http://192.168.60.99/index.html
This Server is OK...
3、在Windows 下测试:文件服务器。 D:\>ftp 192.168.60.99 连接到 192.168.60.99。 220 (vsFTPd 2.2.2) 用户(192.168.60.99:(none)): ftp 331 Please specify the password. 密码: 230 Login successful. ftp> get pub/inittab 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for pub/inittab (884 bytes). 226 Transfer complete. ftp: 收到 884 字节,用时 0.00秒 884000.00千字节/秒。 ftp> 4、测试连接到ssh服务 [root@nfs ~]# ssh 192.168.60.99 Last login: Mon Aug 18 17:51:20 2014 三、分析优化防火墙 设置开放特定服务后的filter表的规则如下:
Chain INPUT (policy DROP 1911 packets, 223K bytes) num pkts bytes target prot opt in out source destination 1 7470 441K ACCEPT cp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:22 2 51 4545 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:80 3 1 60 ACCEPT cp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:443 4 4 288 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 5 12 624 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:21 state NEW 6 174 8122 ACCEPT all -- * * 0.0.0.0/0 192.168.60.99 state RELATED,ESTABLISHED Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 8 packets, 480 bytes) num pkts bytes target prot opt in out source destination 1 5761 701K ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 tcp spt:22 2 40 4522 ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 tcp spt:80 3 1 40 ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 tcp spt:443 4 4 288 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 5 328 22614 ACCEPT all -- * * 192.168.60.99 0.0.0.0/0 state RELATED,ESTABLISHED 1、优化策略:将多条规则合并成一条。 (1)、使用umltiport扩展模块合并端口模块:
-rwxr-xr-x. 1 root root 10772 Feb 22 2013 libxt_multiport.so
(2)、查看合并端口后filter过滤表
Chain INPUT (policy DROP 20 packets, 2060 bytes) num pkts bytes target prot opt in out source destination 1 813 49587 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 multiport dports 80,443,22 2 4 288 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 13 676 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:21 state NEW 4 196 9102 ACCEPT all -- * * 0.0.0.0/0 192.168.60.99 state RELATED,ESTABLISHED Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 165 21277 ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 multiport sports 80,443,22 2 4 288 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 355 24153 ACCEPT all -- * * 192.168.60.99 0.0.0.0/0 state RELATED,ESTABLISHED 2、使用iptables/netfiltes提供的状态追踪功能优化防火墙; iptables/netfiter提供有一个状态追踪功能,只要第一次连接都是NEW状态。下一次连接只要在状态追踪表的计数器的时间没到之前,该客户端重新建立的连接,iptables/netfilter 也认为该连接是ESTABLISHED状态的。 通常情况下,处于ESTABLISHED状态的连接要比处于NEW状态的连接要多得多,那么意味着:ESTABLISHED状态的连接传输的数据报文通常要比NEW状态的连接传输的数据报文要多得多。数据报文经过某链时,数据报文与链中的定义的规则一一做匹配,顺序是从上到下依次做匹配操作。如果数据报文的某些特征,如:源IP地址、目标IP地址、源端口、目标端口、连接的状态、TCP的标志位等,与链中定义的规则匹配到了,就执行【-j】后面的 action(如:DROP|ACCEPT等)。如果数据报文与它经过的链中的规则从上到下一一做匹配,都没有匹配到的话,就执行iptables中定义的默认规policy。因为,定义防火墙规则的时候,首先拒绝所有(默认策略都为:DROP),开放某些服务的数据报文通过.处于ESTABLISHED状态的连接传输的数据报文通常是安全的,应该允许它通过,而数据报文通过的链的要做规则检查的规则又有很多,而处于ESTABLISHED状态的连接,要传输的数据报文很多,那么怎么样要它快速通过iptables/netfilter的防火墙的规则检查呢? 2(1)、根据防火墙做数据报文的匹配规则,应该让处于ESTABLISHED状态的连接传输的数据报文快速 通过变卦的规则检查,意思是说:防火墙根据连接追踪功能一发现该数据报文是ESTABLISHED 状态的连接发送的,立马发行。做法:把允许处于ESTABLISHED连接的数据报文通过的策略放 在链的所有规则的最前面。 (2)、状态检测,是连接追踪模块实现的。连接追踪模块在内核内存中维护一张追踪表,记录每个连 接的状态,以及连接处于ESTABLISHED的状态的超时时间和可以追踪多少个连接以及目前正追 踪的连接数等等。注意:要根据实际应用开启或关闭连接追踪功能。 连接追踪模块可以追踪的连接数量
31928
连接处于ESTABLISHED状态的超时时长
432000 约等于5天。 当前追踪的所有连接:
3 注意: 如果,我们启用了iptables/netfilterr 的连接追踪功能的话,当前追踪的所有连接数已经达到连接追踪模块可以追踪的连接数量的上限了,且连接追踪到的连接处于ESTABLISHED状态的连接,还没到失效时间。后续新的连接只能等待,iptables/netfilter的连接追踪表有连接的超时时间到。才可以通过我们的防火墙。而防火墙定义的ESTABLISHED状态的走超时时长为5天,而我们的TCP连接在TCP的各种状态的超时时长,都是很短的。所以。会导致大量的后续新的连接被拒绝。也就是出现连接服务器超时的情况发生。所以,根据实际应用调整这些参数很关键。或比较繁忙的服务器就不应该开启iptables/netflter的连接追踪功能。 iptables/netfilter的连接追踪功能是通过下述扩展模块实现的。
-rwxr-xr-x. 1 root root 5860 Feb 22 2013 libxt_state.so 提供,允许发往特定端口处于ESTABLISHED状态连接的数据报文通过TCP/IP协议栈,且把该规则放在链的所有规则的最前面。 INPUT表
OUTPUT表:允许处于ESTABLISHED状态连接的数据报文从本机出去。且把该规则放在链的所有规则的最前面。
使用状态检测功能优化后的:
Chain INPUT (policy DROP 138 packets, 12760 bytes) num pkts bytes target prot opt in out source destination 1 760 49519 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 multiport dports 80,443,22 state NEW,ESTABLISHED 2 14 1128 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 18 936 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 tcp dpt:21 state NEW 4 299 13853 ACCEPT all -- * * 0.0.0.0/0 192.168.60.99 state RELATED,ESTABLISHED Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 1194 153K ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 multiport sports 80,443,22 state ESTABLISHED 2 14 1128 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 465 30940 ACCEPT all -- * * 192.168.60.99 0.0.0.0/0 state RELATED,ESTABLISHED 分析: 因为,只要是ESTABLISHED状态的连接的数据报文,是不会有问题的。不需要检测端口了。这样提高了iptable/netfiler检测数据报文的速度。只要是ESTABLISHED状态的连接的数据报文都允许通过。 所以,对上述的INPUT表的第一条规则进行拆分,如下 1
并把发往指定端口的数据报文,进行NEW状态的数据报文检测组成一条规则
修改第三条规则
删除
修改后INPUT表变成 [root@stu13 ~]# iptables --line-numbers -L -n -v Chain INPUT (policy DROP 129 packets, 11581 bytes) num pkts bytes target prot opt in out source destination 1 4793 374K ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 state ESTABLISHED 2 35 1820 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 multiport dports 80,443,21,22 state NEW 3 7 364 ACCEPT all -- * * 0.0.0.0/0 192.168.60.99 state RELATED 4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 。。。。。。 分析OUTPU表 Chain OUTPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 3466 482K ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 multiport sports 80,443,22 state ESTABLISHED 2 22 1608 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 547 36931 ACCEPT all -- * * 192.168.60.99 0.0.0.0/0 state RELATED,ESTABLISHED 分析:跟上述一样,允许处于ESTABLISHED状态的连接的数据报文通过TCP/IP协议栈。修改OUTPUT表的第1条与第3条规则 修改第一条规则
修改第三条规则
修改后的OOUPUT表的规则如下:
。。。。。 Chain OUTPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 794 148K ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 state ESTABLISHED 2 22 1608 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- * * 192.168.60.99 0.0.0.0/0 state RELATED 经过使用端口合并和iptables/netfilter的状态追踪功能优化规则表之后:
Chain INPUT (policy DROP 540 packets, 53525 bytes) num pkts bytes target prot opt in out source destination 1 225 10816 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 state ESTABLISHED 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.60.99 multiport dports 80,443,21,22 state NEW 3 0 0 ACCEPT all -- * * 0.0.0.0/0 192.168.60.99 state RELATED 4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 194 27924 ACCEPT tcp -- * * 192.168.60.99 0.0.0.0/0 state ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- * * 192.168.60.99 0.0.0.0/0 state RELATED |