首先介绍一下指令和相关配置文件
启动指令:service iptables start
重启指令:service iptables restart
关闭指令:service iptables stop
介绍一些指令用法(主要还是man iptables看下相关资料才行)
-A:指定链名
-p:指定协议类型
-d:指定目标地址
--dport:指定目标端口(destination port 目的端口)
--sport:指定源端口(source port 源端口)
-j:指定动作类型
例如我给SSH加放行的语句:
添加input记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT
添加output记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
注意要/etc/rc.d/init.d/iptables save否则就SSH链接不上都有可能!
把所有不符合自己配置的规则ACCEPT的连接全部DROP掉
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
DROP 可以这样理解:
当INPUT =DROP,表示防火墙遇到数据就不接受它,不让它进入服务器
当OUTPUT=DROP,表示防火墙阻止从服务器流出的数据
当FORWARD=DROP,表示服务器不允许经服务器路由
这样的设置只是临时的, 重启服务器还是会恢复原来没有设置的状态(policy ACCEPT),要想重启后仍然生效需要使用service iptables save 进行保存,会提示保存信息到 /etc/sysconfig/iptables,所以我们可以打开文件查看 vi /etc/sysconfig/iptables
开启INPUT策略
# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
-A 添加规则到指定链的结尾,最后一条
-I 添加规则到指定链的开头,第一条
-t 指定表,也可以不指定默认是filter
-p 指定协议(all.tcp,udp.icmp)默认all
--dport 指定端口
-j 处理的行为
ACCPET接收、DROP丢弃、REJECT拒绝。最好使用ACCPET和DROP,因为拒绝会返回给用户信息。
匹配端口范围:
iptables -I INPUT -p tcp -m multiport --dport 22,23,24,25 -j DROP
iptables -I INPUT -p tcp -m multiport ! --dport 22,23,24,25 -j DROP
----------------------------------------------------------------------------------------------------------
清除已有iptables规则
iptables -F
iptables -X
iptables -Z
开放指定的端口
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT (注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT
屏蔽IP
#屏蔽单个IP
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#禁止10.0.0.0网段接入
iptables -A INPUT -s 10.0.0.0/24 -j DROP
#还可以使用不是这个网段的进行操作
iptables -A INPUT ! -s 10.0.0.0/24 -j DROP
开启信任的IP网段
iptables -A INPUT -s 124.23.62.96/27 -p all -j ACCEPT #办公室固定IP段
iptables -A INPUT -s 192.168.2.0/24 -p all -j ACCEPT #IDC机房的内网网段
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT #其他机房的内网网段
iptables -A INPUT -s 203.82.24.0/24 -p all -j ACCEPT #IDC机房的外网网段
iptables -A INPUT -s 203.82.23.0/24 -p all -j ACCEPT #其他IDC机房的外网网段
如果想针对某IP进行单独开放端口可以如下配置:
如果我需要对内网某机器单独开放mysql端口,应该如下配置:
iptables -A INPUT -s 192.168.2.6 -p tcp -m tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.6 -p tcp -m tcp --sport 3306 -j ACCEPT
强调:如果并发比较大,或者日PV多的情况下,开启防火墙要注意,很可能导致网站访问缓慢
大并发(并发1万,PV日3000万)要么购买硬件防火墙,要么不开iptables防火墙