filter:数据过滤表
包含三个链:INPUT,UOTPUT,FORWARD
nat:地址转换表,不能过滤数据包,仅仅修改数据包中的IP和端口
包含三个链:PREROUTING,POSTROUTING,OUTPUT
raw:状态跟踪表,决定是否跟踪数据包
包含两个链:OUTPUT,PREROUTING
mangle:包标记表,不能过滤也不能修改数据包
包含五个链:PREROUTING,FORWARD,POSTROUTING,INPUT,OUTPUT
PREROUTING链:路由前规则,防火墙在刚刚接收到数据包,对数据包进行路径选择之前所需要的链
FORWARD链:转发规则,将数据包从一个网络转发到另外一个网络所需要的链
POSTROUTING链:路由后规则,对数据包进行路径选择后,并在防火墙即将把数据包转发出去之前,所要需要的链
INPUT链:入站规则,限制客户端数据包目地地址是防火墙主机的上层应用所需要的链
OUTPUT链:出站规则,限制防火墙主机上层应用产生的数据包是否可以出站需要的链
ACCEPT:允许通过/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过
LOG:记录日志,然后传给下一条规则
命令格式:Iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
添加规则:
-A #追加一条防火墙规则至链的末尾
-I #插入一条防火墙规则至链的开头
查看规则:
-L #查看iptables所有规则
-n #以数字形式显示地址、端口等信息
--line-numbers #查看规则时,显示规则的行号
删除规则:
-D #删除链内指定的序号(或内容)的一条规则
-F #清空所有规则
默认规则:
-P #为指定的链设置默认规则
通用匹配:
协议匹配:-p #协议名称
地址匹配:-s 源地址、-d 目标地址
接口匹配:-i 接受数据的网卡、-o 发送数据的网卡
端口匹配:--sport 源端口号、--dport 目标端口号
ICMP类别匹配:--icmp-type ICMP 类型
创建规则注意事项
可以不指定表,默认为filter表
如果没有找到匹配条件,执行防火墙默认规则
选项/链名/目标操作用大写字母,其余都小写
#安装iptables服务 [root@master ~]# yum -y install iptables-services [root@master ~]# systemctl start iptables #拒绝icmp访问 [root@master ~]# iptables -t filter -I INPUT -p icmp -j REJECT #查看规则 [root@master ~]# iptables -L -n --line-numbers #测试icmp访问 [root@slave ~]# ping 192.168.0.10 PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data. From 192.168.0.10 icmp_seq=1 Destination Port Unreachable [root@master ~]# iptables -t filter -I INPUT -p icmp -j DROP [root@master ~]# iptables -t filter -I INPUT -p icmp -j ACCEPT #清空某一条规则(默认为filter表) [root@iptables ~]# iptables -t filter -D INPUT 8 #清空所有规则(默认为filter表所有规则) [root@master ~]# iptables -F #清空其他表所有规则 [root@master ~]# iptables -t nat -F [root@master ~]# iptables -t raw -F [root@master ~]# iptables -t mangle -F #为filter表INPUT链添加规则,允许任何人使用TCP协议访问本机 [root@master ~]# iptables -t filter -I INPUT -p tcp -j ACCEPT #为filter表INPUT链添加规则至第一行,允许任何人使用UDP协议访问本机 [root@master ~]# iptables -t filter -I INPUT -p udp -j ACCEPT #为filter表INPUT链添加规则至第二行,允许任何人使用ICMP协议访问本机 [root@master ~]# iptables -t filter -I INPUT 2 -p icmp -j ACCEPT [root@master ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 #查看INPUT链规则 [root@master ~]# iptables -nL INPUT Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 #清空filter表所有规则 [root@master ~]# iptables -F
#查看filter表 [root@master ~]# iptables -t filter -nL Chain INPUT (policy ACCEPT) //默认规则 target prot opt source destination Chain FORWARD (policy ACCEPT) //默认规则 target prot opt source destination Chain OUTPUT (policy ACCEPT) //默认规则 target prot opt source destination #允许22号端口被访问 [root@master ~]# iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT [root@master ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 #将filter表INPUT链默认规则修改为DROP [root@master ~]# iptables -t filter -P INPUT DROP [root@master ~]# iptables -nL Chain INPUT (policy DROP) #默认为拒绝 target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 #只允许22端口访问,其他全部拒绝
#将默认规则修改为ACCEPT [root@master ~]# iptables -t filter -P INPUT ACCEPT #清空防火墙规则 [root@master ~]# iptables -F #设置防火墙拒绝所有80端口的访问 [root@master ~]# iptables -t filter -I INPUT -p tcp --dport 80 -j REJECT #查看规则 [root@master ~]# iptables -nL #安装httpd服务 [root@master ~]# yum -y install httpd #启动服务 [root@master ~]# systemctl start httpd #修改默认首页 [root@master ~]# echo xxoo > /var/www/index.html #访问测试 [root@slave ~]# curl http://192.168.0.10 [root@master ~]# iptables -F #单独拒绝某个IP [root@master ~]# iptables -t filter -I INPUT -s 192.168.0.20 -j REJECT #查看规则 [root@master ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination REJECT all -- 192.168.0.20 0.0.0.0/0 reject-with icmp-port-unreachable 192.168.0.20访问测试 [root@slave ~]# curl http://192.168.0.10 curl: (7) Failed connect to 192.168.0.10:80; 拒绝连接 #拒绝客户端访问本机网卡的80端口 [root@master ~]# iptables -t filter -I INPUT -i ens32 -p tcp --dport 80 -j REJECT #客户端测试 [root@agent ~]# curl http://192.168.0.10 curl: (7) Failed connect to 192.168.0.10:80; 拒绝连接 [root@master ~]# iptables -F #设置防火墙拒绝某个网段 [root@master ~]# iptables -t filter -I INPUT -s 192.168.1.0/24 -j REJECT #查看规则 [root@master ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination REJECT all -- 192.168.1.0/24 0.0.0.0/0
主机名 | 网卡、IP地址、网关设置 |
---|---|
client28 | ens32:192.168.1.24,网关指向防火墙外网IP:192.168.1.100 |
proxy | ens32内网IP:192.168.0.26,ens34外网IP:192.168.1.100 |
web27 | ens32:192.168.0.27,网关指向防火墙内网IP:192.168.0.26 |
#开启路由转发功能 [root@proxy ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf [root@proxy ~]# sysctl -p //加载配置立即生效 net.ipv4.ip_forward = 1 #查看路由转发 [root@proxy ~]# cat /proc/sys/net/ipv4/ip_forward 1
#安装httpd服务 [root@web1 ~]# yum -y install httpd #修改默认首页 [root@web1 ~]# echo web27 > /var/www/html/index.html [root@web1 ~]# systemctl start httpd [root@web1 ~]# systemctl status httpd
第三台为客户端:client将IP修改为192.168.1.30网段,将网关指向防火墙主机的第二块网卡:192.168.0.100
访问测试:curl http://192.168.0.20
防火墙主机配置规则:拒绝192.168.1.30访问80端口
[root@proxy ~]# iptables -I FORWARD -s 192.168.1.30 -p tcp --dport 80 -j DROP #客户端192.168.1.30访问测试: curl http://192.168.0.20 #拒绝所有客户端地址访问内网80端口 [root@iptables ~]# iptables -t filter -I FORWARD -p tcp --dport 80 -j REJECT [root@proxy ~]# iptables -F
#根据MAC地址封锁主机,安装nmap扫描获取地方IP的MAC地址 [root@proxy ~]# yum -y install nmap #扫描对方主机IP [root@proxy ~]# nmap -s 192.168.1.28 Starting Nmap 6.40 ( http://nmap.org ) at 2020-09-25 17:12 CST Nmap scan report for 192.168.0.111 Host is up (0.00044s latency). //当前主机状态 MAC Address: 00:0C:29:CA:87:81 (VMware) //MAC地址 Nmap done: 1 IP address (1 host up) scanned in 4.05 seconds #通过MAC地址限制对方访问 [root@proxy ~]# iptables -t filter -I FORWARD -p tcp --dport 80 -m mac --mac-source 00:0C:29:D5:29:0F -j REJECT
[root@proxy ~]# iptables -t filter -I FORWARD -p tcp -m multiport --dports 20,21,80,443 -j ACCEPT #multiport :多端口模块 #根据IP范围设置封锁规则 [root@proxy ~]# 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
主机名 | 网卡、IP地址、网关 |
---|---|
内部主机:host28 | ens32:192.168.1.28,网关:192.168.1.100 |
内部防火墙:proxy | ens32外网IP:192.168.0.26,ens34内网IP:192.168.1.100 |
外部主机:web27 | ens32:192.168.0.27,网关:192.168.0.26 |
#实现192.168.1.28转换为192.168.0.26[root@proxy ~]# iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -p tcp --dport 80 -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#web1动态查看访问日志[root@web1 ~]# tail -f /var/log/httpd/access_logclient 192.168.1.30访问网站curl http://192.168.0.27#所有iptables规则都是临时规则,如果需要永久保留规则需要执行如下命令[root@proxy ~]# service iptables save
管理员提前为用户设置执行权限许可
被授权用户有权执行授权命令
配置文件:/etc/sudoers
命令格式:sudo 特权命令
#修改/etc/sudoers文件,为lisi用户授予相关脚本的执行权限,允许通过systemctl工具来管理系统服务,修改/etc/sudoers配置文件可以用vim编辑文件,或者使用visudo命令修改[root@master ~]# visudo.. ..root ALL=(ALL) ALLlisi ALL=(root) /bin/systemctl解释:授权lisi用户以root身份执行systemctl命令#切换lisi用户验证sudo权限[root@master ~]# su - lisi[lisi@master ~]$ sudo -l.. ..用户 lisi 可以在 master 上运行以下命令: (root) /bin/systemctl #通过sudo启动服务[lisi@master ~]$ sudo systemctl start httpd[lisi@master ~]$ sudo systemctl status httpd[lisi@master ~]$ sudo systemctl stop httpd#为lisi用户添加sudo权限,允许lisi用户可以创键用户,修改用户密码[root@master ~]# visudo.. ..lisi ALL=(root) /bin/systemctl,/sbin/useradd,/bin/passwd,!/bin/passwd root // ! 取反#切换lisi用户验证sudo权限[lisi@master ~]$ sudo useradd haha[lisi@master ~]$ id hahauid=1001(haha) gid=1001(haha) 组=1001(haha)#修改haha用户密码[lisi@master ~]$ sudo passwd haha 更改用户 haha 的密码 。新的 密码:123无效的密码: 密码少于 8 个字符重新输入新的 密码:123passwd:所有的身份验证令牌已经成功更新。#为sudo机制启用日志记录,以便跟踪sudo执行操作[root@master ~]# visudo.. ..Defaults logfile="/var/log/sudo.log" #手动添加.. ..#普通用户执行sudo命令[lisi@master ~]$ sudo systemctl start httpd#查看日志是否记录[root@master ~]# cat /var/log/sudo.log Sep 24 12:57:09 : lisi : TTY=pts/1 ; PWD=/home/lisi ; USER=root ; COMMAND=/bin/systemctl start httpd
OpenSSH开源免费提供ssh远程安全登录的程序
ssh协议端口:22/tcp
服务名:sshd
ssh提供密钥认证登录方式
#生成公私钥[root@localhost ~]# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:Yjcq3+SAOmVQgCbRVC+6QgJp+rss5MK+anEwitmi4Xo root@localhostThe key's randomart image is:+---[RSA 2048]----+|.=oo. ||oo. .. ||=. .. . ||+o.. . ||=++. o S ||O+.ooo + . ||Bo=oo o . ||+BEo o = ||O=*o . o |+----[SHA256]-----+#查看密钥文件[root@localhost ~]# ls .sshid_rsa id_rsa.pub#将公钥拷贝至其他主机[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.27#其他主机查看公钥文件[root@host-27 ~]# ls .sshauthorized_keys#验证是否实现密钥认证登录[root@localhost ~]# ssh 192.168.0.27Last login: Sat Jun 5 00:41:47 2021 from 192.168.0.1[root@host-27 ~]# [root@host-27 ~]# exit登出
#将本地文件拷贝至远程主机[root@localhost ~]# touch /opt/test.txt[root@localhost ~]# scp /opt/test.txt root@192.168.0.27:/opt#将远程主机文件拉取到本地[root@localhost ~]# scp root@192.168.0.27:/etc/fstab /opt[root@localhost ~]# ls /optfstab test.txt
[root@master ~]# vim /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 #定义账号黑名单
https://blog.csdn.net/qq_28513801/article/details/90696863