欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

linux 学习6-网络/防火墙/DNS iptables firewalld 常见问题

最编程 2024-01-02 21:00:13
...

1.网络常用⼯具与命令

# net-tools
ifconfig
route
netstat
# iproute2
ip
ss
## ⽹络状态查看命令
### ifconfig
eth0 # 第⼀块⽹卡(⽹络接⼝)
eno1 # 板载⽹卡 你的第⼀个⽹络接⼝可能是eno1
ens33 # PCI-E⽹卡
enp0s3 # ⽆法获取物理信息的 PCI-E ⽹卡
CentOS 7 # 使⽤了⼀致性⽹络设备命名,以上都不匹配则使⽤ eth0

## ⽹络接⼝命名修改为默认 eth0命名
⽹卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
编辑 /etc/default/grub ⽂件, 增加 biosdevname=0 net.ifnames=0  # 把 net.ifnames=1 改成 net.ifnames=0
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet biosdevname=0 net.ifnames=0"
# 更新 grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot # 重启

### 
biosdevname net.ifnames ⽹卡名
默认 0 1 ens33
组合1 1 0 em1
组合2 0 0 eth0

# 查看⽹卡物理连接情况
mii-tool eth0
## 查看⽹关命令
route -n
使⽤ -n 参数不解析主机名
## ⽹络配置命令
ifconfig <接⼝> <IP地址> [netmask ⼦⽹掩码 ]
ifup <接⼝>
ifdown <接⼝>

### 添加⽹关
route add default gw <⽹关ip> # 注意这是个危险动作,不建议云服务器操作
route add -host <指定ip> gw <⽹关ip>
route add -net <指定⽹段> netmask <⼦⽹掩码> gw <⽹关ip>


## ⽹络命令集合:ip 命令 
ip addr ls
ifconfig
ip link set dev eth0 up
ifup eth0
ip addr add 10.0.0.1/24 dev eth1
ifconfig eth1 10.0.0.1 netmask 255.255.255.0
ip route add 10.0.0/24 via 192.168.0.1
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1

2.⽹络故障排除命令


# nslookup 
# 先安装工具包
yum -y install bind-utils
nslookup  www.baidu.com

# ping 
ping www.baidu.com
# traceroute 

# mtr
yum -y install mtr

# telnet
yum -y install telnet
telnet www.baidu.com 80

# tcpdump
tcpdump -i any -n port 80
tcpdump -i any -n host 127.0.0.1
tcpdump -i any -n host 127.0.0.1 and port 80

# netstat
netstat -ntpl

-n或--numeric 直接使用IP地址,而不通过域名服务器
-t或--tcp 显示TCP传输协议的连线状况
-p或--programs 显示正在使用Socket的程序识别码和程序名称
-l或--listening 显示监控中的服务器的Socket

# ss  socket 统计信息
ss -ntpl


3.⽹络服务管理命令

⽹络服务管理程序分为两种,分别为SysV和systemd

# SysV
service network start|stop|restart
chkconfig --list network
# systemd
systemctl list-unit-files NetworkManager.service
systemctl start|stop|restart NetworkManger
systemctl enable|disable NetworkManger


## 例子: 修改⽹络配置⽂件
cd /etc/sysconfig/network-scripts
ls ifcfg-*
vim ifcfg-eth0
# 修改对应 IPADDR 和  GATEWAY 网关
BOOTPROTO=none
DEFROUTE=yes
DEVICE=eth0
GATEWAY=192.168.0.1
HWADDR=fa:16:3e:a7:16:6b
IPADDR=192.168.0.74
MTU=1500
NETMASK=255.255.255.0
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
# 重启服务
systemctl  restart NetworkManger
# 检查  
route -n


## ⽹络其他命令
# hostname
hostname  # 读取当前主机名
hostname myname # 直接设置新的名字

# hostnamectl
hostnamectl set-hostname centos7.test

# 注意修改/etc/hosts⽂件 也可以实现
vi /etc/hosts

4.防火墙

防火墙分类

  • 软件防火墙和硬件防火墙
  • 包过滤防火墙和应用层防火墙
  • CentOS 6 默认的防火墙是 iptables
  • CentOS 7 默认的防火墙是 firewallD(底层使用 netfilter)

iptables

## iptables 的表和链
# 规则表 
优先级:
 raw —> mangle -> nat —> filter​
# 规则链
- INPUT # 处理客户端访问服务器
- OUTPUT  # 处理服务器返回数据给客户端
- FORWARD  # 重定向
- PREROUTING 路由前
- POSTROUTING 路由后
# 场景
- 到本机某进程的报文:PREROUTING --> INPUT
- 由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
- 由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING


# 动作
ACCEPT 允许通过
REJECT 拒绝,并返回拒绝信息
DROP 直接丢弃数据包,不给任何回应信息
DNAT  目标地址转换
SNAT 源地址转换,解决内网用户用同一个公网地址上网的问题
REDIRECT 本机端口映射
LOG  写入日志 /var/log/messages
## filter 表

iptables -t filter # 命令 规则链 规则命令
iptables -t filter -L   # 查询
iptables -t filter -nL   # 查询 显示具体ip
iptables -t filter -vnL   # 查询 输入 输出 具体ip
iptables -vnL   # 简写 默认读取的就是 filter
iptables -t filter -A INPUT -s 10.0.0.1 -j ACCEPT   # 追加到末尾    
iptables -t filter -A INPUT -s 10.0.0.0/24 -j ACCEPT   # 按范围添加    
iptables -t filter -A INPUT -i eth0 -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT # xxx


iptables -t filter -D INPUT -s 10.0.0.1 -j DROP   # 移除规则 指定
iptables -t filter -D INPUT 1 # 从顶部删除一条
iptables -t filter -I INPUT -s 10.0.0.1 -j DROP   # 插入至顶部 
iptables -P  INPUT DROP #  谨慎使用  设置全局的默认输入policy策略为 DROP,如果下面有没ACCEPT 最导致全部中断
iptables -F # 清空所有配置

# 常用的配置  只让10.0.0.2 生效 其他都关闭
iptables -t filter -A INPUT -i eth0 -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT # 先插入一条有效的
iptables -t filter -A INPUT -j DROP   # 再限制其他都不能访问

-A -I  # 写入  
-D -F -P 
-N -X -E


-p 
-s -d
-i -o
-j
## iptables 的 nat 表
iptables -t nat 命令 规则链 规则


iptables -t nat -vnL   # 查询nat表 输入 输出 

PREROUTING 目的地址转换
POSTROUTING 源地址转换
## iptables 的配置文件
/etc/sysconfig/iptables
CentOS6 
service iptables save | start | stop | restart 
CentOS7
yum install iptables-services

firewall



## firewallD 服务
1. firewallD 的特点:底层还是iptables ,只是做了封装
2. 支持区域"zone"概念

firewall-cmd
systemctl start | stop | enable | disable firewalld.service


# 先关闭 iptables centos 6 
service iptables stop

# firewall 命令
systemctl restart firewalld.service # 重启firewallD
firewall-cmd --state #  查看状态
firewall-cmd --list-all #  查看所有 状态
firewall-cmd --zone=public --list-interfaces
firewall-cmd --list-interfaces
firewall-cmd --list-ports
firewall-cmd --list-service
firewall-cmd --get-zones
firewall-cmd --get-default-zone
firewall-cmd --get-active-zone

firewall-cmd --add-service=https # 添加https服务
firewall-cmd --add-port=81/tcp
firewall-cmd --list-service=https
firewall-cmd --list-all

firewall-cmd --add-port=81/tcp --permanent
firewall-cmd --list-all
firewall-cmd --remove-source=10.0.0.1

5.BIND 域名解析

DNS 服务介绍

  • DNS(Domain Name System)域名系统
  • FQDN(Full Qualified Domain Name)完全限定域名
  • 域分类:根域、*域(TLD)(通过.定义)
  • 查询方式:递归、迭代
  • 解析方式:正向解析、反向解析
  • DNS 服务器的类型:缓存域名服务器、主域名服务器、从域名服务器
## 安装 BIND
/etc/hosts  # 早期 域名解析使用:邮件定期整理推送 手动更新方式维护
yum install bind bind-utils
systemctl start named.service
## BIND 配置文件
vi /etc/named.conf #主配置文件
## 
listen-on port 53 { any; }; #默认为 127.0.0.1 可以改为 any 支持所有
allow-query { any; }; #默认为 127.0.0.1 可以改为 any支持所有

# 配置 *域名
zone "." IN {
        type hint;
        file "named.ca";
};


# 查看 系统 amed.ca 证书
vi /var/named/named.ca
# 定义了13台处理解析 
;; ANSWER SECTION:
.                       518400  IN      NS      a.root-servers.net.
.                       518400  IN      NS      b.root-servers.net.
.                       518400  IN      NS      c.root-servers.net.
.                       518400  IN      NS      d.root-servers.net.
.                       518400  IN      NS      e.root-servers.net.
.                       518400  IN      NS      f.root-servers.net.
.                       518400  IN      NS      g.root-servers.net.
.                       518400  IN      NS      h.root-servers.net.
.                       518400  IN      NS      i.root-servers.net.
.                       518400  IN      NS      j.root-servers.net.
.                       518400  IN      NS      k.root-servers.net.
.                       518400  IN      NS      l.root-servers.net.
.                       518400  IN      NS      m.root-servers.net.
# 对应不同ip A是ipv4 AAAA是ipv6
a.root-servers.net.     518400  IN      A       198.41.0.4
b.root-servers.net.     518400  IN      A       199.9.14.201
c.root-servers.net.     518400  IN      A       192.33.4.12
d.root-servers.net.     518400  IN      A       199.7.91.13
e.root-servers.net.     518400  IN      A       192.203.230.10
f.root-servers.net.     518400  IN      A       192.5.5.241
g.root-servers.net.     518400  IN      A       192.112.36.4
h.root-servers.net.     518400  IN      A       198.97.190.53
i.root-servers.net.     518400  IN      A       192.36.148.17
j.root-servers.net.     518400  IN      A       192.58.128.30
k.root-servers.net.     518400  IN      A       193.0.14.129
l.root-servers.net.     518400  IN      A       199.7.83.42
m.root-servers.net.     518400  IN      A       202.12.27.33
a.root-servers.net.     518400  IN      AAAA    2001:503:ba3e::2:30
b.root-servers.net.     518400  IN      AAAA    2001:500:200::b
c.root-servers.net.     518400  IN      AAAA    2001:500:2::c
d.root-servers.net.     518400  IN      AAAA    2001:500:2d::d
e.root-servers.net.     518400  IN      AAAA    2001:500:a8::e
f.root-servers.net.     518400  IN      AAAA    2001:500:2f::f
g.root-servers.net.     518400  IN      AAAA    2001:500:12::d0d
h.root-servers.net.     518400  IN      AAAA    2001:500:1::53
i.root-servers.net.     518400  IN      AAAA    2001:7fe::53
j.root-servers.net.     518400  IN      AAAA    2001:503:c27::2:30
k.root-servers.net.     518400  IN      AAAA    2001:7fd::1
l.root-servers.net.     518400  IN      AAAA    2001:500:9f::42
m.root-servers.net.     518400  IN      AAAA    2001:dc3::35


配置自己域名

vi /etc/named.conf #主配置文件
# 底部 添加配置根域名
zone "test.com" IN {
 type master;
 file "test.com.zone";
 allow-transfer { 10.211.55.3; };
};


# 自定义 test.com 复制一份原来的ca
cp -p named.empty  test.com.zone

# 配置 test.com.zone
vi test.com.zone
$TTL 1D
@ IN SOA @ ns1.test.com. (
 0 ; serial
 1D ; refresh
 1H ; retry
 1W ; expire
 3H ) ; minimum
@ IN NS ns1
ns1 IN A 10.211.55.3
www IN A 10.20.0.100
mail IN CNAME mailexchange
mailexchange IN A 10.20.0.200

# 重启
systemctl restart named
# 检查语法
named-checkconf
# 重新加载
rndc reload 
# 测试命令
# nslookup
server 10.211.55.3 # 测试连接
mail.test.com # 测试mail 
mailexchange.test.com # 测试mailexchange 
set type=ns # 设置类型ns
set type=a # 设置类型a
nsl.test.com #测试 nsl.test.com
# dig
dig www.test.com

从域名服务器 BIND 配置文件

zone "test.com" IN {
 type slave;
 file "slaves/test.com.zone";
 masters { 10.211.55.3; };
};

反向解析配置文件

zone "0.20.10.in-addr.arpa" IN {
 type master;
 file "10.20.0.zone";
};
100 IN PTR www.test.com

常见问题

1.启动的服务无法外部访问

防火墙设置了限制端口,添加开放端口

firewall-cmd --zone=public --add-port=443/tcp --permanent # 443是新增端口
firewall-cmd --reload

firewall-cmd --state #显示状态
firewall-cmd --list-ports #查看已配置端口

2.node新增端口访问无效,centOS防火墙检查 安全

1.问题描述

  1. 服务器node服务已经npm install 安装好,并使用pm2 正常启动
  2. 阿里云已经配置安全组规则,已添加3005的node端口服务
  3. 阿里云已经配置对应的域名,但是通过 http://域名:3005 或者 http://ip:3005 访问失败,无响应。

2.问题排查

  1. 先登录服务器,输入pm2 list 和 pm2 log,查看node服务是否正常启动
  2. 再输入,lsof -i:3005 查看3005端口是否存在
  3. 再输入 curl 127.0.0.1:3005 查看本地node服务是否能正常响应
  4. 通过 nmap 127.0.0.1 查看3005 是否有效在注册端口里。是否是open状态。
  5. 如果使用的nginx ,tail -f logs/access.log 查看日志信息,是否请求时候有输出日志。
  6. firewall-cmd --state #查看linux防火墙是否打开,firewall-cmd --list-ports 查看已配置端口

最终发现是打开了 iptables 防火墙

# 查看启动状态 
systemctl status iptables

方法1 加入白名单

iptables -I INPUT -p tcp --dport 3005 -j ACCEPT

方法2 直接关闭

systemctl stop iptables.service

终极大招

#重启服务器,有些端口可能会互相占用,需要重新启动服务器解决
reboot

扩展

常用的防火墙还有 firewalld

# 查看网络设备  网卡 信息
ifconfig

使用路由跟踪 查看完整的路由与中转服务器信息

  1. route 命令(系统自带)
  2. traceroute命令(另外安装) yum install tractroute

参考

time.geekbang.org/course/intr…