iptables
跳转到导航
跳转到搜索
iptables是一套在Linux上常见的防火墙软件。
简介
iptables是一套Linux上常见的防火墙软件,可以安装iptables-persistent确保在开机时生效。
范例
一般
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p icmp -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -P INPUT DROP
有IPv6的机器要另外加上IPv6相关的设定:
sudo ip6tables -A INPUT -i lo -j ACCEPT
sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
sudo ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo ip6tables -P INPUT DROP
NAT
sudo iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o ens5 -j MASQUERADE
GeoIP
先安装并且下载一份GeoIP资料:
sudo apt install -y libtext-csv-xs-perl xtables-addons-common; sudo mkdir /usr/share/xt_geoip; cd /usr/share/xt_geoip; sudo /usr/lib/xtables-addons/xt_geoip_dl; sudo /usr/bin/perl /usr/lib/xtables-addons/xt_geoip_build
设定挡掉:
sudo iptables -I INPUT -p tcp -m geoip --source-country CN -m tcp --dport 6991 -j DROP
sudo iptables -I DOCKER-USER -p tcp -m geoip --source-country CN -m tcp --dport 6991 -j DROP
后续可以在/etc/cron.weekly
自动更新GeoIP的资料。
TCP Proxy
这边TCP Proxy的范例是想:
因为这是在kernel层处理封包转送的,需要开通net.ipv4.ip_forward
:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-net.conf; sudo sysctl -p /etc/sysctl.d/99-net.conf
回来处理封包本身,首先要先把TCP封包中,连到Proxy的目标换成目的机器:
sudo iptables -t nat -A PREROUTING -d 192.0.2.1 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.1:8080
但这样做,从本机连到自己Port 80的封包不会换目标(因为本机连线不会过PREROUTING
),所以通常会再到OUTPUT
上指定:
sudo iptables -t nat -A OUTPUT -d 192.0.2.1 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.1:8080
但上面的行为是没有记忆力的,这时候就需要让iptables使用MASQUERADE
记录连线,这样反过来时才知道怎么送回去:
sudo iptables -t nat -A POSTROUTING -d 10.1.1.1 -p tcp --dport 8080 -j MASQUERADE
快速设定
给我自己用的:
sudo iptables -A INPUT -i lo -j ACCEPT; sudo iptables -A INPUT -p icmp -j ACCEPT; sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; sudo iptables -A INPUT -s 114.34.121.114 -j ACCEPT; sudo iptables -A INPUT -s 35.234.52.75 -j ACCEPT; sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT; sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT; sudo iptables -P INPUT DROP; sudo ip6tables -A INPUT -i lo -j ACCEPT; sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT; sudo ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT; sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT; sudo ip6tables -P INPUT DROP; sudo apt install -y iptables-persistent
相关连结
外部链接
- 官方网站 (英文)