二、服务器上的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 |