Linux日常维护(filter的一个小案例,filter的nat表应用)

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介:

一个iptables的小案例。

写一个脚本,并执行它。

在编辑之前可以先看iptables的规则,和之后会有对比

[root@litongyao ~]# iptables -nvL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         


Chain FORWARD (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         


[root@litongyao ~]# vim /usr/local/sbin/iptables.sh

ipt="/usr/sbin/iptables"                            (定义一个全局变量)

$ipt -F                                        (计数器清零)

$ipt -P INPUT DROP                                 (把进来的数据包链DROP掉)

$ipt -P OUTPUT ACCEPT                                (本机的数据包可以出去)

$ipt -P FORWARD ACCEPT                                (目标不是本机地址的可以通行)

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (指定状态,RELATED和ESTABLISHED是要同时存在的,详细见下)

$ipt -A INPUT -s 192.168.52.0/24 -p tcp --dport 22 -j ACCEPT (指定只要源地址是这个网段的ip都可以远程连接ssh)

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT             (开放本机的80端口)HTTP服务

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT              (开放本机21端口)FTP服务


[root@litongyao ~]# sh /usr/local/sbin/iptables.sh      sh执行这个命令

再来看看iptables的规则:

[root@litongyao ~]# iptables -nvL        

Chain INPUT (policy DROP 0 packets, 0 bytes)

 pkts bytes target     prot opt in    out   source     destination         

   64  4472 ACCEPT     all  --  *   *   0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED

    0     0 ACCEPT     tcp  --  *   *  192.168.52.0/24   0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *   *    0.0.0.0/0        0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *   *   0.0.0.0/0        0.0.0.0/0            tcp dpt:21


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         


Chain OUTPUT (policy ACCEPT 37 packets, 3556 bytes)

 pkts bytes target     prot opt in     out     source               destination         

可以看到我们写的脚本都被加入了规则里,这里注意的是,没有运行service iptables save,就不会保存规则,重启即可恢复


实验:关于icmp的小案例   (在开始这个小案例之前,需要把上一条规则恢复默认,既重启服务)

[root@litongyao ~]# service iptables restart

下面执行一条命令:

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

我们ping外网,发现没有问题,可以ping通,用别的主机ping自己的时候,却发现ping不通了

1.png

2.png

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。



Iptables的四种状态:

NEW
NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接的第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。

ESTABLISHED
ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。

RELATED
RELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是 RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有关联的,如果没有在iptables的策略中配置RELATED状态,FTP-data的连接是无法正确建立的,还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。


INVALID
INVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西,因为防火墙认为这是不安全的东西





nat表的两个应用

  1. 1A机器有两个网卡。一个外网网卡。一个内网网卡。B机器有一个网卡,只有一个内网网卡。需求:B机器可以上网(路由器)

准备工作:

1.给litongyao虚拟机增加一块内网网卡,并设置为LAN区段,(如果没有LAN区段。则需要增加一个区段。)

2.给内网网卡设置一个IP和网段。

[root@litongyao ~]# ifconfig ens37 192.168.100.100/24    

(这种方法设置的ip是临时性的,重启后就会失效。可以复制ens33的配置文件改名为ens37,并修改里面的配置)

3.给xuniji的内网网卡设置一个ip。(因为没有外网网卡。所以不能远程登录连接)

[root@xuniji ~]# ifconfig ens33 192.168.100.50/24 

4.检查

用一台去Ping另外一台机器,如果Ping通,则准备工作完成


实验:

  1. 打开A机器端口转发,并更改防火墙设置

出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。

[root@litongyao ~]# cat /proc/sys/net/ipv4/ip_forward   (默认是0,则表示端口转功能关闭)

0

[root@litongyao ~]# echo "1" > /proc/sys/net/ipv4/ip_forward        (打开端口转发功能,将0修改成1)

[root@litongyao ~]# cat /proc/sys/net/ipv4/ip_forward

1


[root@litongyao ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE      

2.设置B机器的网关

[root@litongyao ~]# route -n                         (查看网关的命令)

[root@litongyao ~]# route add default gw 192.168.100.1        (增加一个192.168.100.1的网关)



2.C机器只能和A机器通信,让C机器可以连通B机器的22端口(端口映射)

工作:

  1. A机器上打开端口转发

[root@litongyao ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

2.A机器上更改防火墙配置 (最好恢复默认的配置,以免出现偏差)

[root@litongyao ~]# iptables -t nat -A PREROUTING -d 192.168.52.100 -p tcp --dport 1122 -j DNAT --to 192.168.100.50:22

[root@litongyao ~]# iptables -t nat -A POSTROUTING -s 192.168.100.50 -j SNAT --to 192.168.52.100

3.B机器上设置网关

实验:用xshell试着连接192.168.52.100:1122,看是否能映射到B机器的192.168.100.50











本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2046196,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
8天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
26 5
|
23天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
69 2
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
457 2
|
2月前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
82 1
|
2月前
|
监控 Linux Shell
30 个实用的 Linux 命令贴与技巧,提升你的效率(附实战案例)
本文介绍了30个实用的Linux命令及其应用场景,帮助你提升命令行操作效率。涵盖返回目录、重新执行命令、查看磁盘使用情况、查找文件、进程管理、网络状态监控、定时任务设置等功能,适合各水平的Linux用户学习和参考。
|
1月前
|
存储 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统网站服务器,该服务器上部署了几十个网站,使用一块SATA硬盘。 服务器故障&原因: 服务器在工作过程中突然宕机。管理员尝试重新启动服务器失败,于是将服务器上的硬盘拆下检测,发现很多坏扇区。联系当地的一家数据恢复公司处理,但是没有成功。
|
2月前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
2月前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
36 0
|
3月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用