iptables防火墙介绍
iptables防火墙介绍使用原理5链INPUT:入站规则OUTPUT:出站规则FORWARD:转发规则[软路由时应用]PREROUTING:路由前规则[软路由时应用]POSTROUTING:路由后规则[软路由时应用]4表Filter过滤表[设置允许或者和拒绝规则]Nat地址转换表[内网ip转外网ip,外网ip转内网ip]Raw数据包跟踪表[记录每个的连接]Mangle修改状态[修改包头]命令的语
·
iptables防火墙介绍使用
原理
5链
INPUT:入站规则
OUTPUT:出站规则
FORWARD:转发规则[软路由时应用]
PREROUTING:路由前规则[软路由时应用]
POSTROUTING:路由后规则[软路由时应用]
4表
Filter过滤表[设置允许或者和拒绝规则]
Nat地址转换表[内网ip转外网ip,外网ip转内网ip]
Raw数据包跟踪表[记录每个的连接]
Mangle修改状态[修改包头]
命令的语法格式:
Iptables [-t 表名] 选项 [链名][条件][-j 目标操作]
选项:
- A 追加规则
- I 插入规则
- L 查看规则
- D 删除规则
J的目标操作:REJECT(拒绝),DROP,ACCEPT
# 如果源地址是192.168.4.100,使用tcp协议,访问我的22端口,则拒绝
iptables -t filter -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j REJECT
不写表时,默认时dilter
# 如果源地址是192.168.4.100,使用tcp协议,访问我的80端口,则允许
iptables -I INPUT -s 192.168.4.100 -p tcp --dport 80 -j ACCEPT
# 如果源地址是192.168.4.100,使用icmp协议,则拒绝
iptables -t filter -I INPUT -s 192.168.4.100 -p icmp -j REJECT
注意事项/整体规律
- 可以不指定表,默认为filter表
- 可以不指定链,默认为对应表的所有链
- 有规则先匹配规则,没有规则匹配默认规则
- 选项/链名/目标操作用大写子母,其余都小写
iptables -I INPUT -p tcp --dport 22 -j LOG
iptables -L #查看filter所有链规则
iptables -nL #查看filter所有链规则number
iptables -nl --line-number #显示行号
iptables -D INPUT 2 #删除第2条规则
iptables -D INPUT 3 #删除第3条规则
iptables -F #清空所有
iptables -P INPUT ACCEPT|DROP #设置默认规则
iptables -I INPUT 2 -s 192.168.4.100 -p tcp --dport 22 -j REJECT
# 插入规则到第2行
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 追加规则到末尾
iptables -F #清空所有(仅对filter)
仅仅把filter里面的所有链清空
iptables -t nat -F # 清空nat表
iptables -t raw -F # 清空raw表
iptables -t mangle -F # 清空mangle表
Linux软路由
# 在192.168.4.5主机开启路由转发功能(路由器)
\# cat /proc/sys/net/ipv4/ip_forward
\# echo "0" > /proc/sys/net/ipv4/ip_forward
\# echo "1" > /proc/sys/net/ipv4/ip_forward
# 1是开启,0是关闭
永久开启路由转发
vim /etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1
sysctl -a 查看所有内核参数
# 给4.0网段的主机和2.0网段的主机添加网关,即可实现不同网络互通
nmcli connection modify eth0 ipv4.gateway 192.168.4.5
nmcli connection modify eth1 ipv4.gateway 192.168.2.5
Iptables的条件规则
-s # 匹配源IP地址
-d # 匹配目标IP地址
--sprt # 匹配源端口
--dport # 匹配目标端口
-i # 匹配进站网卡
-o # 匹配出站网卡
-icmp-type # 匹配icmp类型
# Icmp-request 请求(ping)
# Icmp-reply 响应(pong)
# 其他主机无法ping本机,但本机也无法ping 其他主机
iptables -I INPUT -p icmp -j REJECT
# 除了192.168.4.100外,使用tcp,访问本机的1到1024都拒绝
iptables -I INPUT ! -s 192.168.4.100 -p tcp --dport 1:1024 -j REJECT
# 这条规则,不决定4.100是否可以访问本机
# 本机可以ping其他主机,其他主机不可以ping本机
iptables -F
iptables -I INPUT -p icmp ==icmp-type echo-request -j DROP
第二步:配置允许ssh端口连接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
#22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
#22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求
第三步:允许本地回环地址可以正常使用
iptables -A INPUT -i lo -j ACCEPT
#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许 iptables -A OUTPUT -o lo -j ACCEPT
第四步:设置默认的规则
# (由于在生产上,我们设置默认的入与转发都不允许,出的允许)
iptables -P INPUT DROP
# 配置默认的不让进 iptables -P FORWARD DROP #默认的不允许转发 iptables -P OUTPUT ACCEPT #默认的可以出去
第五步:配置白名单
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT
#允许机房内网机器可以访问 iptables -A INPUT -p all -s 192.168.140.0/24 -jACCEPT
#允许机房内网机器可以访问 iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT #允许183.121.3.7访问本机的3380端口
第六步:开启相应的服务端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开启80端口,因为web对外都是这个端口 iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT #允许被ping iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #已经建立的连接得让它进来
命令
# 查看某表中的规则:
iptables --line-number -t 表名 -nL
# 添加新的入站规则:
iptables -A INPUT -s ip地址 -p 协议 --dport 端口 -j 处理方式
# 替换规则:
iptables -R INPUT 编号 -s ip地址 -p 协议 --dport 端口 -j 处理方式
# 删除规则:
iptables -D INPUT 编号
# 清空规则:
iptables -F
# 修改默认规则:
iptables -t 表名 -P INPUT 处理方式
# 允许路由转发(由内向外):
iptables -t nat -A POSTROUTING -s 内网ip/网段 -j SNAT --to-source 外网ip
# 允许路由转发(由外向内):
iptables -t nat -A PREROUTING -d 外网ip -p 协议 --dport 端口 -j DNAT --to-destination 内网ip/网段
# 实现地址转发(反向代理,基于内网ip):
iptables -t nat -A PREROUTING -d 外网ip -p 协议 --dport 端口 -j DNAT --to-destination 内网ip/网段 iptables -t nat -I POSTROUTING -p 协议 --dport 端口 -j MASQUERADE
# 限制每秒钟接受到的数据包的个数(防止垃圾***)
iptables -I INPUT -m limit --limit 个数/sec -j ACCEPT
# 拒绝新的连接请求:
iptables -A INPUT -m state --state NEW -j DROP
备份
iptables-save > 文件
还原
iptables-restore < 文件
开启22端口 (如果改了ssh的端口22,使用对应得端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果OUTPUT设置成DROP需要添加
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
关闭22端口
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
开启常用端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# 允许ping
iptables -A INPUT -p icmp -j ACCEPT
# 如果OUTPUT设置成DROP需要添加
iptables -A OUTPUT -p icmp -j ACCEPT
# 允许loopback
iptables -A INPUT -i lo -p all -j ACCEPT
# 如果OUTPUT设置成DROP需要添加
iptables -A OUTPUT -o lo -p all -j ACCEPT
# 屏蔽指定ip
iptables -A INPUT -p tcp -s 192.168.10.1 -j DROP
# 减少不安全的端口连接
# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
# 允许某个IP远程连接
# iptables -A INPUT -s 192.168.10.1 -p tcp --dport 22 -j ACCEPT
# 允许某个网段的IP远程连接
iptables -A INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
# 允许指定网段通过、指定网口通过SSH连接本机
# iptables -A INPUT -i eth0 -p tcp -s 192.168.10.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -s 192.168.10.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
开启转发功能
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包
# iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
# 处理IP碎片数量,防止攻击,允许每秒100个
# iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
# 设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
# iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# 丢弃非法连接
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
设定默认规则,数据包的默认处规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
保存iptables文件,重启服务
# 保存iptables规则
service iptables save
# 重启iptables服务
service iptables restart
# 配置NAT表防火墙
# 查看NAT表规则
iptables -t nat -L
# 清除NAT规则
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
# 防止外网用内网IP欺骗
# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
#禁止与某个IP的所有连接
# iptables -t nat -A PREROUTING -d 192.168.10.1 -j DROP
# 禁用80端口
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DROP
# 禁用某个IP的80端口
# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 192.168.10.1 -j DROP
添加多个不连续的端口
iptables -A INPUT -p tcp -s 10.249.206.1 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -s 10.249.206.2 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -s 10.249.206.3 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 3306,6379 -j DROP
iptables -A INPUT -p tcp -s 10.161.0.0/16 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 10.249.255.0/24 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 10.126.0.0/16 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1/32 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP
iptables -A INPUT -p tcp -s 10.249.206.1 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -s 10.249.206.2 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -s 10.249.206.3 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -m multiport --dport 3306,6379 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 3306,6379 -j DROP
# 添加一个段落的ip
iptables -I INPUT -p tcp --dport 3306 -j DROP && \
iptables -I INPUT -m iprange --src-range 172.50.49.13-172.50.49.42 -p tcp --dport 3306 -j ACCEPT && \
iptables -I INPUT -m iprange --src-range 172.29.145.10-172.29.145.40 -p tcp --dport 3306 -j ACCEPT
iptables 网卡转发
# 安装 iptables 服务
service iptables status # 查看是否已安装Iptables服务
yum install -y iptables
yum install -y iptables-services # 安装iptables及iptables-services服务
systemctl stop firewalld
systemctl mask firewalld #禁用自带的iptables服务
iptables -L -n # 查看现有 iptables 规则
iptables -t mangle --list # 查看 Mangle 表
iptables -t nat --list # 查看 nat 表
service iptables save # 保存现有 iptables 规则
#### iptables SNAT 配置 ####
## 负责转发工作的Server配置如下
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -o eno1 -j SNAT --to-source 122.115.58.11
service iptables save
service iptables restart
更多推荐
所有评论(0)