第五章:iptables应用案例分析(包过滤服务器上设置iptables)

来源:互联网 发布:matlab最短路径算法 编辑:程序博客网 时间:2024/05/05 05:41

 



二、服务器上的iptables的设置

1)查看

#查看filter表的设置情况
iptables   -t   filter  -L
#清空filter表上的所有规则
iptables   -t   filter  -F
#让filter表的数据包计数器和流量计数器归零
iptables   -t   filter  -Z

2)设置

----------------------------------------------------------------------------------------------------------

#允许 任意一台主机/某个网段 连接本服务器的SSH服务(本服务器为:SSH服务器)
(1)允许任意一台主机连接本服务器的SSH服务
iptables    -t  filter  -A  INPUT  -p  tcp   --dport   22  -j  ACCEPT
iptables    -t  filter  -A  OUTPUT  -p  tcp   --sport   22  
-m  state  --state  ESTABLISHED -j    ACCEPT
(2)允许某个网段连接本服务器的SSH服务
iptables    -t  filter  -A  INPUT  -p  tcp  -s  192.168.0.0/24  --dport   22  -j  ACCEPT
iptables    -t  filter  -A  OUTPUT  -p  tcp  -m  -d  192.168.0.0/24  --sport  22 -m  state  --state  ESTABLISHED   -j  ACCEPT
(3)允许某个网段的部分主机连接本服务器的SSH服务
iptables   -t   filter  -A   INPUT  -p  tcp  -m  iprange   --src-range  192.168.0.1-192.168.0.5   --dport   22   -j   ACCEPT
iptables   -t  filter  -A  OUTPUT  -p  tcp  -m  iprange  --dst-range  192.168.0.1-192.168.0.5  --sport  22 -m  state  --state  ESTABLISHED  -j  ACCEPT


  #允许本服务器连接远程主机的SSH服务(本服务器为:SSH客户端)
iptables   -t   filter  -A  INPUT  -p  tcp  --sport   22   -j   ACCEPT
iptables   -t   filter  -A  OUTPUT  -p  tcp  --dport   22   -j   ACCEPT

----------------------------------------------------------------------------------------------------------

#设置本服务器本地回环通行(因为本地回环地址:127.0.0.1,它提供了很多的服务,可通过netstat -autnlp查看)
iptables   -t   filter   -A   INPUT   -s    127.0.0.1   -d   127.0.0.1   -j   ACCEPT
iptables   -t   filter   -A   OUTPUT   -s    127.0.0.1   -d   127.0.0.1   -j   ACCEPT


----------------------------------------------------------------------------------------------------------

#允许本服务器发送和接收ICMP数据包(ping指令)
iptables   -t   filter   -A   INPUT  -p  icmp   -j   ACCEPT
iptables   -t   filter   -A   OUTPUT  -p  icmp  -j   ACCEPT

(1)此外还可以对icmp类型的包进行流量的限制,例如:
iptables   -t   filter   -A   INPUT  -p  icmp  -m  limit   --limit   5/m   --limit-burst  10  -j  ACCEPT
iptables   -t   filter   -A   OUTPUT  -p  icmp  -m  limit  --limit  5/m  --limit-burst  10  -j  ACCEPT
其中,对INPUT链与OUTPUT链限制都进行限制流量:--limit  5/m表示每分钟可接受5个icmp类型的数据包;--limit-burst  10表示最多可接受10个,当达到10个时就出现丢弃该类型数据包
;一般我们只对INPUT链进行限制流量即可,所以当使用ping出现丢包的时,那么可能的故障就是防火墙做了相应的限制流量规则
(2)把icmp类型包的过滤写入到日志,以方便查看
iptables   -t   filter   -A   INPUT  -p  icmp -m  limit   --limit   5/m   --limit-burst  10  -j  LOG  --log-level INFO  --log-prefix  "CentOS-ICMP: " 
tail   -f   /var/log/messages

----------------------------------------------------------------------------------------------------------

#假设本服务器为:DNS服务器(192.168.0.53)
iptables   -t   filter   -A   INPUT   -p   udp   -d  192.168.0.53  --dport   53   -j   ACCEPT
iptables   -t   filter   -A   OUTPUT  -p  udp  -s  192.168.0.53  --sport  53   -j  ACCEPT


#允许本服务器发送和接收DNS服务(本服务器为:DNS客户端)
iptables   -t   filter  -A  INPUT  -p  udp  --sport  53  -j   ACCEPT

iptables   -t   filter  -A  OUTPUT  -p  udp  --dport  53   -j   ACCEPT

----------------------------------------------------------------------------------------------------------

#假设本服务器:WEB服务器(192.168.0.53)
(1)允许所有的主机访问本WEB服务器
iptables    -t   filter   -A   INPUT   -p   tcp   -d  192.168.0.53   --dport   80   -j   ACCEPT(客户端请求)
iptables    -t   filter   -A   OUTPUT   -p   tcp   -s  192.168.0.53  --sport   80  -m  state  --state  ESTABLISHED  -j   ACCEPT(服务器的回应)
(2)拒绝某台机子访问本WEB服务器
iptables    -t   filter   -I   INPUT   -p   tcp   -d  192.168.0.53   --dport   80  -s  192.168.0.5   -j   DROP
iptables    -t   filter   -I   OUTPUT   -p   tcp   -s  192.168.0.53  --sport   80  -d  192.168.0.5  -m  state  --state  ESTABLISHED  -j  DROP
注意:拒绝的规则一定要写在允许的规则的前面((2)必须写在(1)的前面,所以可以使用-I参数,即:插入规则),因为规则的执行顺序是按从上到下的
就以上面作为这例子吧,我们的WEB服务器允许所有主机访问(除了192.168.0.5),所以我们还可以有另一种写法,如下:
iptables   -t   filter  -A   INPUT  -p  tcp  -d  192.168.0.53   --dport  80  -s  ! 192.168.0.5  -j   ACCEPT
iptables   -t   filter  -A  OUTPUT  -p  tcp  -s  192.168.0.53   --sport  80  -d ! 192.168.0.5  -j  ACCEPT


#允许本服务器发送和接收httpd服务(本服务器为:web客户端)
iptables    -t   filter   -A   INPUT   -p   tcp   --sport   80   -j   ACCEPT
iptables    -t   filter   -A   OUTPUT  -p   tcp  --dport  80  -j   ACCEPT
iptables    -t   filter   -A   INPUT   -p   tcp   --sport   3127   -j   ACCEPT
iptables    -t   filter   -A   OUTPUT  -p   tcp  --dport  3127  -j   ACCEPT
注意:为什么要加上3127这个端口的相应规则呢?因为有些yum的源是提供特定端口的,此时就要自己写相应的规则


----------------------------------------------------------------------------------------------------------

#假设本服务器为:vsftp服务器(192.168.0.53)
(1)主动模式:除了打开服务器上的21端口,还得打开20端口
首先,加载相关模块
modprobe  ip_nat
modprobe  ip_conntrack
modprobe  ip_conntrack_ftp
modprobe  ip_nat_ftp
注意以下几点
第一点:当 iptables 对 filter、nat、mangle 任意一个表进行操作的时候,会自动加载 ip_tables 模块
另外,iptable_filter、iptable_nat、iptable_mangle 模块也会自动加载

第二点:ip_conntrack 是状态检测机制,state 模块要用到,当 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 时,ip_conntrack 自动加载
第三点:ip_nat_ftp 是通过本机的 FTP 需要用到的(若你的系统不需要路由转发,没必要用这个)
第四点:ip_conntrack_ftp,当本机做 FTP 时,且要状态检测机制时才会用到


iptables   -t   filter  -A   INPUT  -d   192.168.0.53  -p   tcp   --dport   20:21   -j   ACCEPT
iptables   -t   filter  -A   OUTPUT  -s  192.168.0.53  -p  tcp --sport  20:21  -m  state  --state  ESTABLISHED,RELATED  -j   ACCEPT
注意:因为端口:20-21是连续的(大于20,表示为"20:";小于20,表示为":20"),所以可以--dport | --sport  +  20:21这个写,如果不连续的话,那就得使用" -m  multiport  --dport |--sport  +  端口1,端口2...",具体请使用man iptables,例如:下面这个例子
使用multiport可以添加多个不连接的端口,最多可以添加15组。如:-A INPUT -p tcp -m multiport –dport 21:25,135:139 -j DROP
如果不使用multiport参数,只能是添加连续的端口,如:-A INPUT -p tcp –dport 21:25 -j DROP,而不能写成21:25,135:139

(2)被动模式
首先,要实现被动模式,那么必须配置/etc/vsftpd/vsftpd.conf,在该文件增加如下内容:
pasv_enable=yes   #启动被动模式
pasv_min_port=4040  #被动模式vsftpd服务器所使用的端口范围
pasv_max_port=4080

iptables   -t   filter  -A   INPUT  -d   192.168.0.53  -p   tcp   --dport   21   -j   ACCEPT
iptables   -t   filter  -A   OUTPUT  -s  192.168.0.53  -p  tcp  --sport   21  -j    -m  state  --state  ESTABLISHED  ACCEPT
iptables   -t   filter  -A   INPUT  -d   192.168.0.53  -p   tcp   --dport   4040:4080   -j   ACCEPT
iptables   -t   filter  -A   OUTPUT  -s  192.168.0.53  -p  tcp --sport  4040:4080  -m  state  --state  ESTABLISHED   -j   ACCEPT
注意:被动模式下,你要使用工具下载文件,例如:在windows系统下,你可以使用xftp、FileZilla等ftp客户端工具

----------------------------------------------------------------------------------------------------------

#假设本服务器为:email服务器(192.168.0.53)
email服务器发送邮件默认所使用的端口:25
email服务器接收邮件默认所使用的端口:110
iptables   -t   filter  -A   INPUT  -d   192.168.0.53  -p  tcp  --dport   25   -j  ACCEPT
iptables   -t   filter  -A   OUTPUT  -s  192.168.0.53  -p  tcp  --sport  25  -m  state  --state  ESTABLISHED  -j   ACCEPT
iptables   -t   filter  -A   INPUT  -d   192.168.0.53  -p  tcp  --dport   110   -j  ACCEPT
iptables   -t   filter  -A   OUTPUT  -s  192.168.0.53  -p  tcp  --sport  110         -m  state  --state ESTABLISHED -j   ACCEPT

----------------------------------------------------------------------------------------------------------

最后在规则的最前面插入检测状态(提高防火墙的工作效率):
iptables   -t   filter   -I   INPUT  -m   state  --state  INVALID  -j   DROP
iptables   -t   filter   -I   INPUT  -m   state  --state  ESTABLISHED  -j   ACCEPT
iptables   -t   filter   -I   INPUT  -p   tcp  ! --syn  -m   state   --state  NEW  -j   DROP
iptables   -t   filter   -I   FORWARD  -m   state  --state  INVALID  -j   DROP
iptables   -t   filter   -I   FORWARD  -m   state  --state  ESTABLISHED  -j   ACCEPT

 

原创粉丝点击