Linux防火墙iptables规则的添加、删除、修改、保存

本文介绍iptables这个Linux下最强大的防火墙工具,包括配置iptables三个链条的默认规则、添加iptables规则、修改规则、删除规则等。

1. iptable基础命令说明

iptables -A INPUT -s 192.168.109.10 -j DROP:拒绝192.168.109.10主机访问本服务器;
  • -A:添加一条规则,默认是加在最后。
  • "拒绝给192.168.109.10主机提供服务",最好使用INPUT链。使用PREROUTING,也可以满足要求,但是如果用户的要求是让服务器提供转发功能,添加到PREROUTING链中,"转发"功能也将被拒绝掉。
  • 链名要大写;
  • -s:指定源地址,可以是IP地址,也可以是网段"192.168.109.10/24";"-s 为空",表示拒绝所有;
  • -j:指定所需要的操作;
  • 拒绝有两种方式,一种是"REJECT",还有一种是"DROP";DROP是不回应,REJECT是拒绝;
  • iptables -A INPUT -j DROP,表示拒绝所有。不过加规则的时候,不要将自己的ssh给拒绝掉。

2. 查看规则集

iptables --list -n # 加一个-n以数字形式显示IP和端口,看起来更舒服

iptables -nvL -t mangle # 查看mangle表中的防火墙规则;

# -t:指定表名,默认情况下是"fliter"表;
# -v:查看详细信息;
# pkts:被本机报文所匹配的个数;
# prot:放行哪种协议;
# opt:额外的选项,--表示没有;
# target:处理机制;
# 选项中"v"和"L"的顺序(V只能在L的前面);

iptables -nvL --line-numbers # 查看fliter表中规则的顺序;
#--line-numbers:查看指定表中的规则的顺序;
#不指定表,默认情况下就是"fliter"表;
#表中的规则是有执行顺序的,编号(num)越小,越先执行。只要匹配到结果,就不会往下执行了;

3. 配置默认规则

iptables -P INPUT DROP  # 不允许进
iptables -P FORWARD DROP  # 不允许转发
iptables -P OUTPUT ACCEPT  # 允许出

4. 增加规则

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
# 允许源IP地址为192.168.0.0/24网段的包流进(包括所有的协议,这里也可以指定单个IP)
iptables -A INPUT -d 192.168.0.22 -j ACCEPT
# 允许所有的IP到目的为192.168.0.22的访问
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 开放本机80端口
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 开放本机的ICMP协议

iptables -A INPUT -s 192.168.109.10 -d 192.168.109.4,192.168.109.5 -j REJECT
# 拒绝来自192.168.109.10的主机访问192.168.109.4的ip地址; -d:指定目标地址,使规则更加详细;
# 一条命令添加两条规则;源地址也可以使用这种方式,快速添加规则;
# 该命令在规则中的语义的含义,-s、-d属于并且的关系,即:拒绝源是192.168.109.10的ip,且源是192.168.109.4的访问;而192.168.109.4和192.168.109.5在逻辑上属于或者的关系。

iptables -I INPUT -s 1.1.1.1 -j DROP
#在"fliter"表中的INPUT链中,链首插入一条规则;-I:表示在指定的链中插入一条规则,可以指定编号

iptables -R INPUT 1 -s 2.2.2.2 -j REJECT
# 表示替换第一条规则;
# -R,replace,替换指定的规则;

iptables -A INPUT -s 192.168.109.10 -i eth0 -j REJECT
#拒绝192.168.109.10主机访问我的eth0网卡。
#-i:加上网卡名,表示报文流入的接口;
#-o:加上网卡名,表示报文流出的接口;

iptables -A INPUT ! -s 192.168.109.4 -p tcp --dport 80 -j REJECT
# 除了192.168.109.4的主机可以访问我的tcp的80端口,其他的主机全部拒绝;
# !:表示"非";一般情况下,很少使用该方式。

iptables -A INPUT -s 192.168.109.4 -p icmp --icmp-type 8 -j REJECT
# 拒绝来自192.168.109.10主机发送来的icmp的请求包。即192.168.109.10主机无法ping通我,我可以ping通它。

iptables -A INPUT -s 192.168.109.4 -p icmp --icmp-type 8 -j REJECT
# 拒绝来自192.168.109.10主机发送来的icmp的请求包。即192.168.109.10主机无法ping通我,我可以ping通它。
# icmp协议中,ping通需要满足两个条件,首先源主机向目标主机发送一个请求包(8),目标主机收到之后,便会返回一个回应包(0)。
# -p:指定协议;
# --icmp-type:指定ping包的类型。(code可以省略;)

iptables -A INPUT -s 192.168.109.10 -p tcp -m multiport --dports 20:22,80 -j REJECT
# 拒绝来自192.168.109.10主机发送来的访问我的20-22,80端口的包。
# -m:后面跟模块名,multiport:以离散形式表示的多端口(最多可以跟15个端口);
# --dports:目标端口是多个端口;
# 使用samba服务测试多端口的话,可能存在问题。想要抓包测试的话,可以使用"tcpdump -i eth0 -nn host 192.168.109.4";

iptables -A INPUT -m iprange --src-range 192.168.109.1-192.168.109.10 -j REJECT
# 拒绝192.168.109.1~192.168.109.10范围内的所有主机的访问。
# iprange:ip范围的模块;
# --src-range:源地址范围;
# --dsc-range:目标地址的范围;

iptables -A INPUT -m mac --mac-source 00:0c:29:2f:b1:d6 -j REJECT
# 拒绝该mac地址的主机访问本主机的资源。
# mac:mac地址模块;
# --mac-source:源主机的mac地址;

iptables -A OUTPUT -p tcp -m string --algo bm --string "han" -j REJECT
# 拒绝所有主机访问访问我的有"han"字符串的报文。
# string:字符串模块;
# --algo:指定匹配算法,bm、kmp算法,两个随便选一个;
# --string:指定要匹配的字符串;
# --from offset:开始偏移,--to offset:结束偏移;
# 添加的是OUTPUT链;

5. 删除规则

iptables -D INPUT -s 192.168.0.21 -j ACCEPT
# 删除刚才建立的第一条规则

6. 保存和清空规则

iptables -F
# -F 清空规则缓冲区(这个操作会将上面的增加操作全部清空,若须保留建议先执行一下句:保存)
iptables -F OUTPUT
#清空OUTPUT链中的规则;

iptables -S
#以iptables-save命令格式显示fliter链上的规则;

iptables -A INPUT -m time --weekdays 1,2,3,4,5 --timestart 9:00 --timestop 10:00 -j REJECT
# 拒绝所有的主机在周一到周五的九点~十点之间,访问本主机的所有资源;
# time:时间模块;
# --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
# --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
# --timestart hh:mm[:ss] 时间
# --timestop hh:mm[:ss]
# --monthdays day[,day...] 每个月的几号
# --weekdays day[,day...] 星期几
# 注意:centos7中,使用的是UTC时间(北京时间转化成UTC时间是减8);centos6中使用的是本地时间;

service iptables save
# 将规则保存在/etc/sysconfig/iptables文件里
service iptables restart
# 重启Iptables服务

7. 总结

最后说明一下,iptables防火墙的配置文件存放于:/etc/sysconfig/iptables

8. 参考

发表评论

邮箱地址不会被公开。 必填项已用*标注