iptables防火墙

iptables防火墙

熟悉 iptables 框架
iptables 的 4 个表(区分大小写)::

名称
raw跟踪状态表
mangle包标记表
nat地址转换表
filter过滤表

iptables 的 5 个链(区分大小写):

名称
INPUT 链入站规则(进入防火墙内的包)
OUTPUT 链出站规则(出去防火墙的包)
FORWARD 链转发规则(处理经过防火墙的包)
PREROUTING 链路由前规则(在路由之前直接转发)
POSTROUTING 链路由后规则(经路由之后,读过目标地址后转发)

目标操作:
ACCEPT:允许通过/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志,然后传给下一条规则

操作备注
ACCEPT允许通过/放行
DROP直接丢弃,不给出任何回应
REJECT拒绝通过,必要时会给出提示
LOG记录日志,然后传给下一条规则

//注意事项与规律:
//可以不指定表,默认为filter表
//可以不指定链,默认为对应表的所有链
//如果没有找到匹配条件,则执行防火墙默认规则
//选项/链名/目标操作用大写字母,其余都小写

iptables查看和删除
常用管理选项

选项描述
-I在链的开头或指定序列插入一条规则
-L出所有的规则条目
-n以数字的形式显示地址,端口信息
–line-number查看规则时,显示规则序列号
-D删除链内指定序列号的规则
-F清空所有规则
-P为指定的链设置默认规则

基本匹配

选项用法
协议匹配-p
协议名地址匹配-s 源地址 , -d 目标地址
接口匹配-i 收数据的网卡, -o 发数据的网卡
端口匹配–sport 源端口 , --dport 目标端口
ICMP类型匹配–icmp-type , ICMP类型

iptables 命令的基本使用方法

1)iptabels 语法格式
[root@proxy ~]# iptables [-t 表名] 选项 [链名] [条件] [-j 目
标操作]
 [root@proxy ~]# iptables -t filter -I INPUT -p icmp -j 
REJECT
[root@proxy ~]# iptables -t filter -I INPUT -p icmp -j 
ACCEPT
[root@proxy ~]# iptables -I INPUT -p icmp -j REJECT
 //注意事项与规律:
 //可以不指定表,默认为 filter//可以不指定链,默认为对应表的所有链
 //如果没有找到匹配条件,则执行防火墙默认规则
 //选项/链名/目标操作用大写字母,其余都小写
##################################################################

 //目标操作:
 // ACCEPT:允许通过/放行
 // DROP:直接丢弃,不给出任何回应
 // REJECT:拒绝通过,必要时会给出提示
 // LOG:记录日志,然后传给下一条规则

2)iptables 命令的使用案例
创建规则的案例:

[root@proxy ~]# iptables -t filter -A INPUT -p tcp -j 
ACCEPT
 //追加规则至 filter 表中的 INPUT 链的末尾,允许任何人使用 TCP 协议访问本机
 [root@proxy ~]# iptables -I INPUT -p udp -j ACCEPT
//插入规则至 filter 表中的 INPUT 链的开头,允许任何人使用 UDP 协议访问本机
[root@proxy ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
 //插入规则至 filter 表中的 INPUT 链的第 2 行,允许任何人使用 ICMP 协议访问本机

查看 iptables 防火墙规则:

[root@proxy ~]# iptables -nL
 INPUT //仅查看 INPUT 链的规则
 target prot opt source destination
 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
[root@proxy ~]# iptables -L INPUT --linenumbers //查看规则,显示行号
num target prot opt source destination
 1 ACCEPT udp -- anywhere anywhere
 2 ACCEPT icmp -- anywhere anywhere
 3 ACCEPT tcp -- anywhere anywhere

删除规则,清空所有规则:

[root@proxy ~]# iptables -D INPUT 3
  //删除 filter 表中 INPUT 链的第 3 条规则
[root@proxy ~]# iptables -nL 
  INPUT //查看规则,确认是否删除
[root@proxy ~]# iptables -F
 //清空 filter 表中所有链的防火墙规则
[root@proxy ~]# iptables -t nat -F
//清空 nat 表中所有链的防火墙规则
[root@proxy ~]# iptables -t mangle -F
 //清空 mangle 表中所有链的防火墙规则
 [root@proxy ~]# iptables -t raw -F
 //清空 raw 表中所有链的防火墙规则

设置防火墙默认规则

[root@proxy ~]# iptables -t filter -P INPUT DROP
[root@proxy ~]# iptables -nL
 Chain INPUT (policy DROP)
 … …

filter 过滤和转发控制

步骤一: iptables 防火墙规则的条件

类别			选项				用法
通用匹配			协议匹配				-p 协议名称
				地址匹配				-s 源地址、 -d 目标地址
				接口匹配				-i 接受数据的网卡、-o 发送数据的网卡

隐含匹配			端口匹配				--sport 源端口号、 --dport 目标端口号
			  ICMP类型匹配			--icmp-type ICMP类型
1)主机型防火墙案例
 [root@proxy ~]# iptables -I INPUT -p tcp --dport 80 -j REJECT
 [root@proxy ~]# iptables -I INPUT -s 192.168.2.100 -j REJECT
 [root@proxy ~]# iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT
 [root@proxy ~]# iptables -I INPUT -i eth0 -p tcp --dport 80 -j  REJECT
 [root@proxy ~]# iptables -A INPUT -s 192.168.4.100 -j DROP //丢弃 192.168.4.100 发给本机的所有数据包
 [root@proxy ~]# iptables -A INPUT -s 192.168.2.0/24 -j DROP //丢弃 192.168.2.0/24 网络中所有主机发送给本机的所有数据包
 [root@proxy ~]# iptables -A INPUT -s 114.212.33.12 -p tcp --dport 22 -j REJECT //拒绝 114.212.33.12 使用 tcp 协议远程连接本机 ssh(22 端口)

步骤二:开启 Linux 的路由转发功能

[root@proxy ~]# echo 0 > /proc/sys/net/ipv4/ip_forward //关闭路由转发
[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward //开启路由转发 
//注意以上操作仅当前有效,计算机重启后无效
[root@proxy ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf //修改/etc/sysctl.conf 配置文件,可以实现永久有效规则

步骤三:禁 ping 的相关策略

1)默认直接禁 ping 的问题?

[root@proxy ~]# iptables -I INPUT -p icmp -j DROP
 //设置完上面的规则后,其他主机确实无法 ping 本机,但本机也无法 ping
其他主机
 //当本机 ping 其他主机,其他主机回应也是使用 icmp,对方的回应被丢弃

2)禁止其他主机 ping 本机,允许本机 ping 其他主机

[root@proxy ~]# iptables -A INPUT -p icmp \
> --icmp-type echo-request -j DROP
//仅禁止入站的 ping 请求,不拒绝入站的 ping 回应包

注意:关于 ICMP 的类型,可以参考 help 帮助,参考命令如下:

 [root@proxy ~]# iptables -p icmp --help

防火墙扩展规则

扩展条件类型

MAC地址匹配-m mac --mac-source
多端口匹配-m multiport --dport 目标端口列表, -m multiport --sport 源目标端口
-m iprange --s-m iprange --src-range ,-m iprange --dst-range

根据 MAC 地址过滤

1)根据 IP 过滤的规则,当对方修改 IP 后,防火墙会失效

 [root@proxy ~]# iptables -F
 [root@proxy ~]# iptables -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j DROP //设置规则禁止 192.168.4.100 使用 ssh 远程本机

但是,当client主机修改IP地址后,该规则就会失效,注意因为修改了IP,对client 主机的远程连接会断开,需要使用 virt-manager 开启虚拟机操作:

 [root@client ~]# ifconfig eth0 192.168.4.101
 [root@client ~]# ssh 
192.168.4.5 //依然成功

根据 MAC 地址过滤,可以防止这种情况的发生

[root@client ~]# ip link show  eth0 //查看 client 的 MAC 地址
 eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
 state UP mode DEFAULT qlen 1000
 link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff

[root@proxy ~]# iptables -A INPUT -p tcp --dport 22\
 > -m mac --mac-source 52:54:00:00:00:0b -j DROP
  //拒绝 52:54:00:00:00:0b 这台主机远程本机

基于多端口设置过滤规则

1)一次需要过滤或放行很多端口时会比较方便

 [root@proxy ~]# iptables -A INPUT -p tcp \
 > -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT
 //一次性开启 20,21,22,25,80,110,143,16501 到 16800 所有的端口

提示,多端口还可以限制多个源端口,但因为源端口不固定,一般不会使用,限
制多个源端口的参数是–sports.
1)允许从 192.168.4.10-192.168.4.20 登录

 [root@proxy ~]# iptables -A INPUT -p tcp --dport 22 \
 > -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT
注意,这里也可以限制多个目标 IP 的范围,参数是--dst-range,用法与--srcrange 一致。

禁止从 192.168.4.0/24 网段其他的主机登录

 [root@proxy ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP

配置 SNAT 实现共享上网

nat表典型应用
模拟防火墙服务器:使4网段能访问2网段的web服务器
web服务器:192.168.4.51
proxy:192.168.4.52
192.168.2.52
client: 192.168.2.54

web服务器上:

]# systemctl stop NetworkManager    关闭网络设备的服务
]# route add default gw 192.168.2.52        配置添加网关指向防火墙服务器
]# route -n                                 查看网关

proxy防火墙服务器上:

]# echo 1 > /proc/sys/net/ipv4/ip_forward           开启路由功能
]# vim /etc/rc.local                                 将上命令写入配置文件,永久生效
]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.4.52
]# iptables-save > /etc/sysconfig/iptables               将规则保存到配置文件

对于proxy外网IP不固定的情况可以执行下面的地址伪装,动态伪装IP

]# iptables  -t  nat  -A POSTROUTING  -s  192.168.2.0/24 -p tcp --dport 80 -j MASQUERADE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值