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.问题描述
- 服务器node服务已经npm install 安装好,并使用pm2 正常启动
- 阿里云已经配置安全组规则,已添加3005的node端口服务
- 阿里云已经配置对应的域名,但是通过 http://域名:3005 或者 http://ip:3005 访问失败,无响应。
2.问题排查
- 先登录服务器,输入pm2 list 和 pm2 log,查看node服务是否正常启动
- 再输入,
lsof -i:3005
查看3005端口是否存在 - 再输入
curl 127.0.0.1:3005
查看本地node服务是否能正常响应 - 通过
nmap 127.0.0.1
查看3005 是否有效在注册端口里。是否是open状态。 - 如果使用的nginx ,tail -f logs/access.log 查看日志信息,是否请求时候有输出日志。
- 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
使用路由跟踪 查看完整的路由与中转服务器信息
- route 命令(系统自带)
- traceroute命令(另外安装) yum install tractroute
参考
time.geekbang.org/course/intr…