iptables:
我们设置的iptables也就是防火墙是很有必要的,我们的服务器可能每天都在承受着攻击,如果我们不设置,那么我们一切都是给别人做嫁衣而已。
安全的ping:
当我们发出ping请求时不受限制,当其他人ping我们时则直接拒绝
[root@localhost ~]# iptables -A OUTPUT -p icmp -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP
[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
multiport模块 :多端口
允许这些端口的服务可以被其他人访问(这个配置的前提是,先拒绝所有的,否则这个配置就失去了意义)
[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 21,22,80 -j ACCEPT
set模块:建表
[root@localhost ~]# yum install ipset -y
[root@ansible(nanyibo) ~]# ipset create sshlist hash:net maxelem 10000 #建表
[root@localhost ~]# ipset add sshlist 172.18.254.227 #从表sshlist中增加一个ip
[root@localhost ~]# ipset add sshlist 172.18.254.174
[root@localhost ~]# ipset -L #列出表的信息
Name: sshlist
Type: hash:net
Revision: 3
Header: family inet hashsize 1024 maxelem 1000
Size in memory: 16816
References: 0
Members:
172.18.254.174
172.18.254.227
从表中删除一个ip:
[root@localhost ~]# ipset del sshlist 172.18.254.227
利用表来设置iptables:
拒绝22端口被访问
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m set --match-set sshlist src -j DROP
limit模块:
可以先进入8个 然后以每分钟10个进入
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 8 -j ACCEPT
状态跟踪:
[root@localhost ~]# modprobe nf_conntrack_ftp #跟踪随机端口的端口号,
[root@localhost ~]# iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT #ESTABLISHED,RELATED这要写上,否则无法跟踪
实验:
允许inside可以ping outside 不允许outside ping inside
防火墙:inside ip:192.168.153.7 outsite ip: 10.10.10.7 两块网卡
inside ip:192.168.153.101
outside ip:10.10.10.102
开启防火墙的ip转发:vim /etc/sysctl.conf #下次启动机器后开启
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p #暂时开启
net.ipv4.ip_forward = 1
指定路由:
在inside
[root@localhost ~]# route add default gw 192.168.153.7
在outside
[root@localhost ~]# route add default gw 10.10.10.7
方法一:
[root@localhost ~]# iptables -A FORWARD -j REJECT
[root@localhost ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp --icmp-type 8 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -d 192.168.153.0/24 -s 10.0.0.0/8 -p icmp --icmp-type 0 -j ACCEPT
方法二:
[root@localhost ~]# iptables -A FORWARD -j REJECT
[root@localhost ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp --icmp-type 8 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
方法三:
[root@localhost ~]# iptables -A FORWARD -j REJECT
[root@localhost ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp -m state --state NEW -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
inside(ip:192.168.242.139)内网搭建httpd并且改监听端口为9527 让一个能上网的服务器访问(ip:172.18.254.74):
防火墙(可以同外网):ip 172.18.251.133 192.168.242.140
iptables -t nat -A PREROUTING -d 172.18.254.96 -p tcp --dport 80 -j DNAT --to-destination 192.168.153.101:9527
补充:
iptables -n 不反解 不将ip解析为网络地址,不将端口解析为服务
一般命令为 iptables -nL
显示标号: --line-number
iptables INPUT -p tcp --dport 22 -j DROP 拒绝还保持连接状态,只是没有回应
iptables INPUT -p tcp --dport 22 -j REJECT 直接回应拒绝
iptables -I INPUT # 插入使其成为第#条
iptables -D INPUT # 删除第几条策略 iptables -D INPUT -s 192.168.153.7 -j REJECT 删除本条策略
iptables -R INPUT # … 替换第#条策略
ping请求的类型: icmp-type 8 请求 发出ping请求时
icmp-type 0 回应 得到发出的请求的对方的回应