防火墙的基础知识
Netfilter(数据包过滤)
所谓数据包过滤是分析进入主机的网络数据包,这就需要对IP,TCP,ICMP,HTTP等头部报头很熟悉了。将数据包提取出来进行分析。以决定是放行还是阻挡。所以可以过滤包括硬件地址,IP地址,TCP等进行过滤。
这个不是针对端口去限制的,而是针对软件进程的名字有关。比如。我限制httpd这个服务,我不管你监听在80
端口,还是基于虚拟主机的8080端口。我就是限制你。
1.iptables的详解
首先在主机内核中有几个hook(钩子函数)系统调用。每当有数据包从某个通道流过去时。钩子都会将这些数据钩起来然后和对比一番,符合标准就放行。
通用标准:
隐式扩展:
显式扩展:
处理办法:
管理规则:
管理链:
查看类:
-L:显示指定表中的规则:
-n:以数字形式显示
-v:详细说明(-vv更详细,-vvv再详细)
-x:显示计数器的精确值
-line-numbers:显示规则的号码
-j target:
ACCPET 放行
DROP 默默的丢弃该包
REJECT 丢掉该包后还返回一个报错
DNAT 目标IP NAT
SNAT 源IP NAT
REDIRECT 地址伪装
LOG 日志
MARK 标记
2.iptables的举例应用
安装程序
[root@localhost ~]# yum install iptables-services.x86_64
启动服务设置开机启动
[root@localhost ~]# systemctl start iptables
[root@localhost ~]# systemctl enable iptables
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
查看已有的策略
查看iptables列表
iptables -t filter -nL 查看filter表中的策略(不加-t则默认为filter表)
iptables -F 刷掉filter表中的测量,当没有用-t指定表名称时默认为filter
service iptables save 保存当前策略
iptables -A INPUT -j REJECT 拒绝所有主机的数据来源
iptables -D INPUT -p tcp --dport 80 -j REJECT 删除允许接入80端口的策略
iptables -N WESTOS 增加链WESTOS
iptables -E WESTOS redhat 改变链名称
iptables -X redhat 删除redhat 链
iptables地址伪装(路由器)
地址伪装就是为两个处在不同IP段的主机提供通信服务
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.117
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.17.217
环境配置
服务端两块网卡
添加策略
开启内核路由
客户端只需将网关设置好即可
现在我们来测试一下
现在我这两台机器处在不同网段是无法通信的,但是我用刚刚做好的路由器可以使他们通信
看吧可以ping通了,下面我们试一下能不能ssh连接呢
没毛病,第一条伪装策略成功,下面看看第二条伪装策略怎么样
上图可以看出我们明明是连接root@172.25.254.117这台主机的可是连上去发现是172.25.17.217难道连接错了?
并没有因为我们第二条策略就是把所以连接我172.25.254.117这个ip的数据都扔到172.25.17.217上。所以我们第二条策略也成功的。
删除策略
[root@localhost ~]# iptables -t nat -D PREROUTING -i eth0 -j DNAT --to-dest 172.25.17.217
[root@localhost ~]# iptables -t nat -D POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.117
删除之后同样需要保存重启服务
service iptables save
systemctl restart iptables