Ubuntu系统iptables安全防护整改计划
端口开放
默认防火墙是开放所有端口的,如果拿来做应用服务器,就很危险,所以要把防火墙用起来,只将需要的端口开放,ubuntu用的是iptables防火墙。
iptables处理流程
iptables
由多个 table
组成,每个 table
分多个 chain
,每个 chain
分多个 rule
。 网络packet
按内置的顺序通过 table
和 chain
。 table
有4个, filter nat mangle raw
,默认是 filter
, filter
有 INPUT FORWARD OUTPUT
三个 chain
。可以自定义 chain
,但是这里不讲。看下图理解 网络packet
通过它们的顺序:
table
的顺序其实并不十分重要,特定的功能只能在特定的 table
中完成, chain
通常只关心 INPUT
是进入流量, output
是外出流量即可。 chain
内 rule
的顺序是用户自己控制的。 rule
由两部分组成 match
和 target
, match
指定了匹配条件,例如: -p tcp --dport 6379 -m connlimit --connlimit-above 5
。 target
指定了 packet
匹配时的操作,常用的有 ACCEPT REJECT DROP LOG
等,有的 target
会终止 chain
匹配后面的 rule
,有的则不会。例如目标是 ACCEPT
会终止 , LOG
则不会。
- 对于请求,传入Filter,首先区分是INPUT(从外部主机访问本机)、还是OUTPUT(反之)、FORWARD
- 查看相应的Chain规则,从上到下开始匹配,访问的端口的状态
- ACCEPT则放行,并退出Chain,DROP则禁止改请求访问
- 若访问的规则不在chain的端口规则中,则进行默认的规则处理
iptables 命令
- 在设置默认的规则处理之前,先把22号端口SSH打开,防止禁止后断开服务器链接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 设置默认的端口处理规则,这里将不在Chain规则中的端口禁止其请求。也即打开防火墙
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
- 放行所有端口访问,关闭防火墙
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
- 查看iptables,列出所有的规则。
sudo iptables -L -v -n --line-number
-v
输出详细信息-n
用IP和端口而不是主机名和服务名--line-number
列出了rule
对应的编号,用于插入、修改、删除rule
。
Chain INPUT (policy DROP 4 packets, 941 bytes)
num pkts bytes target prot opt in out source destination
1 2042 109K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6379
5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5000
- 清空iptables,重置规则
sudo iptables -F
- 保存和恢复iptables
sudo iptables-save > iptables.cfg 保存
sudo iptables-restore < iptables.cfg 恢复
- 增删改iptables规则
-A
在chain
的尾部添加rule
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
-I
在首部或者指定位置前添加rule
iptables -I INPUT -p tcp --dport 6378 -j DROP
在链首插入
-R
替换指定的 `rule```
iptables -R INPUT 3 -p tcp --dport 22 -j DROP
发现1中 222端口
写错了,要改成 22端口
。 3
是 rule
的num
-D
删除rule
sudo iptables -D INPUT -p tcp --dport 22 -j DROP
sudo iptables -D INPUT 3
删除第三(num
)条规则,对应的num
在sudo iptables -L -v -n --line-number
中查看
相应端口对应功能
端口号 | 功能 |
---|---|
22 | SSH |
3306 | Mysql |
6379 | Redis |
5000 | Flask |
- 查看详细指令规则
sudo man iptables
PING命令无法通行问题
ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。
因此iptables需要对icmp
规则进行设置,允许相应的ICMP数据包通行,则可以ping通相应的主机
- 允许本机ping其他机器的设置(需要root权限)
sudo su # 切换root权限
sudo iptables -A INPUT -p icmp --icmp 0 -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp 0 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp 8 -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp 8 -j ACCEPT
0:回显应答,表示回显自己对别人的请求 8:回显请求,表示回显别人对自己的请求
本机ping外机时,通过output icmp 0,会回显自己对别人的请求 , 当处理完毕后,外机将数据返回, 通过 input icmp 8回显返回的数据
- ping 域名
ping www.baidu.com 的流程是,首先主机发出 icmp 请求,,对于www.baidu.com 进行DNS转换,将域名转换成IP地址
DNS协议运行在UDP协议之上,使用端口号53,因此在此之前iptables还需要先对53号端口放行
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
保存iptables设置及重启自动恢复
iptables设定的规则,掉电重启会清空。若需要保存,最好是使用iptables-save/restore配合重定向,示例如下( 需要切换到root ):
iptables-save > /etc/network/iptables-config
iptables-restore < /etc/network/iptables-config
最后编辑/etc/network/interfaces文件,在最后插入
pre-up iptables-restore < /etc/network/iptables-config
重启计算机以后,会自动重启恢复防火墙规则
参考资料:
Ubuntu系统iptables安全防护整改计划的更多相关文章
- Ubuntu系统iptables规则的查看和清除
系统不支持service iptables restart,service iptables status,如何查看与清除iptable的规则呢? 一 iptables查看基本语法 iptables ...
- 感悟:搞了整整一天,拯救一个Ubuntu系统
最开始,我在windows平台上,准备打开计算机组成原理的实验工程,突然来了一个想法:每次要用windows的时候,都要切换系统(win8以上的系统必须在关闭快速开机的状态下才能正常在Linux平台下 ...
- windows10开启内置ubuntu系统,使用xshell连接
windows安装配置ubuntu系统内置子系统 官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/about https://www.jianshu ...
- Linux(Ubuntu)系统下使用crontab定期执行任务
安装cron(Ubuntu系统自带) apt-get install cron 开启crontab日志 默认情况下的日志是没有开启的,我们需要找到 /etc/rsyslog.d/50-default. ...
- 解决Ubuntu系统下 mysql 远程连接失败的问题 ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xx.xx' (110)
如果远程连不上mysql.cnf 里面也修改了:bind注销掉了127.0.0.1 等所有的 但是telnet xxx.xxx.xx.xx 3306 端口 不通:那么 就是防火墙的问题了 1.修改Ub ...
- Ubuntu系统---安装“搜狗拼音法”导致桌面打不开
Ubuntu系统---安装“搜狗拼音法”导致桌面打不开 ubuntu系统中文版,安装完后,自带中文输入法.中文用着好好的,用一段时间后,就会莫名的出现,切换不过来,中文输入不好用了.只是简单想装一个搜 ...
- ubuntu系统下如何修改host
Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...
- 如何查看当前Ubuntu系统的版本
如何查看当前Ubuntu系统的版本 说来也惭愧,用Ubuntu差不多快1个月了,双系统是让朋友安的,只知道自己使用的是什么12版本的,具体怎么看还不知道,下面写一下查看当前Linux系统的版本的方法 ...
- ubuntu系统虚拟机下共享文件夹
一般情况 1.安装: sudo apt-get install open-vm-dkms 2.挂载: sudo mount -t vmhgfs .host:/ /mnt/hgfs 用以上命令安 ...
随机推荐
- 迷惑小错 之 :requests.exceptions.ProxyError
缘由 当打开代理或者抓包工具时 pycharm运行发包请求报错: requests.exceptions.ProxyError.关掉代理后又能正常的请求,这样对于我们日常操作很不方便吗.四处查找资料无 ...
- 【2021 ICPC Asia Jinan 区域赛】 C Optimal Strategy推公式-组合数-逆元快速幂
题目链接 题目详情 (pintia.cn) 题目 题意 有n个物品在他们面前,编号从1自n.两人轮流移走物品.在移动中,玩家选择未被拿走的物品并将其拿走.当所有物品被拿走时,游戏就结束了.任何一个玩家 ...
- gin框架使用【6.JSON渲染】
package main import ( "github.com/gin-gonic/gin" ) type User struct { Id int `json:"i ...
- ArcGIS使用技巧(五)——批量裁剪
新手,若有错误还请指正! 最近用到了,所以记下来,用同一矢量范围裁剪多幅栅格数据.用到了ArcGIS中的迭代模型(图1): 图 1 首先,需要做一个准备工作,就是把需要裁剪的栅格数据放在同一数据库中( ...
- Protobuf在Python中的应用(序列化数据)
1.了解Protobuf Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单.您可以定义数据的结构化,然后可 ...
- Swift字符串操作-持续更新-2022
Swift字符串追加 var str = "OC" str.append(" Swfit") print(str) // 输出结果: OC Swift 输出结果 ...
- NFS学习笔记
一.NFS原理 ## 本次实验以CentOS7.7为例 [root@qll251 ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 ( ...
- CSS展开收起
有一个问题是,在上述例子中,把段落内容的"浮动元素"去掉后,段落最后从"行"字开始换行了,"收起"却不换行,也就是会存在有两个字内容看不见情 ...
- 从防御者视角来看APT攻击
前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控.检测和缓解技术,并分别进行梳理,介绍分析代表性技术.这一篇分析现有的监控技术 ...
- 大陆出境海缆TPE APCN NCP APG简介
目前我国的登陆站主要设立在三个城市 山东 山东青岛登陆站(隶属中国联通) EAC-C2C TPE(美国方向) 上海 上海崇明登陆站(隶属中国电信) APCN2(亚太) NCP(长线--美国,新建,亚太 ...