Linux防火墙firewalld/iptables使用教程

一、Firewalld(iptables)命令介绍

1、Firewalld(iptables)语法规则

# iptables [-t 表名] 选项 [链名] 条件匹配 -j 执行动作  #表名不写的话默认为filter表
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT  #为filter表的INPUT链增加规则,当目标端口为80并且为tcp协议则放行

2、Firewalld(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

-N:创建自定义链,针对不同的场景创造不同的链,方便管理 

iptables -I INPUT -p tcp --dport 80 -j IN_WEB  #将80请求转发给自定义链IN_WEB
iptables -N IN_WEB  #创建自定义链
iptables -I IN_WEB -s 192.168.1.0/24 -j ACCEPT #定义自定义链的具体规则

-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

· -m 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

· -m 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端口的访问

· -m 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个就拒绝

· -m limit:基于速率做限制
--limit N[/second|/minute|/hour|/day]:平均速率,比如每分钟允许N个请求
--limit-burst number:初始放行数量 

iptables -I INPUT -d 192.168.100.10 -p icmp -m limit --limit 3/minute  #每个客户端每分钟只能有3次请求

· -m string:根据字符串进行匹配 

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

· -m 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 #午休拒绝上网

· -m 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

二、Firewalld(iptables)使用示例

1、单服务器防护,对明确端口的服务放行,其他全部拒绝

iptables -A INPUT -p tcp --dport 22 -j ACCEPT  #放行ssh服务
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dport 443,80 -j ACCEPT  #放行443,80端口
iptables -A INPUT -p tcp -dport 3306 -m iprange --src-range 192.168.1.201-192.168.1.210 -j ACCEPT  #允许特定IP访问3306端口
iptables -A OUTPUT -p tcp -dport 3306 -m iprange --dst-range 192.168.1.201-192.168.1.210 -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、局域网共享一个公网地址实现上网。将一台拥有内网、外网双网卡的服务器作为路由器,配置iptables规则,局域网内其他机器将网关地址指向到该路由器内网网卡地址即可 

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

3、跳板机功能 

# 打开系统IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward #临时开启
#永久生效
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p

#请求本机21022端口将跳转到192.168.17.47:3306端口
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21022 -j DNAT --to-destination 192.168.17.47:3306

#如果客户端172.20.1.132访问172.20.7.101:3306端口,将转发到172.20.7.100:3311端口,该配置是在172.20.7.101完成
iptables -t nat -A PREROUTING -d 172.20.7.101 -p tcp -s 172.20.1.132 --dport 3312 -j DNAT --to-destination 172.20.7.100:3311
iptables -t nat -A POSTROUTING -d 172.20.7.100 -p tcp --dport 3311 -j SNAT --to-source 172.20.7.101

三、Firewalld(iptables)规则的保存与恢复 

iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

使用命令iptables-save来保存规则。一般用

iptables-save > /etc/sysconfig/iptables

生成保存规则的文件 /etc/sysconfig/iptables,

也可以用

service iptables save

它能把规则自动保存在/etc/sysconfig/iptables中。

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。

四、Firewalld(iptables)安装、启动

查看状态: systemctl status firewalld 

关闭: systemctl stop firewalld 

安装:yum install iptables-services 

开机禁用 : systemctl disable firewalld 

开机启用 : systemctl enable firewalld

保存: service iptables save 

启动: systemctl start firewalld 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值