iptables
yum install iptables -y
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld #锁定服务
systemctl start iptables.service
systemctl enable iptables.service #开机自启动
相关概念:
Iptables 利用的是数据包过滤的机制,所以他会分析数据包的报头数据,根据报头数据与定义的规则来决定该数据包是否可以进入主机或者被丢弃,也就是说,根据数据包的分析资料比对预先定义的规则内容,若数据包数据与规则内容相同则进行动作,否则就继续下一条规则的比对,重点在比对与分析顺序。
iptables的3张表5条链:
Filter :主要跟进入linux本机的数据包有关,是默认的table。
INPUT:主要与想要进入linux主机的数据包有关。
OUTPUT :主要与linux主机所要送出的数据包有关。
FORWORD :与linux主机没有关系,他可以传递数据包到后台的计算机中,与NAT的table相关性较高。
NAT :是network address translation 的缩写,这个表格主要是用来进行来源与目的地的IP或port的转换,与linux本机无关,主要与linux主机后的局域网内计算机相关。
PREROUTING :在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROYTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT :与发送出去的数据包有关。
Mangle :这个表格主要是与特殊的数据包的路由标志有关。
iptables -t filter -L #列出目前filter表中规则
iptables -t filter -nL #列出目前filter表中规则,不进行与hostname的反查,列出速度更快
iptables -F #清楚所有的已制定的规则(临时清楚,重启后又恢复)
service iptables save #删除所有已制定的规则
iptables -A INPUT -i lo -j ACCEPT #设置lo为信任设备,进出lo的数据包都接受
ipttables -A INPUT -s 172.25.254.50/24 -j ACCEPT #只要该主机的数据包通通接受
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #访问80端口数据包都接受
iptables -A INPUT -j REJECT #所有数据都拒绝
[[email protected] zones]# iptables -A INPUT -j REJECT
[[email protected] zones]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 172.25.254.0/24 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables -D INPUT 3 #删除第三条链
iptables -nL
测试:由于filter 的读取规则是从上到下读取,由于第二条允许172.25.254.50主机访问所有,所以此时仍能访问80端口
iptables -N westos #新建链
iptables -E westos linux #更改链名称
iptables -X linux #删除链
NEW ESTABLISHED RELATED LISTEN
netstat -anutple ####查看服务状态
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #正在进行的和已经进行过的全部允许
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT #新的回环全部允许
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT #新的80端口允许
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT #新的22端口允许
iptables -A INPUT -m state --state NEW -j REJECT #新的数据包全部拒绝
原地址转换与地址伪装
实验前,删除所有以前写的策略
iptables -nL -t nat
测试:此时,用172.25.254.150主机连接172.25.110时,结果显示的是172.25.254.50主机连接到了172.25.50.110主机
iptables -t nat -A PREROUTING -j DNAT --to-dest 172.25.50.110 #目的地转换
iptables -nL -t nat
测试:用172.25.254.50主机连接172.25.254.150 主机时,结果连接的是172.25.50.110主机
PREROUING 路由后
POSTROUING 路由前
sysctl -a |grep ip_forward ####开启本机两个网卡之间通信
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p