Linux基础12-iptables防火墙与openssh
iptables防火墙
nerfilter/iptables:工作在主机或网络的边缘,对于进出本主机或网络的报文根据实现定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出相应的处理。
iptables框架
iptables的4表
filter:数据过滤表
包含三个链:INPUT,OUTPUT,FORWARD
nat:地址转换表,不能过滤数据表,仅修改数据包中的IP和端口
包含三个链:PREROUTING,POSTROUTING,OUTPUT
raw:状态跟踪表,决定是否跟踪数据包
包含两个链:OUTPUT,PERROUTING
mangle:包标记表,不能过滤也不能修改数据包
包含五个链:PREROUTING,FORWARD,POSTROUTING,INPUT,OUTPUT
iptables的5链
PREROUTING链:路由前规则,防火墙在刚刚接收到数据包,对数据包进行路径选择之前所需要的链
FORWARD链:转发规则,将数据包从一个网络转发到另一个网络所需要的链
POSTROUTING链:路由后规则,对数据包进行路径选择后,并在防火墙即将把数据包转发出去之前所需要的链
INPUT链:入站规则,限制客户端数据包目的地址是防火墙主机的上层应用所需要的链
OUTPUT链:出站规则,限制防火墙主机上层应用产生的数据包是否可以出站需要的链
目标操作
ACCEPT:允许通过/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,有明确回应
LOG:记录日志,然后传给下一条规则
iptables命令格式
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
添加规则:
-A #追加一条防火墙规则至链的末尾
-I #插入一条防火墙规则至链的开头
查看规则:
-L #查看iptables所有规则
-n #以数字形式显示地址、端口等信息
--line-numbers #查看规则时,显示规则的行号
删除规则:
-D #删除链内指定的序号的一条规则
-F #清空所有规则
默认规则:
-P #为指定的链设置默认规则
iptables防火墙规则的条件
通用匹配
协议匹配:-p #协议名称
地址匹配:-s 源地址、-d 目标地址
接口匹配:-i 接受数据的网卡、-o 发送数据的网卡
端口匹配:--sport 源端口号、--dport 目标端口号
ICMP类别匹配:--icmp-type ICMP 类型
创建规则注意事项
1.可以不指定表,默认为filter表
2.如果没有找到匹配条件,执行防火墙默认规则
3.选项、链名、目标操作用大写字母,其余都小写
主机性防火墙规则配置
拒绝icmp访问:iptables -t filter -I INPUT -p icmp -j REJECT
查看规则:iptables -t filter -nL --line-numbers
清空序号为8的规则:iptables -t filter -D INPUT 8
清空所有规则(默认filter表):iptables -F
为filter表INPUT链添加规则至第二行,允许任何人使用ICMP协议访问本机:
iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
将filter表INPUT链默认规则修改为DROP:iptables -t filter -P INPUT DROP
拒绝所有80端口的访问:iptables -t filter -I INPUT -p tcp --dport 80 -j REJECT
拒绝客户端访问本机网卡的80端口:iptables -I INPUT -p tcp -i ens32 --dport 80 -j REJECT
设置防火墙拒绝某个网段:iptables -I INPUT -s 192.168.0.1/24 -j REJECT
网络型防火墙规则配置
通过路由转发配置网络型防火墙
开启路由转发功能:echo 'net.ipv4.ip_forward=1' >>/etc/sysctl.conf
加载配置立即生效:sysctl -p
查看路由转发:cat /proc/sys/net/ipv4/ip_forward
拒绝192.168.1.30访问80端口:iptables -I FORWARD -s 192.168.1.30 -p tcp --dport 80 -j REJECT
防火墙扩展:
命令格式:iptables 选项 链名 -m 扩展模块 --具体扩展条件 -j 动作
通过MAC地址限制对方访问:
iptables -t filter -I FORWARD -p tcp --dport 80 -m mac --mac-source 00:0C:29:D5:29:0F -j REJECT
基于多端口设置过滤规则:#multiport:多端口模块
iptables -t filter -I FORWARD -p tcp -m multiport --dports 20,21,80,443 -j ACCEPT
根据IP范围设置封锁规则:
iptables -t filter -I FORWARD -p tcp --dport 80 -m iprange --src-range 192.168.1.20-192.168.1.30 -j REJECT
iprange模块:ip范围模块
--src-range:源IP
--dst-range:目标IP
配置SNAT实现共享上网
通过防火墙规则,允许局域网中的主机访问外网
实现192.168.1.28转换为192.168.0.26
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -p tcp --dport -j SNAT --to-source 192.168.0.26
POSTROUTING:路由后链
-s:指定源地址为192.168.1.0的网段
-p:通过tcp协议
--dport:访问目标的80端口
-j:SNAT转换
--to-source:转换源地址为192.168.0.26
所有的iptables规则都是临时规则,若永久保留需执行以下命令
service iptables save
sudo用户提权
配置文件:/etc/sudoers
命令格式:sudo 特权命令
#为sudo机制启用日志记录,以便跟踪sudo执行操作
[root@master ~]# visudo
.. ..
Defaults logfile="/var/log/sudo.log" #手动添加
.. ..
Openssh开源免费提供ssh远程安全登录的程序
协议端口:22/tcp
服务名:sshd
ssh提供密钥认证登录
生成公私钥命令:ssh-keygen
查看密钥文件:ls .ssh
id_rsa#密钥 id_rsa.pub#公钥
将公钥拷贝至其他主机:ssh-copy-id -i .ssh/id_rsa.pub root@IP
其他主机查看公钥文件:ls .ssh
authorized_keys
scp远程复制工具:实现主机之间的文件拷贝
将本地文件拷贝至远程主机:scp 本机路径 root@远程主机ip:路径
将远程主机文件拉取至本地:scp root@远程主机IP:路径 本地路径
提高ssh服务安全性
配置文件:/etc/ssh/sshd_config
#Port 22 #ssh默认监听端口
#PermitRootLogin yes #是否允许root用户连接,yes允许,no不允许
#PermitEmptyPasswords no #不允许空密码登录
#PasswordAuthentication yes #允许用密码登录
#AllowUsers 用户1 用户2 用户3@192.168.0.0/24 #定义账号白名单
##DenyUsers 用户1 用户2 #定义账号黑名单
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律