面试点:
1.四表五链
2.禁止访问本机某个端口
3.禁止某个来源IP
需要练习:
1.禁IP
2.禁端口
3.对某些IP地址段进行端口限制
4.ICMP 禁ping
5.共享上网
6.端口映射
环境:
m01 10.0.0.61 172.16.1.61
web01 10.0.0.7 172.16.1.7
安装:
yum install -y iptables-services
[root@m01 ~]# rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables#防火墙的配置文件
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service
#防火墙服务配置文件(命令)
#防火墙相关模块 加载到内核中
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#永久
cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
EOF
[root@m01 ~]# systemctl stop firewalld
[root@m01 ~]# systemctl disable firewalld
[root@m01 ~]# systemctl start iptables.service
[root@m01 ~]# systemctl enable iptables.service
[root@m01 ~]# iptables -nL
3.6 配置filter表规则 {#36-配置filter表规则}
- 正式配置之前 先备份, 清空规则
[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z
[root@m01 ~]# iptables -nL
3.6.1 禁止访问22端口 {#361-禁止访问22端口}
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
运行后,xshell 挂了,需要用虚拟机进入 删除该规则
iptables -D INPUT 1
3.6.2 封ip 屏蔽某个ip {#362-封ip--屏蔽某个ip}
iptables -I INPUT -s 10.0.0.7 -j DROP
iptables -I INPUT -s 172.16.1.7 -j DROP
3.6.3 禁止网段连入(禁止10.0.0.0/24网段访问 8888端口) {#363-禁止网段连入禁止1000024网段访问-8888端口)}
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8 -j DROP
ssh 10.0.0.61 连接不上
ssh 172.16.1.61 可以连接上
3.6.4 只允许指定网段连入(允许10.0.0.0网段) {#364---只允许指定网段连入允许10000网段)}
实现阿里云白名单功能 :默认是拒绝 开放端口 网段
allow 10.0.0.0/24;
deny all;
#方法1: 利用 ! 进行排除
#只准许 10.0.0.0/24 访问 言外之意 除了 10.0.0.0/24 都拒绝
iptables -I INPUT ! -s 10.0.0.0/24 -j DROP
#方法2: 修改链默认规则 修改为拒绝 添加准许
先配置好规则 准许规则
修改默认规则
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
`iptables -nL`
修改为 DROP
iptables -P INPUT DROP
#测试完成后 修改回去
iptables -P INPUT ACCEPT
3.6.4 指定多个端口 {#364-指定多个端口}
方法1:
iptables -I INPUT -p tcp --dport 8888 -j DROP
iptables -I INPUT -p tcp --dport 9999 -j DROP
方法2:
[root@m01 ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443 -j DROP
#如果是 连续的端口 可以不加上-m multiport 1:1024
[root@m01 ~]# iptables -I INPUT -p tcp --dport 1024:65535 -j DROP
3.6.6 匹配网络状态(TCP/IP连接状态) {#366---匹配网络状态tcpip连接状态)}
-m state --state
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3.6.7 限制并发及速率
-m limit 限制模块
-m limit --limit 10/minute #每分钟只能有10个数据包 每6秒生成
-m limit --limit n/{second/minute/hour}:
解释:指定时间内的请求速率"n"为速率,后面为时间分别为:秒 分 时
-m limit --limit 10/minute --limit-burst 5 每6秒释放工牌 给别人使用
#10个数据包
前5个 1个1个工牌 从第6个开始 每6秒 才能释放1个工牌
--limit-burst [n]
解释:在同一时间内允许通过的请求"n"为数字,不指定默认为5
测试 演示
#ping icmp 协议 进行测试
iptables -F
iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP