首页 > 代码库 > iptables
iptables
链:链上的规则次序,即为检查的次序:因此,隐含一定的应用法则:
1.同类规则(访问同一应用),匹配范围小的放上面:
2.不同类的规则(访问不同应用),匹配到报文频率较大的放在上面:
3.将那些可由一条规则描述的多个规则合并起来:
4.设置默认策略:
简单应用:
iptables -t filter -P INPUT DROP //设置INPUT链的默认规则为DROP iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT //放行对本机22端口的访问 iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT //放行对本机80端口的访问 iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT //放行对本机443端口的访问 iptables -t filter -A INPUT -p icmp --icmp-type 8 -j ACCEPT //放行ping请求,允许别人ping本机 iptables -t filter -P OUPUT DROP //设置OUTPUT链默认策略为DROP iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT //放行22端口出站流量 iptables -t filter -A OUTPUT -p tcp --sport 80 -j ACCEPT //放行80端口的出站流量 iptables -t filter -A OUTPUT -p tcp --sport 443 -j ACCEPT //放行443端口的出站流量 iptables -t filter -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT //放行ping应答,允许本机回应ping请求
扩展应用:
1.以离散方式定义多端口匹配:最多指定15个端口-m multiport:
--sports 指定多个源端口
--dports 指定多个目标端口
--ports 指定多个端口
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT //放行22和80端口
2.指明连续的(但一般不脑整个网络)ip地址范围-m iprange:
--src-range 源ip地址
--dst-range 目标ip地址
iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 172.25.100.5-172.25.100.10 -j DROP //.5~.10不允许访问80端口
3.对报文中的应用层数据做字符串模式匹配检测-m string:
--algo {bm|kmp}:字符串匹配检测算法:
--string pattern:要检测的字符串
--hex-string pattern:要检测的字符串,16进制格式
iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string ‘GET /index.html‘ -j LOG //记录对index.html文件的请求
4.根据指定的时间范围进行匹配-m time:
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期,中间要加个T
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期,中间要加个T
--timestart hh:mm[:ss]:起始时间
--timestop hh:mm[:ss]:结束时间
--monthdays day[,day...]:每个月只在哪一号检查
--weekdays day[,day...]:周几检查
Sa:周六
Su:周日
Fr:周五
Th:周四
We:周三
Tu:周二
Mo:周一
--kerneltz:使用内核上的时区,而非默认的UTC:
iptables -A INPUT -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sa,Su --kerneltz -j DROP //星球6星期天14:30到18:30不允许访问80端口
5.根据每客户端IP做并发连接数数量匹配-m connlimit:
--connlimit-upto n:连接的数量小于等于n时匹配:
--connlimit-above n:连接的数量大于n时匹配:
iptables -A INPUT -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT //每个ip并发连接数不能大于2
6.根据”连接追踪机制“去检查连接的状态-m state:
conntrack机制:追踪本机上的请求和响应之间的关系:状态有如下几种:
NEW:新发出请求:连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态
RELATED:相关联的连接:如ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接
UNTRACKED:未进行追踪的连接
--state conntrack
iptables -A INPUT -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
放行FTP的方法:
放行命令连接(假设Server地址为172.25.100.131):
iptables -A INPUT -d 172.25.100.131 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 172.25.100.131 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
放行数据连接(假设Server地址为172.25.100.131):
iptables -A INPUT -d 172.25.100.131 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I OUTPUT -s 172.25.100.131 -m state --state ESTABLISHED -j ACCEPT
7.保存规则
iptables-save > /etc/sysconfig/iptables iptables-restore < /etc/sysconfig/iptables
CentOS7引入了新的iptables前端管理工具firewalld,建议再CentOS7下还是使用和CentOS6的方法
systemctl stop firwalld.service systemctl disable firwalld yum remove firewalld yum remove firewalld-filesystem yum install iptables-services systemctl start iptables.service systemctl enable iptables
更多精彩,尽在主机猫 http://hostmaoo.com
虚拟主机半价优惠活动进行中....
本文出自 “主机猫虚拟主机半价优惠” 博客,请务必保留此出处http://hostmaoo.blog.51cto.com/2748211/1950660
iptables