博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day34:iptables之filter表及nat的应用
阅读量:6208 次
发布时间:2019-06-21

本文共 6883 字,大约阅读时间需要 22 分钟。

hot3.png

综合:在这里我们讲两个小案例,filter和nat的案列,会讲到一些具体的操作步骤,均已经过测试,可用于实际工作中:

1、filter表

案列:只针对filter表,预设策略INPUT链DROP,其他OUTPUT和FORWARD链ACCEPT,然后针对192.168.149.0/24开通56888(ssh)端口,对所有网段开通80端口,对所有网段开通21端口:

因为有多条规则,最好写成脚本的格式:内容如下:

[root@localhost ~]# vim /usr/local/sbin/iptables.sh #!/bin/bashipt="/usr/sbin/iptables"$ipt -F                          #清空规则$ipt -P INPUT  DROP              #input链丢弃掉$ipt -P OUTPUT  ACCEPT           #output链允许$ipt -P FORWARD ACCEPT           #forward允许$ip  -A INPUT -m state --state RELATED,ESTABLISHED -J ACCEPT  #默认关于这些链接继续链接,不中断$ipt -A INPUT -p tcp -s 192.168.149.0/24 -p tcp --dport 56888 -j ACCEPT   #指定可连接本机sshd的IP$ipt -A INPUT -p tcp --dport 80 -j ACCEPT                 #对所有网段放行本机的80端口$ipt -A INPUT -p tcp --dport 21 -j ACCEPT                 #对所有网段放行本机的21端口#因为我的sshd端口是56888,所以修改了.

注释:图里我放行了我的sshd端口,不建议自己在远程登录下允许此脚本,会断开远程连接:

图里有$ip  -A INPUT -m state --state RELATED,ESTABLISHED -J ACCEPT这条命令:

-m表示表示扩展选项,针对连接状态放行,为了通信的顺畅:

此时在物理机测试,,发现可以正常远程:查看规则,发现第一条规则已经放行了181个包了:

[root@localhost ~]# iptables -nvLChain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination           181 16744 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:56888   17  1540 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0               0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0               0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22   24  1872 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 169 packets, 19408 bytes) pkts bytes target     prot opt in     out     source               destination

2、nat小案例:iptables表还可以实现nat的功能,有时候我们的内网需要上网,而同时也没那么多的公网IP分配,nat的主要功能主要是通过把内网地址在访问时通过改变其源目IP地址来实现上网,主要分为两种形式:

静态nat(一个公网对应一个私网地址),主要用于外网访问内网的某一个服务器,并且需要放行所有端口:

动态PAT(一个公网对应n个私网地址),端口映射,用于把内部的某台服务器的端口映射出去访问,一般指提供web服务和FTP的服务器:

需求1:有一台机器上有两快网卡eth0和eth1,其中eth0的IP地址192.168.149.130/24,eth1的IP地址为192.168.100.1/24,现在有另一台机器A的192.168.100.2和eth1是互通的,那么如何才能让A机器上网了:

开始我们先做准备工作,准备两台虚拟机,B机器上有两块网卡,A机器上有一块网卡eth1,通过B机器和A机器的eth1网卡都添加到LAN(同一个交换机下):然后自己互相ping,网络是否可达:

A(1)机器:因为只有一块内网网卡,只能在虚拟机里操作:

a578d7033191b9a45c4fa3a8c40b424db96.jpg

B(2)机器:

[root@localhost ~]# ifconfig eth1 192.168.100.1/24[root@localhost ~]# ifconfig eth1eth1: flags=4099
mtu 1500 inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255 ether 00:0c:29:81:f4:55 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 11 bytes 1650 (1.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@localhost ~]# ping 192.168.100.2PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.64 bytes from 192.168.100.2: icmp_seq=1 ttl=64 time=1.91 ms64 bytes from 192.168.100.2: icmp_seq=2 ttl=64 time=0.258 ms64 bytes from 192.168.100.2: icmp_seq=3 ttl=64 time=0.275 ms^C--- 192.168.100.2 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2002msrtt min/avg/max/mdev = 0.258/0.817/1.918/0.778 ms

由上,A和B机器的内网是可达的:

如图里:ifconfig   eth1   192.168.100.1/24这是给网卡临时设置IP地址,但机器重启后配置消失:否则请写入配置文件:

首先开启路由转发功能:      #在B机器操作:

针对nat表做一个IP转发的操作,-o后面跟设备名,表示出口网卡,MASQUERADE表示伪装:    #在B机器操作:

给A机器设置网关,默认到B机器的内网可达:         #在A机器操作:

  A机器操作如下:

在B机器上操作:[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward     #开启路由转发[root@localhost ~]# cat !$cat /proc/sys/net/ipv4/ip_forward1[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE[root@localhost ~]# iptables -t nat -nvL          #查看NAT表:Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 MASQUERADE  all  --  *      eth0    192.168.100.0/24     0.0.0.0/0

B机器操作:

[root@localhost ~]# route add default gw 192.168.100.1

最后在A机器测试:是:可以正常上网

577c232344a144adc7f5d5e76dd328a10ea.jpg

需求2:C机器(物理机)192.168.149.135只能和B机器通信,让C机器可以直接连接通A机器的sshd(56888)端口:

通过端口映射的方式把A机器的sshd端口映射出来,方便远程:

在B机器操作内容如下

1:首先在B机器上开启路由转发:   echo   “1”  >/proc/sys/net/ipv4/ip_forward

2:增加iptables规则

iptables -t nat -A PREROUTING  -d 192.168.149.130  -p tcp  --dport 1122 -j DNAT --to  192.168.100.1:56888

物理机C机器到B机器的包的规则,进来的包,

iptables -t nat -A POSTROUTING -s 192.168.100.1 -j SNAT --to 192.168.149.130

从A机器到B机器的包的规则,出去的包:

在B机器上操作:[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward     #开启路由转发[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.149.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.2:56888[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.2 -j SNAT --to 192.168.149.130[root@localhost ~]# iptables -t nat -nvLChain PREROUTING (policy ACCEPT 4 packets, 310 bytes) pkts bytes target   prot opt in     out   source     destination             1    60 DNAT     tcp  --  *      *    0.0.0.0/0   192.168.149.130      tcp dpt:1122 to:192.168.100.2:56888Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source        destination         Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source          destination         Chain POSTROUTING (policy ACCEPT 1 packets, 60 bytes) pkts bytes target     prot opt in     out     source           destination             1    76 SNAT       all  --  *      *       192.168.100.2    0.0.0.0/0            to:192.168.149.130

A机器操作:设置网关:

[root@localhost ~]# route add default gw 192.168.100.1

测试:重新打开一个putty,通过192.168.149.130:1122端口是否可以连接到A机器:

login as: rootroot@192.168.149.130's password:Last login: Thu Aug  9 14:27:10 2018[root@localhost ~]# w 15:01:32 up 34 min,  2 users,  load average: 0.00, 0.01, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     tty1                      14:27   28.00s  0.15s  0.15s -bashroot     pts/0    192.168.149.135  15:01    1.00s  0.01s  0.00s w###测试后可以正常连接:

2、Centos关于icmp禁止ping命令:  本机可以ping通远端主机,远端主机ping不通本机:

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP

可以实现:

图例

14ebc35d9a8981292347a9e030d6b13f2a5.jpg

转载于:https://my.oschina.net/yuanhaohao/blog/1925175

你可能感兴趣的文章
ViewHolder另一种完法
查看>>
MyISAM InnoDB 区别
查看>>
NFC标签的一些事
查看>>
java虚拟机学习(二)java对象的创建及访问定位
查看>>
字符串的排列组合问题--
查看>>
关于Java ThreadLocal
查看>>
使用iscroll
查看>>
MY域名,什么是MY域名?
查看>>
第二十天:expand
查看>>
coreData
查看>>
使用Matrix对象旋转和缩放图像
查看>>
JS 固定图片背景
查看>>
PreparedStatement
查看>>
错误: ‘EOF’在此作用域中尚未声明
查看>>
ajax跨域提交
查看>>
try_catch_finally的注意事项
查看>>
黄健:开放沟通,一”触“即发
查看>>
陆怡-互联网金融系统中的资金正确性保障
查看>>
Android Studio Gradle编译项目报错弹出一个提示框没有具体的错误信息
查看>>
数独游戏
查看>>