iptables
1. iptables的安装
安装:
yum install iptables iptables-services -y
rpm -ql iptables-services
启动防火墙
systemctl start iptables.service
systemctl enable iptables.service
检查模块是否加载成功
lsmod |egrep 'nat|ipt|filter'
手动的加载模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
当然治理使用的是iptables,firewalld也可以进行防火墙的管理
2. iptables命令参数
参数 | 作用 |
---|---|
-t | 指定表,默认filter |
-A | 把规则追加到末尾 |
-I | 把规则掺入到第1条,添加拒绝类规则的时候 |
-p | 指定协议,tcp udp icmp |
–dport | 目标端口 |
–sport | 源端口 |
-d | 目标ip地址 |
-s | 源ip地址 |
-i | 数据进来的时候的网卡 |
-o | 数据出去通过的网卡 |
-j | 方法:ACCEPT准许 DROP拒绝 |
-F | 清除链中的所有规则 |
-X | 清空自定义的链的规则 |
-Z | 清空计数器 |
-n | 不要把端口解析服务名字 |
-L | 显示表中的规则 |
–line-number | 给每个链的规则加上行号 |
-D | 删除规则,根据规则的号码进行删除 |
3.iptables介绍
表 table | 用来存放链的容器 |
---|---|
链 chain | 存放规则的容器 |
规则 policy | 拒绝/允许 |
对于centos7,我们可以stop,firewalld,安装iptables.
iptables的匹配规则:
1.从上往下依次匹配
2.一旦匹配上就不在往下匹配了
3.默认规则,放行所有
优先级设置:谁访问多,谁在上边
匹配频次多的放在上面
3.1 四表五链
表
filter | 过滤,默认的表,防火墙功能 |
---|---|
nat | 实现NAT转化:1.共享上网 2.端口转发 |
mangle | 主要负责修改数据包中特殊的路由标记,如TTL,TOS,MARK等,这个表定义了5个链 |
raw |
链
filter表:
INPUT | 就是过滤进入主机的数据包 |
---|---|
FORWARD | 负责转发流经主机的数据包 |
OUTPUT | 就是处理从主机发出去的数据包 |
nat表
PREROUTING | 处理用户请求中的目的地址 目的端口 端口转发 ip映射 |
---|---|
POSTROUTING | 处理离开服务器的请求 源端口 源ip :共享上网 |
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址 |
4. filter表的一些使用案例
先清除默认的
iptables -nL
iptables -F
iptables -X
iptables -Z
配置规则禁止22端口访问
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
这个时候xshell就会断开连接
使用本地的黑窗口
显规则的行号
iptables -nL --line-numbers
删除禁止22的
iptables -D INPUT 1
禁止10.0.0.7的访问我的22端口
iptables -t filter -A INPUT -p tcp -s 10.0.0.7--dport 22 -j DROP
禁止所有
iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -j DROP
禁止10.0.0.8访问80端口
iptables -t filter -A INPUT -p tcp -s 10.0.0.8 --dport 80 -j DROP
禁止某个ip访问
iptables -I INPUT -p tcp -s 10.0.0.8 -i eth0 -j DROP
iptables -A INPUT -p tcp ! -s 10.0.0.8 -i eth0 -j DROP
只允许一台连接 叹号 取反 除了7谁都不能
iptables -A INPUT -p tcp ! -s 10.0.0.7 --dport 80 -j DROP
禁止一个网段不能访问80
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 80 -j DROP
禁止10.0.0.7的访问22和80 ACCEPT表示可以与DROP相反
iptables -I -INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP
禁止访问22到100之间的所有端口
iptables -I -INPUT -p tcp -s 10.0.0.7 --dport 22:100 -j DROP
禁止icmp类型,例如ping --icmp-type 8 icmp类型协议号8
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
准许或禁止端口
iptables -I INPUT -p tcp ! --dport 1:1024 -j DROP
多个端口 不连续 80,433,52113,22
iptables -I INPUT -p tcp -m multiport ! --dport 80,443,22 - j DROP
准许或禁止ping
iptables -I INPUT -p icmp --icmp-type any -j DROP
连接状态
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
匹配网络限制策略(限制并发 访问的频率)
在同一时间内允许通过的请求”n”为数字,不指定默认为5
iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
5. 保存规则
iptables-save 这样重启会失效
这样重启会不会失效
iptables-save >/etc/sysconfig/iptables
改规则之间可以先保存一个附件,可以restore恢复原来
iptables-restore < /etc/sysconfig/iptables
systemctl restart iptables.service
6. 企业防火墙配置案例
生产环境的防火墙配置
允许ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许本机回环lo接口数据流量流出与流入
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
准许icmp协议通过
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
准许用户使用的端口通过 80,443
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
允许用户与服务器建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
开启信任的IP网段**
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -p all -j ACCEPT
修改默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
代码:
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -s 192.168.80.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -nL
7. 局域网共享上网配置
7.1 能上网主机的配置
m01 192.168.80.61 内网ip 172.16.1.61
防火墙配置
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -s 192.168.80.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -nL
当时172.16.1.0/24这个网段访问的时候就把地址转换为192.168.80.61
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j SNAT --to-source 192.168.80.61
iptables -nL -t nat
开启内核转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
7.2 不能上网主机配置
web01 内网ip 172.16.1.7
假如有外网,关闭外网
vim /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes 改为
ONBOOT=no 开机不自启
ifdown eth0
ip a
这个时候只剩下eth1,添加网关
vim /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61
修改域名解析地址,修改成m01的网关地址
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.80.2
这个时候就可以使用ping 外网了
[root@web01 ~]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.18) 56(84) bytes of data.
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=1 ttl=127 time=27.2 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=2 ttl=127 time=27.0 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=3 ttl=127 time=26.4 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=4 ttl=127 time=26.2 ms
ping 不同问题:
1.www.baidu.com 域名不知道
没有配置nameserver,修改/etc/resolv.conf文件
2. ping没有反应
防火墙的配置有问题,该防火墙的配置相当于白名单,除了白名单里边的其他的人都不允许访问
解决办法:
1.修改默认规则
iptables -P FORWARD ACCEPT
2.配置filter的FORWARD
iptables -A FORWARD -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -d 172.16.1.0/24 -j ACCEPT
-s 源地址 -d 目标地址 forward的进去一个,出来也有一个
8. 本机访问端口转发,可以xshell访问没有外网的主机
访问防火墙服务器的9000端口就可以访问web01的22端口(这个时候web01是没有外网的的)
192.168.80.61:9000 —》 172.16.1.7:22
iptables -t nat -A PREROUTING -d 192.168.80.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
iptables -nL -t nat --line-numbers
这样访问不了的解决办法
对于web01需要配置就是,把eth1的网关配置成防火墙服务器的ip
vim /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61
通过xshell 就也可以连接访问
9. ip的一对一映射
ip addr add 10.0.0.81/24 dev eth0 label eth0:0
iptables -t nat -I POSTROUTING -s 10.0.0.0/255.255.240.0 -d 10.0.0.81 -j SNAT --to-source 10.0.0.2
iptables -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51
iptables -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81
检查:
ping 10.0.0.81
tcpdump|grep -i icmp(两台机器上分别监测)
telnet 10.0.0.81 873(51上提前配好)
映射多个外网IP上网
iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11
iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.12