我的目的是关闭所有对外服务的端口,只允许ssh服务的22端口接受外面的请求。
首先在我的测试服务器上进入root权限,然后用下面的命令查看iptables
root@host2:~# iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 105 packets, 10480 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 2 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 3 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 4 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED 2 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 4 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT 25 packets, 3380 bytes) num pkts bytes target prot opt in out source destination
-n 指的是显示地址和端口号
-L 指显示链里面的规则
--line-number参数用来显示行号,删除的时候很有用
从上面的结果可以看到,策略上允许所有的输入连接。
先添加ssh端口的访问支持防止被阻在外面
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
然后策略上关闭所有的进入请求
iptables -P INPUT DROP
试一下从另外一台机器链接,ssh登录没问题,除了开始要等一会儿。
现在先删除所有的规则,预防万一,一般不使用。
iptables -F
iptables -D INPUT 4
有两种方法解决:
1.如果为了绝对的安全,可以临时手动打开策略,用完后再关闭。
iptables -P INPUT ACCEPT
//DO SOMETHING
iptables -P INPUT DROP
2.添加一个规则,允许已经建立的连接接收进来的数据
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
不过有些系统上没有conntrack模块, 用下面的命令也一样:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT来自帖子: http://www.webhostingtalk.com/showthread.php?t=1020208
根据自己的需要再添加其他的端口吧。
如果想限制有限的机器向服务器发起请求,可以用-s参数,比如:
iptables -A INPUT -p tcp -s 10.112.18.0/24 --dport 27017 -j ACCEPT
仅在10.112.18.0/0网段的机器才能连接上本机的27017端口。
如果去掉/24,代表指定的某个IP才能访问。
如果仅仅想本机访问,用下面的命令:
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 27017 -j ACCEPT
也可以通过这个命令,将本地访问完全放开:
iptables -A INPUT -i lo -j ACCEPT
ubuntu下的详细iptables操作可以参考:
https://help.ubuntu.com/community/IptablesHowTo
两步,
1.安装
apt-get install iptables-persistent
注意,有些Ubuntu 12.04安装会有问题,目前这个bug没有修复。
https://bugs.launchpad.net/ubuntu/+source/iptables-persistent/+bug/1002078
2.保存规则文件
service iptables-persistent save
重启即可。
iptables-persistent是一个开机启动脚本,在/etc/init.d/目录下,感兴趣的可以看一下。