首页 > 系统相关 >1-iptables

1-iptables

时间:2024-05-10 10:59:27浏览次数:27  
标签:iptables -- 192.168 规则 INPUT 数据包

1.iptables

firewalld和iptables有什么不同?

Firewalld和Iptables都是Linux系统中的防火墙软件,主要的不同点如下:
1. Iptables是一个底层的、基于内核的防火墙工具,它使用一种称为Netfilter的内核模块来拦截数据包。而Firewalld是基于Iptables的高级防火墙配置工具,它提供了一个更加简单、易用的接口,可以动态地管理规则,而不需要手动配置iptables规则。
2. Iptables使用一组规则链来过滤数据包。规则链可以包含多个规则,通过对包进行匹配和跟踪,确定是放行还是拦截。而Firewalld采用了一个叫做“zones”的概念,将针对不同网络环境的安全策略组织在一起。
3. Iptables使用一个被称为iptables的用户态工具来管理规则。而Firewalld使用一个名为firewall-cmd的用户态工具,这个工具提供了简单的命令行接口,还支持通过DBus进行远程管理。

包的流向详解

https://blog.csdn.net/qq_38892883/article/details/81252915

理论基础:当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

iptables实现防火墙功能的原理是:
1.在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数.
2.iptables这款用户空间的软件可以在这5处写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter

f64dc67b87afe2e63138dbb22aef26fe.png

使用方式区别:放行****80端口

iptables的设置方法
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

# 默认位置 /etc/sysconfig/iptables
# 永久保存 iptables-save

firewalld的设置方法
firewall-cmd --permanent --zone=public --add-service=http   # 永久添加http服务至public区域
firewall-cmd --reload
或
firewall-cmd --permanent --zone=public --add-port=80/tcp    # 永久添加80端口至public区域
firewall-cmd --reload

firewall-cmd --permanent \
--add-rich-rule="rule family="ipv4" source address="192.168.13.0/24" port port="9187" protocol="tcp" accept"

firewalld区域

阻塞区域(block):任何传入的网络数据包都将被阻止。
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。
信任区域(trusted):所有的网络连接都可以接受。
丢弃区域(drop):任何传入的网络连接都被拒绝。
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。

注:FirewallD的默认区域是public。
firewalld将9个区域的配置文件(*.xml)保存在/usr/lib/firewalld/zones目录下

iptabels语法

iptables  [-t 表名]  选项  [链名]  [条件]  [-j 动作]

默认为filter表,可以不指定
默认为对应表的所有链,可以不指定

优先级
raw > mangle > nat > filter

** 选项**

添加规则
-A           在链的末尾添加规则
-I            在链的开头添加规则

删除规则
-D            删除指定序号的规则
-F            删除所有规则

查看规则
--line-numbers      显示规则序号
-L                  查看所有表和链的规则
-n                  以数字形式显示地址、端口等信息

条件

-p            协议名
-s            源地址
-d            目标地址
-i            本机接收数据包使用的网口
-o            本机发送数据包使用的网口
--to-source        本机的
--to-destination
--sport       源端口
--dport       目标端口
--icmp-type   icmp类型

动作

ACCEPT        允许数据包通过
DROP          丢弃数据包
REJECT        拒绝数据包通过
LOG           将数据包信息记录 syslog 曰志
DNAT          目标地址转换
SNAT          源地址转换
MASQUERADE    地址欺骗
REDIRECT      重定向

四表(区分大小写)

raw                状态跟踪
mangle          包标记    修改数据包的标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由
nat                 地址转换
filter               数据过滤

这四张表是iptables服务功能的分类

五链(区分大小写)

链是IP包传输的方向

INPUT链(入站规则)
匹配进入防火墙本机的ip包,通过路由表后目的地为本机

OUTPUT链(出站规则)
修改本地产生的数据包的目的IP地址

FORWARD链(转发规则)
匹配经过防火墙主机的ip包,过路由表后,目的地不为本机

PREROUTING链(路由前规则)
修改到达防火墙的数据包的目的IP地址
外网访问内网,修改数据包中的目的IP为内网IP
配置DNAT在此添加规则

POSTROUTING链(路由后规则)
修改离开防火墙的的数据包的源IP地址
内网访问外网,修改数据包中的源IP地址为外网地址
配置SNAT在此添加规则

表对应的链

raw表      PREROUTING链、OUTPUT链
mangle表   PREROUTING链、POSTROUTING链、INPUT链、OUTPUT链、FORWARD链
nat表      PREROUTING链、POSTROUTING链、OUTPUT链
filter表   INPUT链、OUTPUT链、FORWARD链

例子

追加规则至filter表中的INPUT链的末尾,允许任何人使用TCP协议访问本机
iptables  -t  filter  -A  INPUT  -p tcp  -j  ACCEPT

插入规则至filter表中的INPUT链的开头,允许任何人使用UDP协议访问本机
iptables  -I  INPUT  -p  udp  -j  ACCEPT

插入规则至filter表中的INPUT链的第2行,允许任何人使用ICMP协议访问本机
iptables  -I  INPUT 2  -p  icmp  -j  ACCEPT

查看INPUT链的规则,显示行号
iptables  -nL  INPUT  --line-numbers
num  target     prot opt source         destination

删除规则,清空所有规则
iptables  -F

删除filter表中INPUT链的第3条规则
iptables  -D  INPUT  3

清空nat表中所有链的防火墙规则
iptables  -t  nat  -F

用叹号!取反
iptables -A OUTPUT -o eth0 -p tcp ! -d xxx.xxx.xxx.xxx -j DROP

扩展规则

语法:
iptables 选项 链名称 -m 扩展模块 --扩展条件 -j 动作

注意:当使用-p选项指定协议后,如果没有指定模块名,默认模块与协议同名
所以,如果扩展匹配条件(带--的这种)依赖的模块正好和-p指定的协议同名,则可以省略-m选项

扩展条件类型

类别 选项 用法

扩展匹配
  |MAC地址匹配 |-m mac --mac-source MAC地址|
|多端口匹配 |-m multiport --dports 目标端口列表

多个端口用逗号间隔,连续端口用冒号间隔
-m multiport --sports 源端口列表| |

IP范围匹配|-m iprange --dst-range IP1-IP2
-m iprange --src-range IP1-IP2 | |

例子

根据MAC地址设置过滤规则

# 拒绝52:54:00:00:00:0b通过ssh访问本机
iptables -A INPUT -p tcp --dport 22 -m mac --mac-source 52:54:00:00:00:0b -j DROP

基于多端口设置过滤规则

# 一次性开启20,21,22,25,80,110,143,16501到16800所有的目标端口
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT

提示,多端口还可以限制多个源端口,但因为源端口不固定,一般不会使用,限制多个源端口的参数是--sports

根据IP地址范围设置过滤规则

# 允许从192.168.4.10~20登录
iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEP

# 多个扩展匹配条件应当写在其对应模块之后
# --dport这个扩展匹配条件依赖于tcp模块,因为指定的协议与其模块同名,所以没有指定,但是也应当写在对应的模块后边

# 禁止192.168.4.0/24 网段以外的其他主机登录
iptables -A INPUT -p tcp --dport 22 ! -s 192.168.4.0/24 -j DROP

例子

丢弃192.168.4.100发给本机的所有数据包
iptables  -A  INPUT  -s 192.168.4.100  -j  DROP

丢弃192.168.2.0/24网络中所有主机发送给本机的所有数据包
iptables  -A  INPUT -s  192.168.2.0/24  -j  DROP

拒绝访问本机22端口
iptables -A  INPUT -s  114.212.33.12  -p tcp --dport 22 -j  REJECT

echo 0 > /proc/sys/net/ipv4/ip_forward           # 关闭路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward           # 开启路由转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf # 永久生效

禁止其他主机ping本机,允许本机ping其他主机
iptables  -A  INPUT -p icmp  --icmp-type echo-request  -j  DROP
去 echo-request(ping)
回 echo-reply(ping)

SNAT和DNAT基本配置

内网访问外网做SNAT,外网访问内网做DNAT

MASQUERADE是SNAT的特殊情况,当出口IP变化较大时使用该方式

配置SNAT命令基本语法
iptables -t nat -A POSTROUTING -p tcp -s 本机内网地址 -o 网口 -j SNAT --to-source 外网地址

把10.0网段通过192.168.5.3转发出去
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth1 -j SNAT --to-source 192.168.5.3

把10.0网段通过192.168.5.3或192.168.5.4或192.168.5.5转发出去
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth1 -j SNAT --to-source 192.168.5.3-192.168.5.5

把10.0网段通过eth0的IP转发出去,MASQUERADE自动获取eth0的ip
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth1 -j SNAT MASQUERADE

配置DNAT命令基本语法
iptables -t nat -A PREROUTING -p 协议 -i 网口 --dport 端口 -j DNAT --to-destination IP:端口

把202.202.202.1的访问转发到内网192.168.0.101上
iptables -t nat -A PREROUTING -d 202.202.202.1 -j DNAT --to-destination 192.168.0.101

iptables -t nat -A POSTROUTING -d 192.168.0.101 -j SNAT --to 192.168.0.1

iptables-save > /etc/init.d/iptables
iptables-save > iptables.bak
iptables-save -t filter > iptables-filter.bak
/etc/init.d/iptables save

配置SNAT实现共享上网

设置防火墙规则,允许位于局域网中的主机访问外网

步骤一:搭建内外网案例环境

主机名要求 网卡、IP地址以及网关设置要求
client 网关:192.168.4.5
eth0:192.168.4.100   内网
proxy eth1:192.168.2.5
eth0:192.168.4.5
web1 网关:192.168.2.5
eth1:192.168.2.100   外网

Client(4.100)       proxy(4.5、2.5)        web1(2.100)

现在,在外部网络中有一台web服务器192.168.2.100,因为设置了网关,client已经可以访问此web服务器了。但,如果查看web1的日志就会发现,日志里记录的是192.168.4.100在访问网页。我们需要实现的效果是,client可以访问web服务器,但要伪装为192.168.2.5后再访问web服务器(模拟所有位于公司内部的电脑都使用的是私有IP,希望访问外网,就需要伪装为公司的外网IP后才可以)。

设置client的网关

systemctl stop NetworkManager

route add default gw 192.168.4.5   #

route -n

设置web1的网关

systemctl stop NetworkManager

route add default gw 192.168.2.52

route -n

设置防火墙规则,实现IP地址的伪装(SNAT源地址转换)

proxy主机开启路由转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

设置防火墙规则,实现SNAT地址转换

iptables  -t  nat  -A POSTROUTING  -s  192.168.4.0/24 -p tcp --dport 80  -j SNAT  --to-source 192.168.2.5

登陆web主机查看日志

tail  /var/log/httpd/access_log

192.168.2.5 - - [12/Aug/2018:17:57:10 +0800] "GET / HTTP/1.1" 200 27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

通过日志会发现,客户端是先伪装为了192.168.2.5之后再访问的web服务器

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

iptables  -t  nat  -A POSTROUTING  -s  192.168.4.0/24 -p tcp --dport 80 -j MASQUERADE

最后,所有iptables规则都是临时规则,如果需要永久保留规则需要执行如下命令:

service  iptables save

iptables-save > /etc/sysconfig/iptables

标签:iptables,--,192.168,规则,INPUT,数据包
From: https://www.cnblogs.com/lixunblogs/p/18167286

相关文章

  • Iptables 本地回环接口容易造成误解的配置
    使用iptables-L可能会看到类似如下的配置ChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTall--anywhereanywherectstateRELATED,ESTABLISHEDACCEPTall--anywhereanywh......
  • iptables使用详解(centos7)
    iptables使用详解(centos7)小百菜已于2024-03-2114:40:02修改阅读量7.2k收藏22点赞数2文章标签:iptables限速版权GitCode开源社区文章已被社区收录加入社区我们需要安装iptables-services,用来启动和停止iptables服务防火墙配置文件/etc/sysconfig/iptables查......
  • centos iptables xtables-multi
    docker启动systemctlstartdocker#失败查看原因journalctl-xeudocker4月2917:57:42a03dockerd[55315]:time="2024-04-29T17:57:42.491144216+08:00"level=infomsg="Startingup"4月2917:57:42a03dockerd[55315]:time="2024-04-29T17:57......
  • k8s kube-proxy 负载均衡路由策略 IPVS 为什么iptables 更高效
    环境lsb_release-aNoLSBmodulesareavailable.DistributorID: UbuntuDescription: Ubuntu24.04LTSRelease: 24.04Codename: noble先说原理iptables如果服务过多或者pod过多就要则添加海量的iptabes规则iptables使用的具体算法主要是线性搜索,也可以称为顺......
  • iptables清空所有规则
    编写Shell脚本以备份和还原规则在清空规则之前,可以使用iptables-save命令将当前规则保存到文件中,以备之后的恢复。之后,可以使用iptables-restore命令来还原规则。保存规则到文件:shelliptables-save>backup.rules清空所有规则:shelliptables-Fiptables-tnat-Fiptables-t......
  • linux7-iptables与firewall
    1.iptables 1规则链的默认策略拒绝动作只能是DROP,而不能是REJECT。2在日常运维工作中,经常会使用ping命令来检查对方主机是否在线,而向防火墙的INPUT3规则链中添加一条允许ICMP流量进入的策略规则就默认允许了这种ping命令检测行为。4[root@linuxprobe~]#iptable......
  • 安装iptables报错
    安装ittables报错:apt-getinstalliptablesReadingpackagelists...DoneBuildingdependencytreeReadingstateinformation...DoneSomepackagescouldnotbeinstalled.Thismaymeanthatyouhaverequestedanimpossiblesituationorifyouareusingtheuns......
  • 9、iptables 防火墙
    1.iptables基础规则1.1.Linux包过滤防火墙netfilter位于Linux内核中的包过滤功能体系称为Linux防火墙的“内核态”iptables位于/sbin/iptables,用来管理防火墙规则的工具称为Linux防火墙的“用户态”1.2.包过滤的工作层次主要是网络层,针对IP数据包,体现在对包......
  • iptables和firewalld的区别
    iptables与firewalld的区别1),firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;2),firewalld使用区域和服务而不是链式规则;3),firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需......
  • iptables命令
    iptables命令语法顺序 -L显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和z选项一起使用,这时链会被自动列出和归零。精确输出受其它所给参数影响。-n只显示数字ip、port-t指定表-Aappend,追加最后-Iinsert最前面插入新规则-D删除规则-p......