iptables防火墙
iptables规则
firewalld---->iptables----->内核(netfilter)
安装iptables服务
systemctl stop firewalld.service
systemctl disable firewalld.service
yum list |grep iptables
yum -y install iptables-services
systemctl start iptables.service
systemctl enable iptables.service

应用层防火墙:
网络层防火墙:基于ip地址,端口号,tcp,udp限制
#####################################
iptables有4表5链
4个表:
filter过滤表[设置允许和拒绝的规则]
nat地址转化表[内网IP转外网IP,外网IP转内外ip]
raw数据表跟踪表[记录每个的连接](数据包跟踪)
mangle修改状态[修改包头] (路由器中修改TTL的值)
重点学习,掌握的是filter和nat表
5个链:
INPUT:入战规则 限制其他主机访问自己的主机
OUTPUT:出战规则 限制自己的主机访问其他主机
FORWARD:转发规则(软路由时应用) 在自己的主机设置数据包转发
PREROUTING:路由前规则(软路由时应用)
POSTROUTING:路由后规则(软路由时应用)
############################################
用自己的主机192.168.4.5测试
命令的语法格式 匹配即停止
iptabless [-t 表名] 选项 [链名] [条件] [-j 目标操作] ##不打 [-t 表名] 默认为filter
iptables -t filter -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j REJECT ##拒绝192.168.4.100主机用tcp协议访问我的端口22(即不能用ssh访问为)
选项:
-A追加规则
-I插入规则 ##插入第一个行
-L查看规则
-D删除规则:REJECT,DROP,ACCEPT
条件:
源 协议 目标
-s -p --dport
###########################################################
iptables -I INPUT -s 192.168.4.100 -p tcp --dport 80 -j REJECT ##拒绝192.168.4.100主机用tcp协议访问我的端口80(即不能用80端口访问我的web网页)
iptables -I INPUT -s 192.168.4.100 -p icmp -j REJECT ##拒绝192.168.4.100主机用icmp协议访问我(即不能ping我)

注意事项/整体规律
-可以不指定表,默认为filter表
-有规则先匹配规则,没有规则匹配默认规则
-选项/链名/目标操作用大写字母,其余都小写

iptables -I INPUT -p tcp --dport 22 -j LOG ##不允许,也不拒绝,用22端口访问我的都放入/var/log/messages ##不会匹配即停止

日志---->远程
日志---->打印
176.121.205.1
###########################################################
iptables -L //显示filter表所有链规则
iptables -nL //数字显示filter表所有链规则
iptables -nL --line-numbers //显示行号
iptables -D INPUT 3 //删除入站第三行
iptables -F //清空filter表所有
iptables -t nat -F //清空nat表
iptables -t mangle -F //清空mangle表
iptables -P INPUT DROP //入站设置默认规则
iptables -I INPUT 2 -s 192.168.4.254 -p tcp --dport 80 -j ACCEPT //插入规则到进站第二行,也可以不指定源IP
iptables -A INPUT -s 192.168.4.254 -p tcp --dport 8080 -j ACCEPT //追加规则到末尾,也可以不指定源IP
###########################################################
在192.168.4.5主机上开启路由功能
临时开启路由转发
cat cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward //开启路由转发
echo 0 > /proc/sys/net/ipv4/ip_forward //关闭路由转发
永久开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -a //查看所有内核
4.5 ------------------web1(2.100)
client------->proxy |
2.5 ------------------web2(2.200)
在4.5上做网络型防火墙
iptables -I FORWARD -p icmp -j REJECT
如果有人让路由转发icmp的包,则拒绝

iptables -I FORWARD -p tcp --dport 22 -j REJECT
如果通过路由远程内网里的主机ssh,则拒绝

iptables的条件规则
-s 匹配源ip地址
-d 匹配目标IP地址
--sport 匹配源端口
--dport 匹配目标端口
-i 匹配进站网卡
-o 匹配出站网卡
--icmp-type 匹配icmp类型
iptables -I INPUT -p icmp -j REJECT
其他主机无法ping本机,但本机也无法ping其他主机

iptables -I INPUT ! -s 192.168.4.100 -p tcp --dport 1:1024 -j REJECT
除了192.168.4.100外。使用tcp,访问本机的1到1024端口都拒绝
这条规则,不决定4.100是否可以访问本机

iptables -F
iptables -I INPUT -p icmp --icmp-type echo-request -j RROP (echo-reply)
其他主机无法ping本机,但本机可以ping其他主机
参考#iptables -p icmp --help帮助信息
##################################################
iptables 扩展过滤格式:
-m 扩展模块 --扩展条件 条件值

-m mac --mac-source MAC地址
-m multiport --sports 源端口列表
-m multiport --dports 目标端口列表
-m iprange --src-range IP1-IP2
-m iprange --dst-range IP1-IP2

临时改IP地址 ifconfig eth0 192.168.4.200/24

#iptable -I INPUT -s 192.168.4.100 -j REJECT
//限制IP,但对方修改IP后,可以跳过规则
#iptables -I INPUT -m mac --mac-source 54:52:09:08:01:01 -j REJECT
//限制mac地址,对方修改IP地址后,还是限制 arp -a 获取mac地址

#iptables -I INPUT -p tcp -m multiport --dports 25,110,80,22,1024:1028 -j ACCEPT
//一次性允许多个端口,逗号为不连续端口,冒号为连续的端口

#参考man iptables-extensions
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
###################################################
SNAT源地址转换(内网想访问外网)
route add default gw 192.168.2.5 //临时增加默认网关,如果没有主机网卡没有网关可用,就用这个。

pc(2.100)---------------------------
内网 2.5|路由|4.5-------------------->4.100外网
pc(2.200)---------------------------
默认如果路由器开启转发功能,路由器会转发数据包,但是下一步,这个网站回数据,回应给私有IP

pc(2.100)---------------------------2.5|路由|4.5-------------------->4.100外网
[s:2.100] [包]转发[包]
[d:4.100] [无修改][s:4.5,d:4.100] [包]
在2.100上:
curl http://192.168.4.100
在4.100上:
tailf /var/log/httpd/access_log
192.168.4.5 - - [11/Feb/2018:21:54:22 -0500] "GET / HTTP/1.1" 403 3985 "-" "curl/7.29.0"
在路由器上输入iptables规则
iptables -t nat -I POSTROUTING -s 192.168.2.0/24 -p tcp -j SNAT --to-source 192.168.4.5
####################################################################
DNAT目标地址转换(外网想访问内网)
pc(2.100)<---------------------------2.5|路由|4.5<--------------------4.100外网
在2.100上准备一个web网页
在4.5上做防火墙规则,做DANT:
iptables -t nat -I PREROUTING -d 192.168.4.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.100
在4.100上访问4.5的80端口,4.5跳转到2.100
curl http://192.168.4.5
192.168.2.100
####################################################
通过不同端口映射到不同的主机(不同的端口,不同的主机),ssh不同的主机 2.118 2.117 2.114为私有地址
在4.5机上:
iptables -t nat -I PREROUTING -d 192.168.4.5 -p tcp --dport 1000 -j DNAT --to-destination 192.168.2.118:22
在4.100机上:
ssh -X root@192.168.4.5 -p 1000
#############################################################################
在4.5机上:
iptables -t nat -I PREROUTING -d 192.168.4.5 -p tcp --dport 1001 -j DNAT --to-destination 192.168.2.117:22
在4.100机上:
ssh -X root@192.168.4.5 -p 1001
##############################################################################
在4.5机上:
iptables -t nat -I PREROUTING -d 192.168.4.5 -p tcp --dport 1002 -j DNAT --to-destination 192.168.2.114:22
在4.100机上:
ssh -X root@192.168.4.5 -p 1002

虚拟机为在伪装成真机网卡
iptables -t nat -I POSTROUTING -s 192.168.4.0/24 -o enp2s0 -j MASQUERADE