本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

Linux防火墙Iptables/Firewalld配置教程

发布:TangLu2018-4-18 11:55分类: 系统安全 标签: 防火墙 iptables

iptables是一个管理netfilter防火墙的命令行工具,通过iptables命令可以对netfilter进行配置。在Centos 7中firewalld替代了iptables服务,但还是通过iptables命令在进行管理。之所以说代替了iptables服务仅仅是指服务的启动方式不同

service iptables stop  # centos 6 
systemctl stop firewalld  # centos 7


一、Iptables防火墙构成(4表5链)

iptables1.png

1、filter表(默认表):最常用的表,用于过滤数据包的进出,其中又包含了3个规则链

    INPUT:负责过滤进入主机的数据包

    OUTPUT:负责过滤主机发出的数据包

    FORWARD:负责转发该主机的数据包到其他目标地址

2、nat表(网络地址转换):多用于内外网地址转换,包含了3个链:

    PREROUTING:实现DNAT功能,改变数据包的目的地址,多用于局域网接收公网数据时将目标的地址转换为局域网的一个地址,实现内网跳板机的功能

    POSTROUTING:实现SNAT功能,改变数据包的源地址,多用于局域网向公网发送数据时将地址转换为公网地址

    OUTPUT:同filter表OUTPUT

3、mangle:较少使用,略

4、raw表较少使用,


二、iptables语法规则示例:

首先看一条命令,这条命令是给INPUT链增加一条规则,当访问目标为tcp协议的80端口则允许(其中的-t选项可不加,因为默认就是filter表)

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT


三、iptables常用选项(注意大小写)

    -A |-D |-I  [CHAINS]:给指定的链增加或者删除或者插入一个规则

iptables -A INPUT -p tcp --dport 80 -j DROP    #增加一条规则用于测试  
iptables -L --line-numbers    #加上--line-numbers参数可以显示规则的编号,可以看到之前设置的编号为1
iptables -D INPUT 1    #删除编号为1的规则


    -L:显示所有链下的所有规则,默认是filter表,可以用-t选项指定其他表。还可以跟上-n选项,对主机或端口信息不做反向解析;-v显示更详细信息;--line-numbers显示行号
iptables -t filter -L -n   
Chain INPUT (policy ACCEPT)    #INPUT链下的规则
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)    #FORWARD链下的规则
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)    #OUTPUT链下的规则
target     prot opt source               destination

    -X:清空用户自定义链
    -Z:计数器归零
    -F:清空所有规则或者指定规则
iptables -F  #清空所有规则
iptables -F INPUT  #清空filter表INPUT链中的规则
iptables -t nat -F PREROUTING  #清空nat表PREROUTING中的规则

    -j  ACCEPT | DROP | REJECT | DNAT | SNAT | MASQUERADE | MARK:指定防火墙的行为,ACCEPT是允许;DROP是丢弃(放弃响应对方请求且不作答复);REJECT是拒绝(会明确给对方一个消息说自己拒绝请求);DNAT为目标地址转换;SNAT为源地址转换;MASQUERADE是地址伪装;MARK防火墙标记,可用于LVS持久连接

    -p(小写):指定协议,如tcp、udp、icmp、all

    -i:指定网络设备,如eth0

    -P(大写):指定默认的规则。在生产环境中可以把默认规则设置为拒绝,然后对需要放行的服务设置允许规则,不过做这个设置时要注意把22端口放行,不然自己就无法远程上服务器了
iptables -P INPUT DROP    #把INPUT链的默认规则改为DROP 

iptables2.png
    -s:指定客户端源地址,通常是对访问来源做限制
-s 192.168.0.1  #匹配来自192.168.0.1的数据包
-s 192.168.1.0/24  #匹配来自192.168.1.0/24的数据包

    --dport:指定目标端口,需配合-p选项。通常是对访问的端口做限制,可以指定连续的端口。
iptables -A INPUT -p tcp --dport 80 -j DROP  
iptables -I INPUT -p tcp --dport 10000:10010 -j DROP

    --sport:指定源端口,需配合-p选项
--dport 80
--dport 1000:2000
--dport :3000


四、iptables常用扩展选项(扩展选项通过-m来指定,然后再指定子选项)

1、multiport扩展:可以离散定义多个端口或者范围,最多指定15个

[!] --sports port[,port|,port:port]...:指定多个源端口
[!] --dports port[,port|,port:port]...:指定多个目标端口
[!] --ports port[,port|,port:port]...:同时指定源端口和目标端口
iptables -t filter -A INPUT -s 192.168.100.10 -d 192.168.100.20 -p tcp -m multiport --dports 22,80 -j ACCEPT

2、iprange扩展:指明连续的IP地址范围 
[!] --src-range from[-to]:源IP地址
[!] --dst-range from[-to]:目标IP地址
iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 192.168.100.50-192.168.100.60 -j DROP #拒绝192.168.100.50-60这几个IP对80端口的访问


3、connlimit扩展:根据客户端IP并发连接数做限制
--connlimit-upto n:连接的数量小于等于n时匹配
--connlimit-above n:连接的数量大于n时匹配
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP #对80端口连接数大于10个就拒绝

4、limit扩展:基于速率做限制
--limit rate[/second|/minute|/hour|/day]:平均速率
--limit-burst number:初始放行数量
iptables -I INPUT -d 192.168.100.10 -p icmp -m limit --limit 3/minute


5、string扩展:根据字符串进行匹配

iptables -I INPUT -p tcp --dport 80 -m string --algo bm --string 'www.baidu.com' -j DROP #不允许访问baidu.com,--alog bm是一种算法


6、time扩展:根据时间进行匹配

-m time --datestart 2019-05-01 --datestop 2019-05-04  #匹配五一节
iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 12:30 --timestop 13:30 --kerneltz 2019-05-04  -j DROP #午休拒绝上网


6、state扩展:根据连接追踪机制检查连接的状态

[!] --state statestate包含以下几种状态
NEW:新请求
ESTABLISHED:NEW状态后所建立好的连接
RELATED:相关联的连接,如FTP服务有2个端口且相关
INVALID:无效连接

iptables -A INPUT -d 192.168.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT


五、iptables的三个实际使用点

1、Linux主机防火墙(FILTER表,INPUT链),如下就是单服务器防护完整配置,出站不受拦截,其他全部拒绝

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -i lo -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT DROP



2、局域网共享一个公网地址实现上网(NAT表,POSTROUTING链):将一台拥有内网、外网双网卡的服务器作为路由器,配置iptables规则,局域网内其他机器将网关地址指向到该路由器内网网卡地址即可

iptables -t nat POSTROUTING -s 192.169.1.100 -o eth0 -j SNAT -to-source 222.201.178.10


3、跳板机功能(NAT表,PREROUTING)。如下规则是将访问192.168.145.185 10086端口转发到192.168.145.186的22端口,实现跳板机登录。

iptables -t nat -A PREROUTING -d 192.168.145.185 -p tcp --dport 10086 -j DNAT --to-destination 192.168.145.186:22
iptables -t nat -A POSTROUTING -d 192.168.145.186 -p tcp --dport 22 -j SNAT --to-source 192.168.145.185


六、iptables规则的保存:

通过命令对iptables做的操作都是临时生效,重启服务后就会失效,要永久生效的话需要保存配置信息。或者用iptables-save > filename 来把配置重定向到一个文件中,日后再用iptabels-restore < filename恢复

service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
/etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Linux防火墙Iptables/Firewalld配置教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-193.html  [生成短网址]

已有 1/3885 人参与

评论:

GNSYSTEM 2016-08-08 11:12
看破浮生过半,心情半佛半仙,这位道友,搞基否?喵。

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~